GitHub рассказала о методах балансировки нагрузки на сети GLB Director

GitHub балансировки

Команда GitHub объявила об открытии исходного кода набора инструментов Load Balancer Director (GLB) для балансировки нагрузки на центры обработки данных. Он масштабирует IP-адреса на большое количество физических машин и уменьшает риск сбоя соединения при изменениях на серверах.

GLB Director не заменяет собой такие TCP-службы, как haproxy и nginx, а служит промежуточным слоем между ними. Он позволяет им распределяться на нескольких машинах без собственных IP-адресов.

Масштабирование IP-адреса через ECMP

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

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

ECMP

Хранение информации о соединениях

Технология ECMP не знает полного контекста полученных пакетов и не способна хранить данные каждого соединения. Чтобы решить эту проблему, GLB использует виртуальные сервера Linux. Они принимают пакеты и контролируют хеширование и хранение информации.

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

Linux Virtual Server

Первичные и вторичные сервера

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

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

Первичные и вторичные сервера

Таблица переадресации

Для подбора и добавления первичных и вторичных серверов GLB Director использует бинарную таблицу переадресации. Массив данных с IP-адресами создается на каждом сервере и рассылает входящие данные по основным и вторичным серверам.

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

Таблица переадресации GLB Director

Состояния прокси-серверов

В GLB Director прокси-сервера могут находиться только трех состояниях: active, draining и filling. Для эффективной работы требуется, чтобы в состоянии отличном от active всегда находился только один прокси-сервер. Для этого используется алгоритм, который позволяет перемещать прокси и заполнять пустые вторичные слоты. В будущем разработчики планируют не ограничиваться первичным и вторичным серверами и добавить новые компоненты.

Состояния прокси-серверов GLB Director

Прочие компоненты балансировки

Для снижения нагрузки Github задействовала open source проект DPDK, обрабатывающий пакеты из пользовательского пространства, минуя ядро Linux. Для поиска ошибок в высокоскоростных технологиях используется сквозное тестирование потока. Служба glb-healthcheck предназначена для проверки GUE-серверов и произвольных HTTP-портов.

Конечным компонентом LGB Director является модуль Netfilter. Он проверяет соответствие TCP/IP пакетов с TCP-стеком ядра Linux. Если нет, он направляет их на вторичный сервер.

В июне 2018 года Google раскрыла подробности о протоколе QUIC для снижения нагрузки на сети при передаче данных через HTTP. Технология предназначена для быстрого переключения между Wi-Fi и сотовой сетью в мобильных устройствах.

Источник: GitHub Engineering