Estoy tratando de determinar cómo equilibrar la carga del tráfico TCP. Entiendo cómo funciona el equilibrio de carga HTTP porque es una arquitectura simple de solicitud/respuesta. Sin embargo, no estoy seguro de cómo equilibrar la carga del tráfico TCP cuando los servidores intentan escribir datos en otros clientes. Adjunté una imagen del flujo de trabajo para un simple servidor de chat TCP donde queremos equilibrar el tráfico entre los N servidores de aplicaciones. ¿Hay balanceadores de carga que puedan hacer lo que estoy tratando de hacer, o necesito investigar un tema diferente? Gracias.¿Cómo equilibra la carga del tráfico TCP?
Respuesta
En primer lugar, su diagrama supone que el equilibrador de carga está actuando como un (TCP) proxy de, que no es siempre el caso. A menudo, se utiliza el enrutamiento directo (o el retorno directo del servidor) o se realiza el NAT de destino. En ambos casos, la conexión entre el servidor de fondo y el cliente es directa. Entonces, en este caso, es esencialmente el protocolo de enlace TCP el que se distribuye entre los servidores back-end. Véase lo siguiente para más información:
Obviamente sí existen servidores proxy TCP (HAProxy ser uno), en cuyo caso el proxy maneja ambos lados de la connecton, por lo que su aplicación necesitaría poder identificar al cliente por la IP/Puerto entrante (que sería del proxy en lugar del cliente). El proxy gestionará la devolución de los mensajes al cliente.
De cualquier forma, todo se reduce al diseño de la aplicación ya que me imagino que el truco es tener una tienda de sesión común (una base de datos de algún tipo, o clave => almacén de valores como Redis), de modo que cuando su servidor de aplicaciones dice "Necesito enviar un mensaje a Frank", puede determinar a qué servidor back-end Frank está conectado (desde DB) y le indica a ese servidor que le envíe el mensaje. Se reduce el problema de las conexiones (del mismo cliente) moviéndose por diferentes servidores backend al tener conexiones persistentes (todos los equilibradores de carga pueden hacer esto), o usando algo intrínsecamente persistente como un websocket.
Esto es probablemente una gran simplificación ya que no tengo experiencia con el software de chat. Obviamente, los propios servidores DB se pueden distribuir entre varias máquinas, para la tolerancia a fallas y el equilibrio de carga.
Gracias por la respuesta informativa. Tendré que examinar esos temas para comprender más. ¿Conoce algún buen recurso para aprender más sobre el equilibrio de carga? ¡Gracias! –
- 1. ¿Cómo se equilibra la carga del sistema operativo entre múltiples procesos que aceptan el mismo socket?
- 2. Herramienta para supervisar HTTP, TCP, etc. Tráfico del servicio web
- 3. Duplicar el tráfico TCP con un proxy
- 4. ¿Cómo simular alta carga de tráfico en una aplicación web?
- 5. Carga de php y ancho de banda/pregunta de tráfico
- 6. (¿Cómo puedo usar ServerSocket para escuchar UDP en lugar de tráfico TCP?
- 7. MongoDB sharding, ¿cómo se equilibra al agregar nuevos nodos?
- 8. tcp connect falla al azar bajo alta carga
- 9. Medición del tráfico de la red con Indy
- 10. Redirigir usuarios en función del tráfico del servidor con PHP
- 11. Redirigir el tráfico TCP a un socket de dominio UNIX bajo Linux
- 12. Modelado de tráfico en Linux
- 13. Cómo calcular la suma de comprobación TCP
- 14. iPhone Socket TCP/IP del servidor/cliente
- 15. Boost :: asio: ¿cómo interrumpir un hilo del servidor tcp bloqueado?
- 16. Tamaño del paquete vacío UDP y TCP?
- 17. Captura de tráfico Sqlmap
- 18. Flush buffer TCP del kernel para paquetes `MSG_MORE`-flagged
- 19. ¿Cómo acelerar el tráfico de red para la simulación del entorno?
- 20. Proxy transparente para tráfico IPv6 en Linux
- 21. ¿Cómo se carga la imagen del recurso png en Silverlight?
- 22. ¿Cómo limitaría la velocidad de carga del servidor en node.js?
- 23. Cómo simular la carga de archivos del navegador con HttpWebRequest
- 24. ¿Cómo medir la carga actual del servidor MySQL?
- 25. ¿Cuál es la forma correcta de emular la conexión TCP a través del proxy HTTP (s)?
- 26. ¿Cómo evita Google Analytics la suplantación de tráfico?
- 27. jQuery en la carga del elemento dinámico
- 28. ¿Carga diferida del iframe?
- 29. Deshabilitar ACK retrasados de TCP
- 30. ¿Qué causa la "violación del protocolo de canal Tcp esperando el preámbulo" en .NET Remoting?
Con carga equilibrada en un diseño paralelo como el que presenta, tiene algunos problemas, como habrás notado. Tome IRC en su lugar para un ejemplo, que tiene un diseño de árbol (esto ayuda a la sincronización y simplifica la entrega de mensajes a todo el mundo), y la masa de datos que pasa por el árbol no es demasiado, de acuerdo con, por ejemplo, freenode ops, a pesar de sus casi 80k usuarios. –