libsoup игнорирует DNS TTL в архитектуре с балансировкой нагрузки AWS Elastic Load Balancer
По этой ссылке http://www.chaseventers.org/2010/09/libsoup-ignores-dns-ttls.html
Код из libsoup /* Требуется блокировка host_lock */
static SoupSessionHost *
get_host_for_uri (SoupSession *session, SoupURI *uri)
{
SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
SoupSessionHost *host;
host = g_hash_table_lookup (priv->hosts, uri);
if (host)
return host;
host = soup_session_host_new (session, uri);
g_hash_table_insert (priv->hosts, host->uri, host);
return host;
}
К сожалению, записи в этой хэш-таблице никогда не удаляются и не имеют срока действия, если сам объект SoupSession не исчезнет.
Это отстой по нескольким причинам:
Значения DNS TTL игнорируются. Вместо этого результат DNS-запроса кешируется навсегда. Очевидно, это означает, что если запись когда-либо изменяется, клиенты libsoup должны быть перезапущены, чтобы узнать об этом.
Распределение нагрузки на DNS нарушается libsoup, который будет неоднократно подключаться к одному и тому же IP-адресу независимо от того, включены ли несколько IP-адресов в ответ на запрос A.
Похоже, что libsoup будет плохо себя вести в облачной среде с балансировкой нагрузки. пожалуйста подтвердите.
1 ответ
Вы можете перейти на Network Load Balancer, который предоставляет статический IP-адрес вместо DNS-имени, который разрешает разные IP-адреса на каждый AZ, поэтому даже если библиотека не поддерживает TTL, это не будет проблемой для вас.