У каждого браузера есть свой собственный метод обработки циклического DNS, я провел сегодня некоторое время, исследуя эту проблему, и буду продолжать обновлять свой ответ, когда найду подтверждение реализации, которое ограничит мои ответы браузерами, раскрывающими их поведение.
Гугл Хром
Google Chrome (используется v58) запросит все записи хоста для адреса (A, AAAA, CNAME) и поместит их в массив ( address_list ). Затем Chrome попытается открыть сокет на каждом IP-адресе в порядке от первого к последнему, Chrome не будет пытаться использовать самый быстрый или ближайший IP-адрес, он предполагает, что первый IP-адрес (предоставленный вашими исходящими средствами разрешения DNS) является лучшим IP-адресом. В моих тестах серверы bind и windows dns выделяли разные IP-адреса для каждого поиска, давая каждому 50-процентное разделение полосы пропускания. Эта функциональность выставлена вchrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
У Curl также есть эта функция --connect-timeout
переключения при отказе, но она намного длиннее, чем по умолчанию в Chrome, Chrome переключается сразу же, Curl - нет. Если вы используете libcurl и хотите выжить в циклическом экземпляре DNS, когда один IP-адрес не работает (работает в chrome, но не в коде), обязательно укажите это значение ниже.
DEFAULT_CONNECT_TIMEOUT: 0 заставил меня думать, что это невозможно с curl.
* After 149990ms connect time, move on!
В обоих браузерах IP не был привязан , они следовали TTL, заданному в DNS, и после истечения времени ttl (Chrome поддерживает это внутренне, запросы curl запрашиваются при каждом запросе), выбор ip выполняется каждый раз, как описано выше.
Что это значит? DNS-RR подходит для некоторых систем, но он не предназначен для восстановления после отказа. Следует ожидать, что все результаты поиска DNS являются (источником правды) действительными и доступными для обслуживания трафика. Существует много способов обеспечения доступности IP-адресов, таких как виртуальные плавающие IP-адреса, приемы BGP / Routing и т. Д. Используйте их .
Все тесты, выполненные только в среде IPv4, будут возвращаться с результатами с двумя стеками, как только будет доступно достаточно инфраструктуры для тестирования.
Я предполагаю, что эти изменения являются побочным эффектом Happy Eyeballs IPv6-Fallback RFC
Обновление
Полезно учитывать, что DNS RR может помочь только с балансировкой нагрузки, а не со сбоями приложений, если у одного из ваших узлов 503, вы будете обслуживать 40-60%, если ваш трафик 503. Предполагается, что все перечисленные IP-адреса являются действительными рабочими конечными точками, если они достижимы.