Говоря о балансировке нагрузки

задняя часть алгоритм Nginx балансировки нагрузки

Какая к черту балансировка нагрузки? Буквально у него должно быть два значения: нагрузка и балансировка. Для балансировки нагрузки системы он также имеет два значения, в которых нагрузка системы относится к максимальному трафику доступа, который может нести система, а балансировка системы относится к требованиям внешних запросов.распределять равномерноВ то же время для серверной машины один и тот же пользователь должен быть назначен на одну и ту же машину, насколько это возможно. Система имеет следующие преимущества после балансировки нагрузки:

1,Избегайте траты ресурсов. Если мы выберем плохой алгоритм балансировки, это приведет к пустой трате внутренних ресурсов. Например, если вы выберете согласованный алгоритм хеширования, вы сможете эффективно использовать емкость кэша. Если используется случайный выбор, эффект кеша может быть значительно снижен.

2,Избегайте недоступности сервиса. Когда мы не учитываем пропускную способность системы, можно напрямую перегрузить определенную машину.Например, когда загрузка ЦП машины достигает 80%, если есть большое количество запросов, машина сразу выйдет из строя , или даже привести к лавине (Когда одна машина выйдет из строя, соответствующий запрос будет распространен на другие машины, тогда другие машины тоже выйдут из строя, так что все машины выйдут из строя).

теоретические основы

Чтобы достичь балансировки нагрузки, система должна нуждаться в поддержке некоторого алгоритма. Давайте рассмотрим соответствующий алгоритм.

1. Алгоритм загрузки

Поскольку мы хотим решить несущую способность внутренней системы, у нас есть много способов, наиболее часто используемые из них следующие:

статическая конфигурация

Этот метод является наиболее эффективным и стабильным для малых и средних систем. Из-за конфигурации производительности серверной машины, какие службы развернуты на ней и какую пропускную способность она может иметь, мы знаем лучше всего. Например, мы часто видим конфигурацию nginx:

image

Динамическая регулировка

Когда происходит сбой машины и запрос не может быть обработан из-за проблем с производительностью, если новый запрос также выделен узлу в это время, это может привести к выходу узла из строя. Поэтому очень важно динамически регулировать вес узла в соответствии с фактической нагрузкой узла. Конечно, чтобы получить реальную нагрузку узла и как определить нагрузку, собирается ли нагрузка вовремя или нет, необходимо рассмотреть вопросы.

Динамическая корректировка сначала вычисляет время ответа на запрос всех узлов.Для узла с более быстрым ответом мы можем выделить ему больше запросов, а затем увеличить его количество запросов.Когда его ответ становится медленным, постепенно уменьшайте количество запросов.Медленно Потихоньку находим оптимальный баланс для этой ноды, т.е. сколько запросов выделить на нее. Таким же методом находим точку баланса всех узлов.

Преимущество этого подхода в том, что он может динамически балансировать вычислительную мощность резервных серверов. Однако у всего есть две стороны. Этот сценарий, если он возникнет в экстремальных условиях, может вызвать сход лавины. Когда машина испытывает кратковременное дрожание сети, ее реакция может стать медленнее, и в это время интерфейсная служба будет распределять свои запросы на другие машины. Если вы выделяете много, это может привести к медленному отклику некоторых машин. Запросы от этих машин затем распределяются на другие машины. Таким образом, это вызовет лавину.

2. Алгоритм выравнивания

Алгоритм балансировки в основном решает, как отправить запрос на серверную службу. Часто используются следующие три алгоритма: случайный, циклический и хеширование.

случайный алгоритм

Случайный алгоритм заключается в распределении всех запросов к каждому узлу с помощью случайной функции.Этот метод относительно прост и может равномерно распределять запросы к каждому узлу, поэтому часто используются случайные алгоритмы.

алгоритм опроса

Алгоритм опроса заключается в том, чтобы предоставлять услуги всем узлам с одинаковой вероятностью, но он не учитывает разницу в производительности между каждым узлом.При одинаковом количестве запросов узлы с хорошей производительностью могут легко завершиться, в то время как узлы с низкой производительностью могут завершить сравнение трудоемкое. Поэтому мы предлагаем алгоритм взвешенного циклического перебора для присвоения разных весов узлам с разной производительностью.

хеш-алгоритм

Обычно в качестве ключа используется id или ip пользователя, вычисляется соответствующее значение хеш-функции, а затем число узлов вычисляется по модулю, то есть режим хеширования (ключа) n, где n — количество узлов, а узел на который попадает запрос пользователя. Этот метод может заставить один и тот же запрос попасть в один и тот же узел, но когда количество узлов меняется динамически, этот метод не подходит. На этом этапе следует использовать согласованный алгоритм хеширования. Алгоритм последовательного хеширования состоит в том, чтобы разделить каждый сервер на v виртуальных узлов, а затем случайным образом назначить все виртуальные узлы (n*v) последовательному кольцу хеширования, чтобы все пользователи по часовой стрелке от их позиций в кольце. узел, которому он принадлежит. Когда этот узел неисправен, возьмите следующий по часовой стрелке в качестве узла замены. Более подробное описание см.Согласованный хэшЭта статья не будет здесь расширяться.

Выполнение

В настоящее время системы балансировки нагрузки включают Nginx, LVS и F5.Всегда грустно, что Nginx — это балансировка нагрузки на программном уровне 7, LVS — балансировка нагрузки на уровне ядра 4, а F5 — аппаратная балансировка нагрузки на уровне 4. .

Разница между программным и аппаратным обеспечением заключается в производительности, аппаратное обеспечение намного выше, чем программное, производительность Nginx составляет 10 000. Nginx, установленный на обычном Linux-сервере, может достигать 50 000 одновременных запросов в секунду, а производительность F5 может достигать миллионов. От 2 миллионов в секунду до 8 миллионов в секунду, но цена очень дорогая.

Разница между уровнем 4 и уровнем 7 заключается в протоколе и гибкости: Nginx — это уровень 7, который поддерживает такие протоколы, как HTTP, а LVS и F5 — это протоколы уровня 4, которые не зависят от протокола и могут использоваться практически всеми приложениями.

image

image

Добро пожаловать в общедоступную учетную запись WeChat: Mu Keda, все статьи будут синхронизированы в общедоступной учетной записи.