Sto costruendo un sistema distribuito che consiste potenzialmente di milioni di client che hanno tutti bisogno di mantenere una connessione aperta (preferibilmente HTTP) per attendere un comando dal server (che sta girando da qualche altra parte) . Il carico di messaggi/commmandi non sarà molto alto, forse un messaggio/sec/1000 client, il che significa che sarebbe 1000 msg/sec a 1 milione di client. => si tratta fondamentalmente delle connessioni simultanee.server push per milioni di connessioni simultanee
Anche i requisiti sono semplici. Messaggi di sola andata (server-> client), solo 1 client per "canale".
Sono abbastanza aperto in termini di tecnologia (xmpp/websockets/comet/...). Sto usando Google App Engine come server, ma i loro "canali" non funzionano per me sfortunatamente (quote troppo basse e nessun client Java). XMPP era un'opzione ma è piuttosto costoso. Finora stavo usando URL Fetch & pubnub, ma hanno appena iniziato a pagare per le connessioni (grande tempo).
Quindi:
Qualcuno sa di un servizio là fuori che può fare questo per me in un modo conveniente? La maggior parte ho trovato limitato o pesantemente addebito per le connessioni.
Qualche esperienza con l'implementazione di un server di questo tipo? L'ho già fatto e funziona abbastanza bene (basato su Tomcat & NIO) ma non ho ancora avuto il tempo di impostare un ambiente di test di carico di grandi dimensioni (in parte perché questa è ancora una soluzione di fallback, preferirei un server msg di battaglia dura). Qualche esperienza su quanti utenti ottieni per GB? Qualche limite difficile?
mia architettura permette anche di frammentare i server MSG, ma vorrei massimizzare le connessioni simultanee quanto l'overhead msg elaborazione della CPU è minimo.
Questo è più difficile da accettare. Hai considerato un protocollo senza connessione come UDP? Dovresti scrivere i tuoi protocolli di riconoscimento, ma non dovrai mantenere le connessioni e non dovrai sostenere il sovraccarico della connessione. Ho scritto alcuni server distribuiti ad altissima velocità, ma non i clienti. – Gray
FYI, nel frattempo l'ho implementato usando netty (vedi risposta sotto). – Daniel
Cool @Daniel. Dovrò dare un'occhiata. Ho sentito cose buone su Netty ma non l'ho mai usato. – Gray