Насколько я понимаю, DNS был разработан для разрешения имен, а не для балансировки нагрузки.
Для обоих, потому что (почти) все записи могут быть установлены, следовательно, для заданного вопроса клиент может получить несколько ответов, а затем может свободно выбирать любой элемент, который он предпочитает.
Вот почему частым шаблоном является циклический выбор ответов, так что клиент выбирает «первый» элемент, но каждый раз он будет другим.
Конечно, клиент может реализовать более разумный алгоритм, особенно для перехода на IPv6 с А
и АААА
записи, см. RFC 8305 «Happy Eyeballs Version 2: Better Connectivity Using Concurrency», но это больше не балансировка нагрузки.
Так что все зависит от того, какой объем «интеллекта» есть на стороне клиента.
СРВ
записи позволяют кодировать как приоритет (отказоустойчивость), так и вес (балансировка нагрузки) для потенциально любого протокола через TCP или UDP, и позволяет больше не жестко кодировать номера портов. К сожалению, браузеры так и не реализовали его.
Более новая итерация СВЦБ
и HTTPS
записи, которые позволяют отчасти то же самое.
Обратите внимание на это на самом деле в текущем черновике:
Записи SRV указывают «вес» для несбалансированной рандомизированной балансировки нагрузки. SVCB поддерживает только сбалансированную рандомизированную балансировку нагрузки, хотя веса могут быть добавлены через будущий SvcParam.
Следующий:
Что, если мне нужен более сложный алгоритм балансировки нагрузки помимо циклического перебора?
Сегодня это означает СРВ
записи и некоторый интеллект в приложении (на стороне клиента). Или более умный сервер имен, который изменяет свои ответы в зависимости от внешнего динамического фактора (например, того, что делают CDN).
Основная проблема, с которой сталкивается балансировка нагрузки на уровне DNS, связана с TTL, а также потому, что некоторые резолверы не будут подчиняться слишком маленьким значениям для него.
Вы также должны помнить, что авторитетный сервер имен, у которого есть данные, видит только рекурсивный сервер имен, который клиент использует большую часть времени, а не сам клиент. Так что его выбор ограничен еще и этим.