Насколько я понимаю, они просто выполняют циклический перебор, равномерно распределяя соединения с серверами позади них.
Вроде как, но не совсем, я думаю - к сожалению, документация по маршрутизации Amazon ELB не существует, поэтому нужно собрать несколько частей, чтобы сделать вывод. Вот единственный фрагмент из Руководства разработчика по упругой балансировке нагрузки, о котором я знаю, see section Липкие сессии в обзоре балансировки упругой нагрузки :
По умолчанию балансировщик нагрузки направляет каждый запрос независимо от экземпляра приложения с наименьшей нагрузкой . Однако вы можете использовать функцию закрепления сеанса (также называемую привязкой сеанса), которая позволяет балансировщику нагрузки привязывать сеанс пользователя к конкретному экземпляру приложения. Это гарантирует, что все запросы, поступающие от пользователя во время сеанса, будут отправлены одному и тому же экземпляру приложения. [Акцент мой]
Теперь, что именно означает наименьшая нагрузка ? Опять же, единственное объяснение, которое мне известно, - это несколько расплывчатый ответ команды AWS 2009 года на Стратегию ELB :
ELB слабо отслеживает количество запросов (или соединений в случае TCP) в каждом экземпляре. Он не отслеживает использование ресурсов (таких как процессор или память) в каждом экземпляре. В настоящее время ELB будет проходить круговую проверку среди тех случаев, которые, по его мнению, имеют наименьшее количество невыполненных запросов. [Акцент мой]
Это имеет большой смысл в отношении их системной архитектуры и адресованных вариантов использования, но, очевидно, не обеспечивает прозрачность и / или контроль маршрутизации, который вам может понадобиться или который требуется для расширенных сценариев высокой доступности.
Обратите внимание, что, в зависимости от интерпретации, это может или не может немного противоречить недавним ответом команды AWS на Elastic Load Balancing - Политики распределения нагрузки :
Входит в игру циклический перебор, но клиентские сессии не всегда учитывают кэши TTL или DNS, поэтому вы можете получить искаженные результаты и неравномерное распределение запросов. ELB не принимает во внимание то, что экземпляры трафика / запросов получили на сегодняшний день при принятии решений о маршрутизации трафика. [Акцент мой]
Проверка здоровья
Конечно, вышеперечисленное дополняется должным образом документированными, прозрачными и контролируемыми проверками работоспособности , что дает вам некоторые рычаги для (возможно, временного) удаления экземпляров из-за того, что они в первую очередь включены в маршрутизацию, как показано в вышеупомянутом ответе команды AWS на ELB Стратегия также:
Балансировщик нагрузки контролирует состояние ваших экземпляров, зарегистрированных с помощью вашего балансировщика нагрузки. Когда балансировщик нагрузки обнаруживает проблему с экземпляром, он прекращает распределять по нему трафик. Когда экземпляр снова становится работоспособным, балансировщик нагрузки перезапускает распределение трафика на него. Этот процесс позволяет вашему приложению автоматически реагировать на сбойные экземпляры без необходимости участия помимо настройки проверки работоспособности.
Заключение
Хотя это, конечно, необычно, я не понимаю, почему ELB не должен работать с пулом разных типов экземпляров Amazon EC2 - я сам не пробовал и рекомендовал бы и то, и другое: мониторинг балансировщика нагрузки с помощью CloudWatch, а также мониторинг ваши отдельные экземпляры EC2 и сопоставьте результаты, чтобы в конечном итоге получить соответствующее понимание и уверенность в такой настройке.
Основываясь на заявлениях, сделанных до сих пор, алгоритм распределения чрезвычайно прост.
Внешний интерфейс ELB, как правило, представляет собой более одного экземпляра ELB, а распределение - циклическое.
Алгоритм (ваши экземпляры) утверждает, что он:
Это будет означать, что если у более крупного экземпляра меньше ожидающих запросов, то на них будет направляться больше трафика. Там нет никакого способа, чтобы гарантировать это.
источник