Обновить

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

Серверная оптимизацияСетевые технологииСерверное администрирование

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 обещают описать новую разработку более детально, а также рассказать о процессе перехода на новую систему балансировки нагрузки.
Теги:балансировка нагрузкисетевые технологиимаршрутизацияgithubopen sourceдата-центрыадминистрирование
Хабы: Серверная оптимизация Сетевые технологии Серверное администрирование
Рейтинг +24
Количество просмотров 11,2k Добавить в закладки 63
Комментарии
Комментарии 7

Похожие публикации

Аудит и оптимизация QA-процессов
26 марта 202113 000 ₽Лаборатория Качества
Apache Spark и Scala для дата-инженеров 1.0
14 сентября 202162 000 ₽New Professions Lab
Факультет Java-разработки
10 марта 2021180 000 ₽GeekBrains
MS SQL Server Developer
10 марта 202135 000 ₽OTUS
Game-дизайнер
10 марта 2021128 400 ₽GeekBrains

Лучшие публикации за сутки