Ridimensionamento delle applicazioni del server socket tcp / ip

2

Ho cercato di capire come si ridimensionerebbe un'applicazione che utilizza socket tcp / ip per la comunicazione con il client server. Ad esempio nel seguente schema:

        +------------+
        | Server     |
        +------------+
           |      |
           |      |
           |tcp/ip|
           |socket|
          connections 
           |      |
           |      |
+------------+  +------------+
| Client_001 |  | Client_002 |
+------------+  +------------+

Due client si stanno connettendo a un server. È possibile eseguire un'azione e il risultato può essere inviato a tutti i client connessi al server. Questo è tutto bene e dandy. Tuttavia, se si dovessero introdurre alcuni server applicativi aggiuntivi dietro un sistema di bilanciamento del carico come questo:

+------------+  +------------+
| server_001 |  | server_002 |
+------------+  +------------+
          |       |
          |       |
        +------------+
        | HAProxy    |
        +------------+
           |      |
           |      |
           |tcp/ip|
           |socket|
          connections 
           |      |
           |      |
+------------+  +------------+
| Client_001 |  | Client_002 |
+------------+  +------------+

I client effettuano le connessioni al servizio di bilanciamento del carico, quindi il servizio di bilanciamento del carico delegherà le connessioni a uno dei due server.

Supponiamo che client_001 esegua il programma e che il bilanciamento del carico li colleghi a server_001, quindi client_002 esegue il programma e il servizio di bilanciamento del carico li collega a server_002.

server_001 esegue un'azione per conto di client_001 e invia in risposta un flusso di byte a tutti i client connessi. Tuttavia, poiché client_002 è connesso a server_002, non riceve questo flusso di byte.

Che mi porta alla mia domanda: come puoi inviare una risposta a tutti i client connessi indipendentemente dal server al quale erano connessi tramite il servizio di bilanciamento del carico?

    
posta nullReference 25.09.2017 - 23:21
fonte

1 risposta

2

Suggerirei di consultare i framework di pubblicazione / sub distribuiti. Anche se decidi di implementare te stesso con TCP / IP invece di usare il framework, la loro architettura dovrebbe comunque fornire ispirazione. ZeroMQ gestisce questo caso d'uso, così come Redis .

Puoi leggere come ZeroMQ gestisce pub / sub qui .

Redis distribuisce tagliando il set di dati in blocchi. Ogni server Redis è responsabile di un frammento. Proverai a progettare i tuoi frammenti in modo tale che i client siano equamente distribuiti tra i frammenti.

Puoi avere server_001 connettersi a server_002 come client e quando riceve un messaggio, può inoltrare il messaggio a tutti i client ad esso connessi.

    
risposta data 26.09.2017 - 00:32
fonte

Leggi altre domande sui tag