Node.js, socket.io vs User Initiated Refresh button e Server Load Considerations

3

Mi sto occupando di una situazione qui su un'app web multi-tenant ad alto volume con oltre 100k utenti di aziende che non apprezzano i problemi di prestazioni. Abbiamo bisogno di aggiornamenti "in tempo reale". In pratica inviamo una richiesta a un sistema di terze parti e ci piacerebbe vedere i risultati in tempo reale, sono stati restituiti circa 5 stati e i primi tre gli stati si verificano molto rapidamente (entro un minuto circa) ..

La nostra implementazione attuale prevede un ciclo di aggiornamento che avviene ogni cinque minuti .. (postback parziale della pagina con Jquery), l'utente può sovrascriverlo facendo clic su un pulsante di aggiornamento.

Il motivo per cui siamo andati con questo approccio è a causa del potenziale carico del server con "polling lungo", o postback frequenti (ogni 2 secondi), e il burdon che avrebbe messo sul nostro server (abbiamo alcuni database e Webserver, quindi mantenere un log delle modifiche è fuori questione) al momento non abbiamo cercato su node.js / socket.io, che mi porta alla mia domanda:

se socket.io funziona solo sui browser moderni e deve tornare a Flash o Long-polling se la funzionalità richiesta non è disponibile nel browser, c'è davvero qualche vantaggio nell'usare questa tecnologia oggi (a differenza di 2 anni da ora in poi quando l'ultimo dei sei utenti è costretto ad aggiornare)? il problema è che non vogliamo portare il server in ginocchio perché nel peggiore dei casi questa cosa manterrà le connessioni http aperte per una durata prolungata e rovinerà davvero la nostra esperienza degli utenti (le nostre app sul server web, non ho progettato il sistema )

    
posta hanzolo 24.01.2012 - 19:46
fonte

3 risposte

2

Usa socket.io e configuralo per eseguire il polling su un intervallo di 5 minuti come fallback websocket.

Seriamente i Websocket sono fantastici, li usano se possibile e fanno fallback su qualcosa che ha un carico accettabile sul server.

because worst case this thing is going to keep the http connections open for an extended duration

Se questo porta il tuo web server in ginocchio, allora il tuo server web è uno schifo. Prendi uno che può gestire socket aperti e scala.

    
risposta data 24.01.2012 - 21:09
fonte
1

Quindi hai un'applicazione web con oltre 100k utenti e non hai già statistiche sul rendimento? Vergogna vergogna.

Il problema relativo al sovraccarico dei polling dei server Web probabilmente non verrà risolto con un'unica soluzione. Un oggetto Flash dovrà comunque comunicare con un server da qualche parte, ma anche con questo approccio non è possibile verificare che tutti gli utenti abbiano installato Flash. Non ho Flash sulla mia workstation e probabilmente gli utenti di iPad non saranno in grado di utilizzare correttamente il tuo sito (se questo è un problema). È garantito che in pochi anni IE6 scomparirà praticamente, ma ci saranno sempre client browser che non accettano Flash.

La comunicazione HTTP per il polling è costosa, ma potresti decidere di controllare l'agente utente e utilizzare tali informazioni per decidere quale metodo di polling puoi utilizzare. La comunicazione socket TCP / IP ha un sovraccarico leggermente inferiore ed è preferibile.

    
risposta data 24.01.2012 - 20:49
fonte
1

Da dove proviene tutto questo fanboy? "Crappy servers" perché non "pool di thread", "event loop", "scale" ... almeno non ho ancora notato nessuna lamentela sui plugin esterni, quindi solo trolling su 8/10:)

Suppongo che i browser alpha-websocket e i server di loop di eventi alpha-version non siano "schifosi":)

Solo slogan non sono una soluzione reale. Tutti gli sviluppatori "alla moda" hanno persino usato alcune di queste nuove tecnologie con nomi interessanti su qualsiasi cosa accanto a localhost? :)

Per quanto riguarda la mia soluzione: usa nginx, lighty, ecc. (ad esempio in modalità reverse proxy o anche normale con scripting come fcgi), assegna ad ogni "task" un id univoco, quindi controlla il server ogni 5 secondi (ajax) per la presenza di file statici che creerai dal tuo script in alcune directory predefinite. Quando il file sarà presente, puoi eseguire uno script che ti darà risultati tramite ajax. Semplice, e non sovraccaricherà il server perché controllerai il file statico, non fallirà nel 50% dei browser sul mercato, la traduzione per fanboy "funziona sempre come dovrebbe".

Accanto al webserver del ciclo degli eventi non funzionerà se non si dispone di back-end di scripting degli eventi.

Poi tra 5 anni, quando lo stato di websockets passerà dalla moda alla produzione pronta, puoi usarlo senza compromettere l'usabilità. E naturalmente i nuovi bambini si lamenteranno perché non userete quei server "quantum", "cloudum", ecc. E le specifiche che non funzionano:)

Voglio dire davvero ragazzi? Sei serio? WebSockets è disponibile in IE10 Preview e vuoi scrivere un'app seria utilizzando questo OGGI quando circa il 50% della tua userbase sarà IE? So che è un gioco divertente e funzionerà bene su Chrome, ma non sarai l'unico utente per qualcosa che scrivi al lavoro.

    
risposta data 25.01.2012 - 06:19
fonte

Leggi altre domande sui tag