Balancer che delega le richieste ai server e il problema con Websockets

2

Consente un'applicazione con funzionalità di chat in tempo reale. La chat richiede web socket per poter funzionare in tempo reale.

Ora immaginiamo di avere un "server di bilanciamento" e 3 server di applicazioni. L'istanza dell'applicazione viene eseguita su ogni server.

Il bilanciatore delega la richiesta a 1 di questi 3 server, ad esempio in base al traffico.

La mia domanda è, come gestire le web socket? Esempio:

1) User A logs into an applicition
2) Balancer delegates user A to server 1
3) Web socket is created for user A on server 1

4) User B logs into an applicition
5) Balancer delegates user B to server 3
6) Web socket is created for user B on server 3

7) User A wants to set message to user B
8) Instance of application on server 1 looks for web sockes for user B

I socket Web per l'utente B esistono sul server 3, non sul server 1.

Come affrontare una situazione come questa? Dovrebbe essere trattato a livello di applicazione (ad esempio qualche sincronizzazione delle istanze di app attraverso database / messaggi) o qualche configurazione su "bilanciatore"?

Grazie per l'aiuto.

    
posta trolkura 15.08.2018 - 18:15
fonte

1 risposta

6

Se non sai in anticipo chi vuole comunicare con chi, non sarai in grado di risolverlo a livello di bilanciatore. Se l'utente deve ad es. scegli una chat room prima della connessione, potresti assegnare un server fisso a ciascuna conversazione (calcolarla in base a una funzione deterministica prendendo l'ID / nome della chat come parametro, dando come risultato un'istanza del server).

Altrimenti, interconnettere tutti i server delle applicazioni in un modello di pubblicazione-sottoscrizione . Se User A invia un messaggio a Server 1 per User B , ma questo utente non è connesso al server, dovrebbe inoltrare il messaggio alla rete pub-sub con argomento User B . Se un altro server, ad esempio Server 3 è connesso a User B , è sottoscritto all'argomento User B e può inviare il messaggio a questo utente.

Questo è fondamentalmente ciò che accade:

  1. Quando un utente si connette a un server delle applicazioni, l'applicazione il server inizia a iscriversi a un argomento dedicato a questo utente.
  2. L'utente trasmette un messaggio al server per un destinatario specifico.
  3. SE il server è già connesso al destinatario, semplicemente spinge il messaggio.
  4. ELSE il server pubblica il messaggio sull'argomento dedicato per questo utente.
  5. Quando un server riceve un messaggio sulla rete pub-sub, invia il messaggio all'utente connesso per conto dell'altro server.
  6. Quando un utente si disconnette da un server applicazioni, il server si annulla dall'argomento.
risposta data 15.08.2018 - 19:00
fonte

Leggi altre domande sui tag