Ich baue ein verteiltes System, das aus potenziell Millionen von Clients besteht, die alle eine offene (vorzugsweise HTTP) Verbindung haben müssen, um auf einen Befehl vom Server zu warten (der woanders läuft) . Die Last von Nachrichten/Commands wird nicht sehr hoch sein, vielleicht eine Nachricht/Sekunde/1000 Clients, was bedeutet, dass es 1000 msg/sec @ 1 Million Clients wäre. => es geht im Grunde um die gleichzeitigen Verbindungen.Server Push für Millionen von gleichzeitigen Verbindungen
Die Anforderungen sind auch einfach. One-Way-Messaging (Server-> Client), nur 1 Client pro "Channel".
Ich bin ziemlich offen in Bezug auf Technologie (xmpp/websockets/comet/...). Ich benutze Google App Engine als Server, aber ihre "Kanäle" funktionieren bei mir leider nicht (zu niedrige Quoten und kein Java-Client). XMPP war eine Option, ist aber ziemlich teuer. Bisher verwendete ich URL Fetch & pubnub, aber sie begannen gerade, für Verbindungen aufzuladen (große Zeit).
So:
Kennt jemand einen Dienst aus, dass es für mich, dass in einem erschwinglichen Weise tun kann? Die meisten, die ich gefunden habe, beschränken oder stark für Verbindungen aufladen.
Irgendwelche Erfahrungen mit der Implementierung eines solchen Servers? Ich habe das bereits getan und es funktioniert ziemlich gut (basierend auf Tomcat & NIO), aber ich hatte noch nicht die Zeit, um tatsächlich eine große Belastung Testumgebung einzurichten (teilweise weil dies immer noch eine Ausweichlösung ist, würde ich bevorzugen ein kampfgehärteter msg Server). Irgendwelche Erfahrungen, wie viele Nutzer Sie pro GB erhalten? Irgendwelche harten Grenzen?
Meine Architektur ermöglicht auch den msg-Server fragmentieren, aber ich mag die gleichzeitigen Verbindungen maximieren weil das msg-Verarbeitungs-CPU-Overhead minimal ist.
Dies ist eine härtere zu akzeptieren. Haben Sie ein verbindungsloses Protokoll wie UDP in Betracht gezogen? Sie müssten Ihre eigenen Ack-Protokolle schreiben, aber dann müssten Sie die Verbindungen nicht aufrechterhalten, und Sie müssen nicht den Verbindungsoverhead in Kauf nehmen. Ich habe einige verteilte Server mit sehr hohem Durchsatz geschrieben, aber keine Kunden. – Gray
FYI, ich habe es inzwischen mit netty implementiert (siehe Antwort unten). – Daniel
Cool @ Daniel. Ich muss es überprüfen. Ich habe gute Dinge über Netty gehört, aber nie benutzt. – Gray