¿Una única conexión TCP que pasa por un equilibrador de carga es implícitamente "fija"?
Tengo un cliente que usa TCP/TLS para comunicarse con un grupo de servidores back-end con equilibrio de carga.
El protocolo es un protocolo de transmisión, sin noción de solicitudes y respuestas.
Una vez que se establece una conexión con uno de los servidores back-end, digamos S1
, ¿puedo asumir que todos los paquetes TCP/TLS posteriores del cliente continuarán fluyendo S1
independientemente del tipo de balanceador de carga elegido, por ejemplo, balanceadores de carga de aplicación y clásico en el servidor? ¿El mundo EC2 y quizás incluso el equilibrador de carga de red?
Está bien si después de la desconexión, una nueva conexión de este cliente obtiene equilibrio de carga hacia otro servidor back-end S2
.
Nota: Básicamente, no estoy seguro de si todos los balanceadores de carga hacen DNAT, en cuyo caso, S1
una vez elegido por el balanceador de carga, permanecerá para el cliente durante toda la vida útil de la conexión.
Inicialmente se establece una conexión TCP (apretón de enlace TCP) con un único servidor y este punto final de conexión tiene la información sobre el estado actual de la conexión.
Si un equilibrador de carga enviara diferentes paquetes de la misma conexión a diferentes servidores ascendentes, entonces solo una parte de los paquetes llegaría al ascendente con el estado de conexión TCP. Desde la perspectiva de este flujo ascendente, esto parecería una conexión con pérdida de paquetes y, por lo tanto, el servidor no podría continuar con el manejo de las cargas útiles. De manera similar, el otro flujo ascendente no tendría el estado de conexión y, por lo tanto, descartaría/rechazaría estos paquetes inesperados.
En otras palabras, simplemente no funcionaría. Pero dado que los balanceadores de carga realmente funcionan, puede contar con que distribuirán adecuadamente los paquetes, es decir, mantendrán el estado de las conexiones y tendrán un solo flujo ascendente para una conexión.