RabbitMQ: come ottenere una comunicazione one-to-one scalabile?

0

Sto cercando di usare RabbitMQ per la comunicazione bidirezionale one-to-one tra client e server. Pertanto, Client 1 dovrebbe essere in grado di comunicare solo con Server 1 e viceversa:

I server rimangono sempre connessi a RabbitMQ, mentre i client vengono avviati e arrestati su richiesta. Questo perché un server dovrebbe ricevere tutti i messaggi dal suo client, ma se un server invia un messaggio al suo client quando il client non è presente, va bene se il messaggio è andato perso.

Inoltre, ci deve essere una coppia client-server per ogni utente del sistema.

La mia prima idea è stata quella di creare un nuovo utente RabbitMQ e vhost per ogni coppia client-server e due code in ogni vhost (una consumata dal server e una consumata dal client).

Tuttavia, è scalabile? Ad esempio, se ci sono utenti 10k del sistema, ci saranno 10k utenti RabbitMQ, 10k vhosts e 10k code permanenti, connessioni, canali e utenti (dai server).

Possono questi grandi numeri di code e connessioni rappresentare un problema di prestazioni per RabbitMQ?

E quale sarebbe il modo migliore per implementare questo comportamento con RabbitMQ? O è una tecnologia diversa da AMQP e RabbitMQ più adatti per questo caso d'uso?

    
posta weibeld 16.10.2018 - 16:18
fonte

1 risposta

0

Prima di tutto, usare vhosts separati è una grande idea e (se almeno ricordo correttamente) essenzialmente gratuito.

Ogni coda, scambio e così via è un processo di Erlang. Questi si sommano (lentamente). Sono passati diversi anni dall'ultima volta che ho lavorato con RabbitMQ, ma 100ks di processi di Erlang dovrebbero essere fattibili.

Alla fine quella singola casella nel mezzo sarà sovraccaricata. Il clustering delle istanze di RabbitMQ può essere d'aiuto, ma dipende - le code con mirroring aumenteranno la resilienza al guasto del nodo senza aumentare la capacità.

Ciò che potrebbe aiutare di più con la capacità è forse un hash coerente per le coppie client / server che li posiziona su un'istanza RabbitMQ particolare . Ciò rimuove la casella singola nel mezzo per tutte le coppie client / server. Anche se hai iniziato solo con una singola istanza, utilizzare un hash coerente per trovare RabbitMQ significa che puoi facilmente aggiungere più istanze nel mezzo.

    
risposta data 16.10.2018 - 18:02
fonte

Leggi altre domande sui tag