Creazione di proxy / gateway TCP multipiattaforma che gestisca il massimo numero possibile di client contemporaneamente su una pipe Ethernet da 1 GB? [chiuso]

2

Quindi quello che mi chiedo è semplice come un preaty - avendo in mente la prossima architettura:

         -> computing unit "A"
        / 
gateway --> computing unit "B" same as A
        \
         -> computing unit "C" same as A

Non ci interessa a quale unità inoltrare la richiesta, quindi dovremmo inviarli uno a uno a A piuttosto che a B che a C e poi a A, ecc.

Mi chiedo in che lingua, usando quale framework è possibile creare tale proxy / gateway TCP multipiattaforma (non dipendente dalla scheda ethernet) che reindirizzerebbe le richieste in entrata in nodi interni tramite rool semplice, e sarebbe in grado di ottenere quanto possibile da carico del cavo Ethernet in / out capacità - ricevere e inviare il più possibile?

Ho iniziato a chiedermi dopo aver letto questo bel articolo del 2003 ...

    
posta myWallJSON 19.12.2011 - 23:03
fonte

3 risposte

2

Risposta breve : utilizza ZMQ

Risposta lunga : con l'input fornito nella tua domanda, presumo quanto segue e ho dato la risposta breve

  • Basta inoltrare le richieste alle macchine informatiche
  • La macchina informatica fa il resto del lavoro
  • Vuoi un framework TCP / IP multipiattaforma

Ma ci sono altre cose da considerare come

  1. Il numero di richieste che riceverai al secondo (1 GBP è ancora grande)
  2. È il tuo lavoro solo con le richieste di inoltro alle macchine perché le macchine di calcolo spesso restituiscono risultati alla macchina che l'ha chiamata (simile ai nodi master-slave)
  3. Quale sarebbe la dimensione media delle tue richieste?
  4. Che cosa succede se inizi ad aumentare le tue macchine informatiche?
  5. Stai provando un'architettura per l'elaborazione distribuita?
  6. Infine e, cosa più importante, hai bisogno di un client di inoltro o di una coda di messaggi?

ZMQ si rivolge a tutto quanto sopra, ma secondo me, puoi andare per RabbitMQ se stai bene con code di messaggi centralizzati

    
risposta data 20.12.2011 - 05:31
fonte
1

Per il numero massimo di client, suppongo che tu voglia anche un throughput elevato, altrimenti il numero di client sarebbe limitato dal numero di porte. Per il massimo rendimento / prestazioni, ti consigliamo il codice nativo.

Guarderei il C ++ con Boost asio . Con asio vorresti comunque:

  1. Assicurati di avere un'efficiente gestione del buffer. Asio fornisce un supporto per questo.
  2. Ottimizza la dimensione del buffer di ricezione / trasmissione del socket
  3. Assicurati di aver impostato correttamente le opzioni del socket (ad es. potresti voler TCP_NODELAY).
  4. Profili la tua applicazione sotto carico per vedere che sta facendo ciò che pensi che stia facendo.

Ricorda inoltre che non otterrai realisticamente più di 700-800 Mbps su un adattatore da 1 GB.

Se le prestazioni sono meno di un problema ci sono molte scelte, node.js sarebbe interessante.

    
risposta data 19.12.2011 - 23:53
fonte
1

Questo è davvero un lavoro per HAProxy. Infatti, se ricordo bene, ha recentemente saturato una scheda Ethernet da 10 Gbs usando haproxy su qualcosa come un vecchio processore Celeron.

Se vuoi davvero riscrivere la ruota, inizia almeno con il codice sorgente HAProxy. È open source.

    
risposta data 20.12.2011 - 03:18
fonte

Leggi altre domande sui tag