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