Сайт, живи! По следам семинара о балансировке нагрузки веб-серверов

Те, кто читает наши новости ВКонтакте, наверняка заметили, что у нас постоянно проходят семинары. Сотрудники «Энтерры» и гости собираются в офисе и обсуждают разработку и несущиеся вскачь IT-технологии.

Один из недавних семинаров был посвящен балансировке нагрузки веб-серверов.

Мы подробно и продуктивно поговорили об основных методах и алгоритмах, а также о программном обеспечении, которое поможет выровнять нагрузку на сервер и не позволит ему в самый неподходящий момент накрыться медным тазом.

Вот основные тезисы семинара.

Проблема

Слабенькие, недостаточно производительные сервера обычно пытаются «лечить» нерадикально, осторожно, например, кэшированием или постепенно наращивая мощность сервера. Но момент, когда выгода не соотносится с усилиями, затраченными на все эти манипуляции, неизбежен.

Решение

  • Балансировка – это выход.
  • Каждый сервер имеет точную копию файлов сайта.
  • При балансировке если отвалится один сервак, сайты и приложения продолжат работать как ни в чем не бывало.
  • Главная составляющая балансировки – Load Balancer, устройство, которое распределяет нагрузку по нескольким серверам.
  • Если Load Balancer даст сбой, то это страшно.

Алгоритмы

  • Алгоритмы балансировки предназначены для разных целей, поэтому важно выбрать именно тот, который будет соответствовать вашим потребностям.
  • Наиболее дешевый алгоритм балансировки – Round Robin. В нем запросы идут по серверам по кругу. Но он же и самый ограниченный. Простейшая реализация Round Robin – Round Robin DNS, в которой балансером выступает DNS-сервер. Такой сервер отвечает на запросы с нескольких IP-адресов и перегрузить его практически невозможно.
  • Другая, более усовершенствованная модификация Round Robin – Weighted Round Robin. По сути, тот же самый Round Robin, только уже учитывается мощность серверов и запросы распределяются согласно их коэффициентам. Чем больше коэффициент – тем больше запросов.
  • Более «умный» алгоритм – Least Connections. Учитывает количество активных подключений и отправляет запрос туда, где меньше всего соединений. Поэтому и нагрузка на систему намного меньше. Улучшенный вариант – Weighted Least Connections, учитывает еще и весовой коэффициент серверов.
  • Все эти методы обладают досадным недостатком – запросы идут на разные IP-адреса, из-за чего возникают трудности с хранением сессий.
  • Для решения этой проблемы применяется Sticky Sessions. В «липких сессиях» запросы распределяются по серверам на основе IP hash, таким образом пользователь закрепляется за конкретным сервером. Но при отказе сервера можно потерять все данные сессии.
  • Схемы

    • Балансировка нагрузки действует в основном на транспортном уровне ((TCP, UDP) и уровне приложений (HTTP, FTP, DNS, SNMP, Telnet).
    • Высокоустойчивая схема – схема с двумя балансерами, основным и вспомогательным. Если один вдруг неожиданно прикажет долго жить, второй все вывезет, и система будет работать в обычном режиме.
    • Программное обеспечение

    • Для TCP и UDP на Linux подойдет LVS (Linux Virtual Server) – коммутатор протоколов четвертого уровня. Этот балансировщик нагрузки и кластеризации довольно неплох, однако не будет работать на более высоком уровне протоколов.
    • Для HTTP и TCP разработан HAProxy – высокопроизводительный прокси и балансировка, который умеет встраивать «cookies» для поддержания «липких сессий» и считается зэ бэст оф зэ бэст.
    • NGINX – отечественный высокопроизводительный веб-сервер, использующий для балансировки модуль Upstream.
    • Презентация

      Используйте эти приемы – и вы без головной боли наладите работу сервера, а сайты будут просто летать.

      Comments

      comments


© 2001-2018 Энтерра Софт - Разработка программного обеспечения на заказ.

Entries (RSS).