Балансировка нагрузки

В рамках данной статьи мы рассмотрим следующие моменты:

  • Что такое балансировка нагрузки
  • Подходы при балансировке нагрузки
  • Преимущества балансировки нагрузки

Балансировщик нагрузки (БН)
БН – это крайне важный компонент при построении распределённых систем. Его задача – распределение нагрузки между серверами одного кластера, что помогает:
– уменьшить время ответа на запрос
– повысить надежность и доступность системы в целом (если определённый сервер недоступен, БН перенаправит запросы на другие доступные серверы)

Обычно, БН располагается между клиентом и кластером серверов. Но, также он может располагаться:
– между кластером и базой данных
– между пользователем и веб-сервером
– между веб-сервером и внутренними сервисами (серверы кэширования, внутренние приложения и т.д.)
Распределение запросов между серверами кластера позволяет уменьшить нагрузку на каждый сервер по отдельности (алгоритмы балансировки мы рассмотрим немного позже). Это позволяет нам избежать ситуации при которой выход из строя одного из серверов приведет к отказу всей системы. В общем виде, система, использующая балансировку нагрузки имеет следующий вид:

Для еще большей надежности в системе может быть более одного БН. При наднном подходе, выход из БН из строя не приведет к полному отказу системы:

Подходы при балансировке нагрузки

В первую очередь мы должны понять, каким образом БН выбирает на какой сервер перенаправить текущий запрос.
В первую очередь мы должны быть уверены, что сервер “живой”. Т.е. что данные сервер корректно отвечает на отправленные запросы.
После этого, по определённому алгоритму (список основных мы рассмотрим ниже), БН выбирает сервер из списка рабочих.
Для “формирования” данного списка БН, периодически, пытается установить соединение с серверами кластера. Если сервер перестает отвечать, он удаляется из списка доступных до тех пор, пока не начнет корректно отвечать. Данный процесс часто называется “Heart beat” или “Health check”
Из доступных серверов кластера БН (чаще всего) выбирает куда именно послать запрос по одному из следующих алгоритмов:

  • IP Hash
    Вычисление хэш-кода IP адреса клиента для определения сервера.
  • Round Robin
    Обход всех доступных серверов кластера циклом и поочередное перенаправление запросов. Обычно используется в ситуации, когда все серверы кластера имеют одинаковые вычислительные мощности.
  • Weighted Round Robin
    Каждому серверу кластера присваивается “вес”. Целое число, которое обозначает “мощность” сервера. Сервера с “большим весом” получают больше запросов и раньше, чем “более лёгкие”.
  • Least Connection
    Запросы направляются на серверы с наименьшим количеством активных соединений.
  • Least Bandwidth
    Запросы направляются на сервер с наименьшим траффиком (мегабайты в секунды).
  • Least Response Time
    Запросы направляются на серверы кластера с наименьшим количеством соединений и наименьшим средним временем ответа на запрос.

Преимущества балансировки нагрузки

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