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

Server optimizationNetwork technologiesServer Administration

GitHub обслуживает миллиарды HTTP, Git и SSH-соединений ежедневно. Для улучшения производительности в компании начали использовать «голое железо», то есть компьютеры без дополнительных уровней виртуализации. Однако исторически сложилось, что более сложным для оптимизации является сетевая балансировка нагрузки.

Для этого в GitHub использовали вертикальное масштабирование с запуском малого количества больших машин и haproxy. Кроме того, была установлена специфическая аппаратная конфигурация, обеспечивающая отказоустойчивость 10G-линков.

В итоге инженеры GitHub поняли, что понадобится создать собственное решение, которое будет работать для индивидуальных нужд ресурса. Поэтому они разработали балансировщик нагрузки (GitHub Load Balancer – GLB). Теперь GitHub принял решение превратить свою разработку в open source проект.

Инженеры сообщили, что одной реализации горизонтального масштабирования и других стандартных схем балансировки для GitHub недостаточно.
При увеличении нагрузки или посещаемости проекта, рано или поздно вертикальное масштабирование (увеличение ресурсов сервера, таких как память, скорость диска и т.д) упирается в некий предел и не дает ощутимого прироста. В таком случае в ход идет горизонтальное масштабирование — добавление новых серверов c перераспределением нагрузки между ними.

Принимая во внимание узкие места в прежней системе, разработчики остановились на следующих требованиях к новой системе балансировки:

• Работает на стандартном сетевом оборудовании.
• Масштабируется горизонтально.
• Обеспечивает высокое качество доступа, стабильность TCP-соединения и отказоустойчивость.
• Поддерживает блокировку новых соединений.
• Балансировка нагрузки для отдельных сервисов и хостов для множества сервисов.
• Поддерживает итерационную разработку и разворачивается как обычное ПО.
• Позволяет проводить тестирование каждого слоя, а не интеграционные тесты.
• Работает для нескольких точек присутствия и дата-центров.
• Обладает сопротивлением к распространенным DDoS-атакам и инструментарием для борьбы с новым видами атак.

Работа с IP


В обычных случаях один внешний публичный IP-адрес связывается с одной реальной машиной. DNS может быть использован для разделения трафика на несколько IP. Это дает возможность распределить трафик по нескольким серверам. GitHub нужно было решение, которое позволит связать один IP-адрес с несколькими машинами.

Для этого в компании использовали ECMP-маршрутизацию (Equal-Cost Multi-Path routing), которая решает эту задачу и позволяет делать балансировку на уровне соединений.

Разделение L4/L7


Балансировка нагрузки выполняется отдельно на уровнях L4 и L7. На уровне L4 маршрутизатор использует ECMP и передает трафик на L7, который запускает необходимый софт (haproxy, например).

В следующих постах инженеры GitHub обещают описать новую разработку более детально, а также рассказать о процессе перехода на новую систему балансировки нагрузки.
Tags:балансировка нагрузкисетевые технологиимаршрутизацияgithubopen sourceдата-центрыадминистрирование
Hubs: Server optimization Network technologies Server Administration
+24
11.2k 63
Comments 7

Popular right now

MS SQL Server Developer
March 10, 202135,000 ₽OTUS
Apache Spark для дата инженеров
February 16, 202165,000 ₽New Professions Lab
Основы HTML и CSS
February 1, 2021FreeНетология
Продуктовая аналитика
February 1, 202179,065 ₽GeekBrains

Top of the last 24 hours