Capa 4 vs Capa 7 Equilibrio de carga

21

Estoy tratando de decidir entre usar una solución de equilibrio de carga de capa 4 para mi centro de datos o una solución de capa 7. Desafortunadamente (para mi cordura, es decir), mi caso de uso es lo suficientemente simple como para que ambas soluciones funcionen bien, evitando la mayoría de las debilidades y realmente no utilizando las fortalezas del otro. Cualquiera sea la solución que terminemos usando, debe tener una alta disponibilidad y un alto rendimiento. Pero solo estamos planeando usarlo para equilibrar la carga en un clúster de servidores web, ninguno de los cuales tiene requisitos para la administración de sesión "permanente" (cookie o IP), reglas de reescritura complejas o, para el caso, reglas de reescritura en todos.

Los equilibradores de carga se conectarán a dos conmutadores, ambos con una conexión independiente hasta la capa de agregación del centro de datos y se fusionarán utilizando Rapid Spanning Tree y cualquier protocolo patentado que los conmutadores utilicen para la virtualización. Los equilibradores de carga también se vincularán entre sí a través de un cable cruzado. Todos los servidores del clúster están conectados a ambos conmutadores. Todo lo que los equilibradores de carga tienen que hacer es dirigir el tráfico sobre ellos.

Como es solo HTTP, puedo usar una solución de equilibrio de carga de capa 7 como HAProxy o nginx. Pero también podría usar el proyecto LVS con ldirectord o keepalived o lo que sea.

He tratado de romper los pros y los contras tal como los veo, pero simplemente termina en un lavado. ¿Que recomendaria y porque? ¿Me estoy perdiendo de algo?

Amanuense
fuente

Respuestas:

17

Un beneficio útil de "L7" como haproxy es poder usar cookies para mantener el mismo navegador golpeando el mismo servidor de fondo. Esto hace que la depuración de clientes sea mucho más fácil.

El equilibrio de L4 puede hacer rebotar a un solo usuario en varios servidores de fondo. (que en ciertos casos puede ser ventajoso, pero en un sentido de depuración / perfil, usar "L7" es mucho más valioso).

EDITAR: También hay una ventaja potencial de velocidad al usar el equilibrio HTTP. Con Keep-Alives, los clientes pueden establecer una única sesión TCP a su equilibrador y luego enviar muchos HIT sin necesidad de restablecer nuevas sesiones TCP (protocolo de enlace de 3 vías). Del mismo modo, muchos LB mantienen sesiones de mantenimiento de vida en los sistemas de back-end eliminando la necesidad de hacer el mismo apretón de manos en el back-end.

Es posible que el equilibrio de carga TCP estricto no logre ambas cosas tan fácilmente.

/ * FWIW: No diría "L7" o "L4", diría HTTP o TCP. Pero soy un fanático de evitar usar el OSI para describir cosas con las que no coincide bien. * /

Creo que fundamentalmente si no está seguro de qué implementar, elija lo que le parezca simple y natural. Pruébelo (¿usa apache bench?) Y asegúrese de que funcione para sus necesidades. Para mí, HTTP LB es más natural.

Joel K
fuente
La adherencia, basada en cookies o IP, es sin duda una ventaja de la conmutación L7. Pero no es uno que nuestra aplicación pueda utilizar particularmente.
Scrivener
¿No sería una desventaja del equilibrio de carga de nivel HTTP que tendrías que tener un equilibrador de carga de nivel TCP frente a los equilibradores HTTP para habilitar la conmutación por error entre los dos?
Scrivener
@Scrivener: no deberías, no. Creo que DNS DNS puede encargarse de eso, a menos que esté malinterpretando su pregunta.
mfinni
@mfinni: El DNS geográfico global podrá apuntar a una IP por centro de datos. Necesito algo para responder a esa IP.
Scrivener
Veo. Bueno, depende de las capacidades de su (s) dispositivo (s). Probablemente pueda encontrar un dispositivo con capacidad L7 que pueda funcionar en pares con un solo clúster VIP que no requiera un equilibrador de carga TCP / IP de hardware. Si IIS y MS Windows NLB pueden hacerlo, imagino que la mayoría de los otros productos comerciales pueden hacerlo.
mfinni
4

Dada la falta de ventaja para usted de hacer el equilibrio L7, me conformaría con el equilibrio L4. Soy un gran fanático de mantenerlo lo más simple posible, sin sacrificar demasiado.

L7 requiere que los equilibradores inspeccionen los encabezados http en los paquetes que los atraviesan para un enrutamiento apropiado, agregando una sobrecarga adicional y un aumento marginal en la latencia para el usuario final. Me parece un gasto inútil si no ganas nada con eso.

Twirrim
fuente
0

Algunos proveedores de DNS tienen una funcionalidad simple de conmutación por error. Usted ha mencionado cuáles son sus requisitos y no cuáles son, pero si todo lo que necesita es un round robin con conmutación por error si algo falla, puede usar, por ejemplo, la conmutación por error de zoneedit.com . Dependiendo de sus necesidades de alta disponibilidad, eso puede ser lo suficientemente bueno y puede omitir un nivel completo en su arquitectura.

Ernest Mueller
fuente
Desearía que fuera así de simple: necesitamos algo más como round-robin con conmutación por error, más separación geográfica. Sin embargo, todo eso no está en la pregunta, porque lo está haciendo una empresa externa.
Scrivener
¿Qué quiere decir? Supongo que me refiero a que DNS está siendo realizado por una empresa externa también, y algunos de ellos admiten tanto el equilibrio de carga geográfica como la conmutación por error como un servicio DNS, o quiere decir que hay un tercero adicional entre usted y el proveedor de DNS, o que simplemente no tienes voz directa sobre el DNS?
Ernest Mueller
El primero: ya estamos haciendo DNS con una compañía externa que está haciendo conmutación por error y equilibrio de carga geográfica a los diferentes centros de datos. Solo necesito equilibrar la carga dentro del centro de datos.
Scrivener
Puede usar el mismo round robin para servidor por servidor en el front-end, ¿verdad? El DNS para balanceo de carga round robin a menudo se usa para un solo centro de datos; Además, las geolocalizaciones múltiples son un gran requisito para los chicos.
Ernest Mueller