Estoy construyendo un sistema distribuido que consiste en potencialmente millones de clientes que necesitan mantener una conexión abierta (preferiblemente HTTP) para esperar un comando del servidor (que se está ejecutando en otro lugar) . La carga de mensajes/comandos no será muy alta, tal vez un mensaje/seg/1000 clientes, lo que significa que sería de 1000 msg/seg a 1 millón de clientes. => Básicamente se trata de las conexiones concurrentes.servidor push para millones de conexiones simultáneas
Los requisitos son simples también. Mensajería unidireccional (servidor-> cliente), solo 1 cliente por "canal".
Soy bastante abierto en términos de tecnología (xmpp/websockets/comet/...). Estoy usando Google App Engine como servidor, pero sus "canales" no funcionarán para mí desafortunadamente (cuotas demasiado bajas y ningún cliente Java). XMPP era una opción, pero es bastante caro. Hasta el momento estaba usando URL Fetch & pubnub, pero simplemente comenzaron a cargar conexiones (a lo grande).
Así:
¿alguien sabe de un servicio por ahí que puede hacer eso por mí en una forma asequible? La mayoría de los que he encontrado restringen o cobran mucho por las conexiones.
¿Alguna experiencia con la implementación de dicho servidor usted mismo? De hecho, ya lo he hecho y funciona bastante bien (basado en Tomcat & NIO), pero todavía no he tenido tiempo para configurar un entorno de prueba de carga grande (en parte porque esta sigue siendo una solución alternativa, preferiría un servidor de msj endurecido batalla). ¿Alguna experiencia con la cantidad de usuarios que obtienes por GB? ¿Algún límite duro?
Mi arquitectura también permite fragmentar los servidores msg, pero me gustaría para maximizar las conexiones simultáneas debido a que la carga de procesamiento de la CPU msg es mínima.
Este es uno más difícil de aceptar. ¿Has considerado un protocolo sin conexión como UDP? Tendría que escribir sus propios protocolos de protección, pero entonces no tendría que mantener las conexiones y no tendría que incurrir en la sobrecarga de la conexión. He escrito algunos servidores distribuidos de muy alto rendimiento pero no para clientes. – Gray
FYI, mientras tanto lo he implementado usando Netty (ver respuesta a continuación). – Daniel
Cool @Daniel. Tendré que verificarlo. He oído cosas buenas sobre Netty pero nunca las he usado. – Gray