Популярным решением при росте проекта и нехватке ресурсов используемого сервера является горизонтальное масштабирование — дублирование проекта на другом сервере и распределение запросов при помощи задания нескольких А-записей DNS.
Схему иногда называют Round robin DNS пул — она подразумевает существование проекта на двух серверах, например, на серверах с IP адресами: 123.123.123.123 и 123.123.123.124
Балансировка нагрузки за счет записей DNS
После дублирования проекта задается вторая запись DNS
site.ru A 123.123.123.123
site.ru A 123.123.123.124
Запросу к сайту при этом будут распределяться равномерно, создаваемая нагрузка уменьшится вдвое.
Данный способ является самым простым решением при необходимости балансировки и не требует каких-либо настроек как при использовании HAProxy или Nginx.
Использование Round robin DNS пулов имеет свои минусы:
- нет геолокации клиентов
- нет возможности проверки статуса бэкенда — если один из серверов вышел из строя запросы на него будут продолжать отправляться
- необходимо каким-то образом организовывать синхронизацию данных, в т.ч. сессий РНР поскольку запросы пользователя при двух последовательных обращениях с большой долей вероятности будут обработаны разными серверами
Практически все перечисленные проблемы (помимо синхронизации) можно решить применяя в качестве DNS сервера пакет GDNSD, из коробки предлагающий:
- geoIP — функционал, используемый для отслеживания источников запросов
- проверка статуса сервера при помощи отправки UDP TCP запросов с определенной периодичностью
Для использования GDNSD нужен маленький TTL чтобы поддерживать динамичность — негативное последствие при этом — увеличение трафика на DNS сервера поскольку запросы пользователей происходят чаще.