Según tengo entendido, simplemente hacen round robin, distribuyendo uniformemente las conexiones a los servidores detrás de ellos.
Más o menos, pero no del todo, creo que, desafortunadamente, la documentación de enrutamiento de Amazon ELB no es inexistente, por lo que es necesario reunir algunas piezas para llegar a una conclusión. Este es el único fragmento de la Guía para desarrolladores de Elastic Load Balancing que conozco, consulte la sección Sesiones fijas en Descripción general de Elastic Load Balancing :
De forma predeterminada, un equilibrador de carga enruta cada solicitud de forma independiente a la instancia de la aplicación con la carga más pequeña . Sin embargo, puede usar la función de sesión fija (también conocida como afinidad de sesión), que permite que el equilibrador de carga vincule la sesión de un usuario a una instancia de aplicación específica. Esto garantiza que todas las solicitudes provenientes del usuario durante la sesión se enviarán a la misma instancia de la aplicación. [énfasis mío]
¿Qué significa exactamente la carga más pequeña ? Una vez más, la única explicación que conozco es la respuesta un tanto vaga del equipo de AWS de 2009 a ELB Strategy :
ELB realiza un seguimiento aproximado de cuántas solicitudes (o conexiones en el caso de TCP) están pendientes en cada instancia. No supervisa el uso de recursos (como CPU o memoria) en cada instancia. Actualmente, ELB realizará un round-robin entre aquellas instancias que cree que tiene la menor cantidad de solicitudes pendientes. [énfasis mío]
Esto tiene mucho sentido con respecto a la arquitectura de su sistema y los casos de uso abordados, pero obviamente no proporciona la transparencia y / o el control del enrutamiento que puede desear o necesitar para escenarios avanzados de alta disponibilidad.
Tenga en cuenta que, según la interpretación, esto puede o no ser contradicho un poco por una respuesta más reciente del equipo de AWS a Elastic Load Balancing - Políticas de distribución de carga :
Round-robin entra en juego, pero las sesiones del cliente no siempre respetan los cachés TTL o DNS, por lo que puede obtener resultados asimétricos y distribuciones desiguales de las solicitudes. El ELB no tiene en cuenta las instancias de tráfico / solicitudes recibidas hasta la fecha en las decisiones de enrutamiento de tráfico. [énfasis mío]
Controles de salud
Por supuesto, lo anterior se modifica con las comprobaciones de estado debidamente documentadas, transparentes y controlables , lo que le brinda cierta influencia para eliminar (potencialmente temporalmente) las instancias en el enrutamiento en primer lugar, como se resume en la respuesta del equipo de AWS antes mencionada a ELB Estrategia también:
El equilibrador de carga supervisa el estado de sus instancias registradas con su equilibrador de carga. Cuando el equilibrador de carga detecta un problema con una instancia, deja de distribuirle tráfico. Cuando la instancia vuelve a estar en buen estado, el equilibrador de carga se reinicia distribuyéndole tráfico. Este proceso permite que su aplicación reaccione automáticamente a instancias fallidas sin tener que involucrarse más allá de configurar el chequeo de salud.
Conclusión
Aunque ciertamente inusual, no veo por qué no debería ELB trabajo con un grupo de diferentes tipos de instancia de Amazon EC2 , así - no he intentado esto mismo aunque y recomendaría tanto, un seguimiento de su equilibrador de carga Utilizar CloudWatch así como el seguimiento sus instancias individuales de EC2 y correlacionan los resultados para obtener la información y la confianza respectivas en dicha configuración eventualmente.
Basado en las declaraciones hechas hasta ahora, el algoritmo de distribución es extremadamente simple.
El front-end de ELB es típicamente más de una instancia de ELB, y la distribución es round-robin.
El back-end (sus instancias) algo dice ser:
Esto inferiría que si una instancia más grande tiene solicitudes menos pendientes, se enrutará más tráfico hacia ellas. No hay forma de garantizar esto.
fuente