Хабрахабр

GitHub открыли код своего балансировщика нагрузки — как работает их решение

Разработчики из GitHub на прошлой неделе выложили в открытый доступ исходники своего балансировщика нагрузки — GLB Director. Команда трудилась над этим проектом несколько лет.

Чем примечательно их решение, как оно устроено, и кто еще передавал системы распределения нагрузки в open source, рассказываем далее.


/ Flickr / theilr / CC

Зачем GitHub свой балансировщик

В GitHub используют облачную инфраструктуру на базе bare metal для повышения производительности. В этом случае программное обеспечение работает без дополнительных уровней виртуализации на «голом железе».

Однако такой подход плохо масштабировался (подразумевалось вертикальное масштабирование), и в GitHub решили написать свой балансировщик нагрузки, который еще мог бы работать на недорогом аппаратном обеспечении. Ранее для балансировки нагрузки компания использовала haproxy с особой аппаратной конфигурацией, которая обеспечивала отказоустойчивость 10-гигабитных Ethernet-соединений.

Что умеет и как работает GLB Director

Балансировщик GitHub обеспечивает бесперебойность TCP-соединений, управляет нагрузкой отдельных сервисов, устойчив к DDoS-атакам и способен масштабироваться горизонтально. Он «заточен» под работу в дата-центрах, где большое количество серверов анонсируют один IP-адрес по BGP, а роутеры используют стратегию ECMP.

В отличие от таких решений, как LVS, GLB Director не направляет все пакеты на узел маршрутизации (director node), чтобы потом перераспределить их между другими узлами. Балансировка нагрузки выполняется на уровнях L4 и L7. В случае если один из них выходит из строя, то пакет направляется второму. Вместо этого, он использует вариацию хеширования рандеву (rendezvous hashing, HRW) для создания статической таблицы, чтобы выбрать для каждого входящего подключения пару прокси-серверов (первичный и вторичный). Система запоминает этот выбор, и его не нужно совершать для каждого пакета.

glb-healthcheck отслеживает правильность работы каждого GUE-туннеля (Generic UDP Encapsulation) и произвольного HTTP-порта backend-серверов. За «здоровьем» серверов следит решение glb-healthcheck, которое переключает первичные и вторичные системы в случае обнаружения неполадок.

Netfilter решает простую задачу: определяет, соответствует ли внутренний TCP/IP-пакет в каждом GUE-пакете требованиям TCP-стека ядра Linux. GLB также использует систему Netfilter и утилиту iptables. Если нет, то он перенаправляет пакет на вторичный прокси-сервер, а не декапсулирует его локально.

Схема взаимодействия компонентов выглядит так:

В GitHub надеются, что их балансировщик пригодится всем компаниям, которые имеют свои дата-центры.

Как установить GLB и начать с ним работать можно посмотреть в quick start руководстве, подготовленном разработчиками.

Похожие разработки

В мае компания Facebook тоже поделилась исходным кодом библиотеки своего балансировщика нагрузки Katran. ИТ-гигант использует его для эффективного распределения нагрузки между backend-серверами.

Чтобы решить эту проблему, в компании и разработали Katran. Предыдущий балансировщик компании — L4LB — не справлялся с задачей, так как требовал для работы выделенные сервера, что увеличивало нагрузку на сеть. ВМ расширяет общий функционал, запуская программы в отдельных точках Linux-ядра. Он запускается с помощью фреймворка eXpress Data Path и виртуальной машины eBPF.


/ Flickr / Da Sal / CC

Исходники разработчики «залили» на GitHub. Обновленный балансировщик эффективнее распределяет нагрузку на инфраструктуру и повышает скорость обработки пакетов.

Например, в системе Facebook используются XDP- и IPIP-туннели, которые работают с ядром Linux. Система Katran имеет ряд отличий от решения, предложенного в GitHub. GLB, напротив, прибегает к помощи DPDK, чтобы обрабатывать пакеты из пользовательского пространства.

Это гарантирует высокую производительность (10-гигабитное соединение) даже в сложных рабочих средах и обеспечивает определённую защиту от DDoS-атак. Тео Жульен (Theo Julienne), разработчик GitHub, добавил, что DPDK дает оперировать большими объемами входящего трафика.

Передача таких мощных инструментов, как GLB и Katran в open source откроет новые возможности для других ИТ-компаний и поспособствует более быстрому развитию ИТ-экосистемы в мире.

P.S. Пара дополнительных статей из Первого блога о корпоративном IaaS:
P.P.S. Другие материалы из нашего блога на Хабре:

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть