- PVSM.RU - https://www.pvsm.ru -
Разработчики из GitHub на прошлой неделе выложили [1] в открытый доступ исходники своего балансировщика нагрузки — GLB Director. Команда трудилась над этим проектом несколько лет.
Чем примечательно их решение, как оно устроено, и кто еще передавал системы распределения нагрузки в open source, рассказываем далее.
[2]
/ Flickr / theilr [3] / CC [4]
В GitHub используют облачную инфраструктуру на базе bare metal [5] для повышения производительности. В этом случае программное обеспечение работает без дополнительных уровней виртуализации на «голом железе».
Ранее для балансировки нагрузки компания использовала haproxy [6] с особой аппаратной конфигурацией, которая обеспечивала отказоустойчивость 10-гигабитных Ethernet-соединений. Однако такой подход плохо масштабировался (подразумевалось вертикальное масштабирование), и в GitHub решили написать свой балансировщик нагрузки, который еще мог бы работать на недорогом аппаратном обеспечении.
Балансировщик 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 надеются [12], что их балансировщик пригодится всем компаниям, которые имеют свои дата-центры.
Как установить GLB и начать с ним работать можно посмотреть в quick start руководстве, подготовленном разработчиками [16].
В мае компания Facebook тоже поделилась [17] исходным кодом библиотеки своего балансировщика нагрузки Katran. ИТ-гигант использует [18] его для эффективного распределения нагрузки между backend-серверами.
Предыдущий балансировщик компании — L4LB — не справлялся с задачей, так как требовал для работы выделенные сервера, что увеличивало нагрузку на сеть. Чтобы решить эту проблему, в компании и разработали Katran. Он запускается с помощью фреймворка eXpress Data Path и виртуальной машины eBPF. ВМ расширяет общий функционал, запуская программы в отдельных точках Linux-ядра.

/ 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.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
Нажмите здесь для печати.