node.js - telegrafjs - Cómo escalar un bot flojo a 1000 de equipos
telegram ontext (1)
Con enchufes flojos, tienes muchas cosas a escala:
- Número de enchufes Esto es fácil porque incluso los servidores baratos pueden manejar miles de sockets, como más de 50k. Pero cada socket representa un par de otros tipos de carga, que se enumeran a continuación.
- Cantidad de memoria utilizada por equipo, que depende de la implementación de su propio servidor. Si intenta mantener una gran cantidad de historial de mensajes en la memoria, llegará al límite de su servidor más rápido que si su código de procesamiento de mensajes es un tanto sin estado.
- Cantidad de E / S, lo que puede hacer que desee descargar cualquier imagen que sirva a un equilibrador de carga diferente.
La otra cosa a considerar es la tolerancia a fallas. Digamos que hiciste un equilibrio de carga pegajoso y uno de tus servidores está manejando 50 equipos. Ese servidor es el único que maneja esos 50 equipos, de modo que si se cae, los 50 bots se desconectan. Alternativamente, puede abrir múltiples sockets por equipo en servidores separados y usar una cola de manejo de mensajes para que cada mensaje solo se responda una vez.
Así que la arquitectura que propondría es un equilibrador de carga delgado y redundante para tomas RTM como una primera capa, y una cola de mensajes confiable debajo de eso.
Para implementar un bot flojo, tengo que lidiar con ''API de mensajería en tiempo real'' de holgura. Es una API basada en WebSocket que le permite recibir eventos de Slack en tiempo real y enviar mensajes como usuario. más información: https://api.slack.com/rtm
Para crear un bot para un solo equipo , necesito abrir una conexión websocket y escucharla para eventos.
Para poner a disposición el bot de holgura para otro equipo. Necesito abrir una nueva conexión websocket. Asi que,
- 1 equipo => 1 conexión websocket
- 2 equipos => 2 conexiones websocket
- N equipos => N conexiones websocket
¿Qué debo hacer para escalar mis conexiones websocket para equipos interminables?
¿Qué tipo de arquitectura puede manejar la autoescala de 1000 conexiones de websockets?