2

根据此链接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 对象本身消失,否则此哈希表中的条目永远不会被删除或过期。

这很糟糕有几个原因:

  1. DNS TTL 值被忽略。相反,DNS 查询的结果会被永久缓存。显然,这意味着如果记录发生更改,则需要重新启动 libsoup 客户端才能了解它。

  2. DNS 负载平衡被 libsoup 破坏,它会重复连接到同一个 IP 地址,而不管对 A 查询的响应中是否包含多个 IP。

所以看起来 libsoup 在负载平衡 aws 云环境中会表现得很糟糕。请确认。

4

1 回答 1

1

您可以迁移到提供静态 IP 地址而不是 DNS 名称的网络负载均衡器,该名称解析为每个 AZ 的不同 IP,因此即使该库不尊重 TTL,这对您来说也不成问题。

于 2018-02-24T17:41:22.730 回答