- PVSM.RU - https://www.pvsm.ru -

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

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

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

GitHub открыли код своего балансировщика нагрузки — как работает их решение - 1 [2]
/ Flickr / theilr [3] / CC [4]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

GitHub открыли код своего балансировщика нагрузки — как работает их решение - 3
/ Flickr / Da Sal [19] / CC [20]

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

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

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

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


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

P.P.S. Другие материалы из нашего блога на Хабре:

Автор: it_man

Источник [30]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/github/289144

Ссылки в тексте:

[1] выложили: https://github.com/github/glb-director

[2] Image: https://habr.com/company/it-grad/blog/420093/

[3] theilr: https://www.flickr.com/photos/theilr/8065855132

[4] CC: https://creativecommons.org/licenses/by-sa/2.0/

[5] на базе bare metal: https://githubengineering.com/githubs-metal-cloud/

[6] haproxy: http://www.haproxy.org/

[7] BGP: https://ru.wikipedia.org/wiki/Border_Gateway_Protocol

[8] ECMP: https://en.wikipedia.org/wiki/Equal-cost_multi-path_routing

[9] LVS: https://en.wikipedia.org/wiki/Linux_Virtual_Server

[10] использует: https://github.com/github/glb-director/blob/master/docs/development/glb-hashing.md

[11] HRW: https://en.wikipedia.org/wiki/Rendezvous_hashing

[12] отслеживает: https://githubengineering.com/glb-director-open-source-load-balancer/

[13] GUE: https://tools.ietf.org/html/draft-ietf-nvo3-gue-05

[14] Netfilter: https://ru.wikipedia.org/wiki/Netfilter

[15] iptables: https://en.wikipedia.org/wiki/Iptables

[16] quick start руководстве, подготовленном разработчиками: https://github.com/github/glb-director/blob/master/docs/setup/packages-quick-start.md

[17] поделилась: https://www.datacenterknowledge.com/facebook/facebook-open-sources-katran-load-balancer-details-network-provisioning-tool

[18] использует: https://code.fb.com/open-source/open-sourcing-katran-a-scalable-network-load-balancer/

[19] Da Sal: https://www.flickr.com/photos/112931986@N07/11646644866/

[20] CC: https://creativecommons.org/licenses/by/2.0/

[21] «залили»: https://github.com/facebookincubator/katran

[22] имеет ряд: https://news.ycombinator.com/item?id=17718367

[23] добавил: https://www.theregister.co.uk/2018/08/09/github_load_balancing_director/

[24] DPDK: https://www.dpdk.org/

[25] Как разместить 100% инфраструктуры в облаке IaaS-провайдера и не пожалеть об этом: https://iaas-blog.it-grad.ru/blog/onlajn-uslugi-dlya-b2cb2b-iz-oblaka/

[26] Тестирование дисковой системы в облаке: основы: https://iaas-blog.it-grad.ru/proizvoditelnost/testirovanie-diskovoj-sistemy-v-oblake/

[27] Балансировка нагрузки в облаке IaaS: Зачем нужен DRS: https://iaas-blog.it-grad.ru/funkcionalnost/balansirovka-nagruzki-v-oblake-iaas/

[28] WireGuard «придет» в ядро Linux — почему?: https://habr.com/company/it-grad/blog/419769/

[29] Как дела в облаке, и что движет IaaS вперед: обсуждаем технологические тренды: https://habr.com/company/it-grad/blog/419473/

[30] Источник: https://habr.com/post/420093/?utm_campaign=420093