Come risolvere limitazioni di SignalR a scalabilità orizzontale per backplane

Io uso ASP.NET MVC e C# .Ho trovato SignalR per il trasferimento di dati in tempo reale,ma signalR hanno alcuni limiti.

secondo il problema per questo :

Utilizzando un backplane, la massima velocità di trasmissione di messaggi è inferiore quando i client di parlare direttamente a un singolo nodo del server. Questo perché il backplane in avanti ogni messaggio di ogni nodo, in modo che il backplane può diventare un collo di bottiglia. Se questa limitazione è un problema dipende dall’applicazione. Per esempio, ecco alcuni tipici SignalR scenari:

  • Server broadcast (ad esempio, teleborsa): Backplane di lavorare bene per questo
    scenario, poiché il server controlla la velocità con cui i messaggi sono
    inviati.
  • Client-to-client (ad esempio, chat): In questo scenario, il backplane potrebbe
    essere un collo di bottiglia, se il numero di messaggi di scale con il numero di
    clienti; che, se il tasso di messaggi cresce proporzionalmente come
    più clienti join.
  • Ad alta frequenza in realtime (ad esempio, giochi in tempo reale): Un backplane non è
    consigliato per questo scenario.

Il mio progetto deve ad Alta frequenza in realtime (ad esempio, giochi in tempo reale) .

Inoltre ho bisogno di tempo reale di video chat

La mia situazione :

Ho un Master server e multi Slave server, i Client si connettono al server Slave e ans Slave server di connettersi al server Master.

Esempio :
Server Slave-1 e server Slave-2 collegato al Master server, client Un client e-B collegato a Slave-1 un client C e client-D collegato a Slave-2,

client Un messaggio di invio di dati o in live chat con il cliente-D

Come posso implementare questo scenario ?

[Aggiornamento 1]

Se io non uso signalR per questo problema, cosa posso usare?

[Aggiornamento 2]

Nel mio scenario, il master server agisce come un router e Slave server agisce come un interruttore . I client collegati all’interruttore collegato al router .se il client di inviare Un pacchetto di dati al client-C, dati a pacchetto deve essere inviato al router e il router e gestire i dati a pacchetto.Oltre 2000 numero possibile di server Slave e il numero di utenti per ogni server, è di oltre 10.000.

Grazie.

  • Non utilizzare signalR per questo problema?
  • Così che cosa dovrei usare?
  • ciao amir, sto studiando come fare. sareste disposti a condividere qualsiasi codice di esempio tramite github?

 

One Reply
  1. 27

    Un backplane introdurre ritardi nella consegna del messaggio, che non funzionerà bene per la bassa latenza di lavoro. Se è assolutamente necessario disporre di più server per gestire i tuoi clienti, per questo è assolutamente deve hanno una latenza minima, quindi un backplane non è probabilmente andando a lavorare per voi.

    Tuttavia, check-out questa conversazione sul forum ASP. Il poster è vedere latenze medie di circa 25ms per 60.000 messaggi al secondo e 3.000 clienti collegati su un server.

    Come è spesso il caso, il trade-off è qui tra latenza e la complessità. La soluzione ottimale è per i messaggi per essere indirizzati solo al server(s) contenente il client di destinazione(s). Per ottenere questo è necessario un modo per tenere traccia di ogni connessione client, affrontare si riconnette al server diversi, etc. Probabilmente si può risolvere con un paio di decine di ore di duro lavoro di programmazione, ma, così facendo, si sta andando a rompere la maggior parte di ciò che rende SignalR utile.

    Per le alternative, la prima cosa che viene in mente è ZeroMQ. Un po ‘ più di lavoro, soprattutto se i vostri clienti sono basati su browser, ma a bassa latenza e throughput elevato sono gli obiettivi del progetto per ZeroMQ. Avrete bisogno di gestire scale-out di te però… e sei di nuovo al tracciamento dei punti di connessione tra più server e si riconnette.

    Se nessuna di queste soluzioni risolve i vostri problemi, allora si potrebbe guardare a cambiare la tua architettura. Un metodo comune per il Mmo è quello di avere relative al client di connettersi allo stesso server per ridurre la comunicazione tra server requisiti. I clienti che legittimamente hanno bisogno di comunicare in tempo reale i dati sono messi insieme in un unico server che non devono preoccuparsi di back-plane problemi. Questo server comunica quindi indietro al ‘Maestro’ server solo ciò che è necessario per mantenere il mondo di stato e così via.

    Pianificare la vostra architettura di ridurre i problemi prima di iniziare… ma non passare settimane a lavorare su qualcosa che potrebbe non essere necessario. Fare alcuni test su SignalR e vedere l’effetto che l’backplane in realtà ha sulla latenza prima di tuffarsi nell’abisso.

Lascia un commento