Какой IP-адрес использует.NET HttpWebRequest, если запись DNS привязана к нескольким адресам

Я использую System.Net.HttpWebRequest, чтобы поразить приложение API, размещенное в AWS за балансировщиком нагрузки. У LB есть 6 экземпляров, 3 в 2 разных AZ. В результате запись DNS для LB имеет 2 IP-адреса (1 для каждого AZ).

Когда я запускаю свое приложение на C#, веб-запросы идеально сбалансированы между 3 серверами в одном AZ. Это не бьет 2-й AZ.

Мне кажется, что объект WebRequest только когда-либо попадает на 1-й IP-адрес, связанный с записью DNS LB, поэтому трафик сбалансирован, но только в одном AZ.

Имеет ли это смысл? Как получить WebRequest для назначения границ других IP-адресов записи DNS?

3 ответа

Решение

HttpWebRequest всегда использует первый IP-адрес в списке. Route53 возвращает IP-адреса от одного балансировщика нагрузки в случайном порядке, что помогает сбалансировать нагрузку по AZ.

Когда C# выполняет поиск DNS (через.NET), он кеширует этот результат. Это означает, что он будет продолжать использовать любой IP-адрес, который он получит первым.

Посмотрите, как очистить DNS-кеш клиента System.Net? - это может направить вас в правильном направлении.

Я думаю, что вы столкнулись с одной из слабостей AWS ELB. Все запросы с одного IP будут перенаправлены на один AZ. Это делает elb проблематичным для веб-сервисов, у которых много трафика, но только из небольшого подмножества ip.

Другие вопросы по тегам