DNS
Один из наиболее простых способов разделения нагрузки между несколькими серверами состоит в использовании циклической дисциплины Round-Robbin DNS (RR-DNS).
Рис. 1. Распределение нагрузки с помощью Round-Robbin DNS |
Этот способ не требует наличия выделенного распределителя нагрузки, функцию которого выполняет DNS-сервер. Сервер, обслуживающий зону, в которой расположен кластер, циклически производит разрешение одного и того же доменного имени на различные IP-адреса, соответствующие хостам из кластера. Данный подход достаточно хорошо изучен и наряду с главным достоинством, простотой, обладает рядом очевидных недостатков [4].
Бороться со вторым недостатком можно путем настройки управляющего параметра TTL (Time-to-Live), задающего время изниаписи в DNS-кэше. Установка TTL равным нулю исключает эффект кэширования, но тогда DNS-сервер может стать узким местом сетевого трафика. В [10] показано, что без кэширования время разрешения доменного имени становится на два порядка выше. Можно подстраивать TTL для каждой записи с учетом частоты запросов, но далеко не очевидно как это делать с максимальным эффектом. Замечен еще один недостаток DNS-подхода еявное предположение, что клиент и его локальный name-сервер расположены поблизости. Однако это не всегда так. Поэтому временная задержка на name-сервере не всегда правильно отражает задержку клиента. DNS-подход в условиях большой загрузки и разнообразия типов запросов сам по себе не может гарантировать решения проблемы балансировки; для этого нужны более тонкие дисциплины.