nlb carga balanceo tcp load-balancing

balanceo - ¿Cómo se carga el tráfico TCP de saldo?



balanceo de carga en windows 10 (1)

Estoy tratando de determinar cómo cargar el tráfico TCP de equilibrio. 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 cargar el tráfico TCP de equilibrio cuando los servidores intentan escribir datos en otros clientes. He adjuntado una imagen del flujo de trabajo para un servidor de chat TCP simple donde queremos equilibrar el tráfico entre N servidores de aplicaciones. ¿Hay algún equilibrador de carga por ahí que pueda hacer lo que estoy tratando de hacer o necesito investigar un tema diferente? Gracias.


En primer lugar, su diagrama asume que el equilibrador de carga está actuando como un proxy (TCP), lo que no siempre es así. 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 backend y el cliente es directa. Entonces, en este caso, es esencialmente el protocolo de enlace TCP que se distribuye entre los servidores backend. Vea lo siguiente para más información:

Obviamente, los proxys TCP existen (siendo HAProxy uno), en cuyo caso el proxy administra ambos lados del conector, por lo que su aplicación debería poder identificar al cliente por el IP / Puerto entrante (que sería del proxy en lugar del cliente). El proxy se encargará de devolver los mensajes al cliente.

De cualquier manera, todo se reduce al diseño de la aplicación, ya que me imagino que la parte difícil es tener un almacén de sesión común (una base de datos de algún tipo, o un almacén de valores clave como Redis), de modo que cuando el servidor de la aplicación dice "Necesito para enviar un mensaje a Frank "puede determinar a qué servidor backend está conectado Frank (desde DB), y enviar una señal a ese servidor para que le envíe el mensaje. Reduce el problema de las conexiones (desde el mismo cliente) que se mueven entre diferentes servidores backend al tener conexiones persistentes (todos los equilibradores de carga pueden hacer esto), o al usar algo intrínsecamente persistente como un socket web.

Esta es probablemente una gran simplificación ya que no tengo experiencia con el software de chat. Obviamente, los servidores de DB en sí pueden distribuirse entre varias máquinas, para tolerancia a fallos y equilibrio de carga.