0

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

Команда 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