Команда GitHub объявила об открытии исходного кода набора инструментов Load Balancer Director (GLB) для балансировки нагрузки на центры обработки данных. Он масштабирует IP-адреса на большое количество физических машин и уменьшает риск сбоя соединения при изменениях на серверах.
GLB Director не заменяет собой такие TCP-службы, как haproxy и nginx, а служит промежуточным слоем между ними. Он позволяет им распределяться на нескольких машинах без собственных IP-адресов.
Масштабирование IP-адреса через ECMP
Чтобы сбалансировать нагрузку, GLB использует стратегию маршрутизации ECMP. Ее польза ощутима в сложных сетях, где две машины соединены несколькими путями. Например, множеством кабелей для увеличения емкости и обеспечения избыточности.
ECMP хеширует каждый пакет и отправляет его по наиболее быстрому из доступных путей. При этом информация передается в правильном порядке, даже если пути имеет разную задержку. Маршруты могут меняться без обрывов соединения, так как они заканчиваются на одном и том же целевом сервере.
Хранение информации о соединениях
Технология ECMP не знает полного контекста полученных пакетов и не способна хранить данные каждого соединения. Чтобы решить эту проблему, GLB использует виртуальные сервера Linux. Они принимают пакеты и контролируют хеширование и хранение информации.
В некоторых случаях такой подход может привести к сбою. Например, из-за задержки сервер может не распознать знакомое подключение, принять его за новое и вызвать ошибку.
Первичные и вторичные сервера
Для каждого входящего соединения выбирается первичный и вторичный сервер, способный их обработать. Когда пакет достигает первичного сервера и оказывается недействительным, он отсылается на вторичный сервер. Система запоминает выбор, поэтому его не нужно совершать для каждого пакета.
При добавлении нового прокси-сервера первичный занимает место исчезнувшего вторичного сервера. Такая схема позволяет завершить действующие потоки и дает пакетам дополнительную возможность дойти до конечного пункта.
Таблица переадресации
Для подбора и добавления первичных и вторичных серверов GLB Director использует бинарную таблицу переадресации. Массив данных с IP-адресами создается на каждом сервере и рассылает входящие данные по основным и вторичным серверам.
Таблица генерируется таким образом, чтобы каждый сервер отображался не более одного раза на каждой строке. Также они должны появляться равное количество раз в каждом столбце.
Состояния прокси-серверов
В GLB Director прокси-сервера могут находиться только трех состояниях: active
, draining
и filling
. Для эффективной работы требуется, чтобы в состоянии отличном от active
всегда находился только один прокси-сервер. Для этого используется алгоритм, который позволяет перемещать прокси и заполнять пустые вторичные слоты. В будущем разработчики планируют не ограничиваться первичным и вторичным серверами и добавить новые компоненты.
Прочие компоненты балансировки
Для снижения нагрузки Github задействовала open source проект DPDK, обрабатывающий пакеты из пользовательского пространства, минуя ядро Linux. Для поиска ошибок в высокоскоростных технологиях используется сквозное тестирование потока. Служба glb-healthcheck
предназначена для проверки GUE-серверов и произвольных HTTP-портов.
Конечным компонентом LGB Director является модуль Netfilter. Он проверяет соответствие TCP/IP пакетов с TCP-стеком ядра Linux. Если нет, он направляет их на вторичный сервер.
В июне 2018 года Google раскрыла подробности о протоколе QUIC для снижения нагрузки на сети при передаче данных через HTTP. Технология предназначена для быстрого переключения между Wi-Fi и сотовой сетью в мобильных устройствах.
Источник: GitHub Engineering