我们在大型 map Reduce 中有一个步骤,用于执行 DNS 解析。应用程序本身使用 c-ares 库以及 libcurl。
我注意到,每次解析时,首先都会尝试 AAAA,然后立即尝试 A 解析。使用 TCPdump 可以清楚地看到这一点,无论是在我们指定的服务器还是在主机上。
以下是 S3 流量的示例
$ tcpdump dst port 53
20:28:35.259552 IP x.x.x.x.55271 > ec2-xx.amazonaws.com.domain: 21815+ AAAA? s3.amazonaws.com. (34)
20:28:35.261526 IP x.x.x.x.56058 > ec2-xx.amazonaws.com.domain: 21823+ A? s3.amazonaws.com. (34)
每次决议都会重复这一过程。由于我们在此过程中要进行超过 7000 万次决议,因此将其中 50% 的浪费削减掉是合理的。
如何在 Ubuntu 中禁用 IPv6 查找?
我尝试将 /etc/gai.conf 中的优先级更改为:
precedence ::ffff:0:0/96 45
但我仍然看到 ubuntu 首次尝试 IPv6 解析。如能得到任何帮助,我将不胜感激
编辑:
我的 /etc/resolv.conf 很简单,只设置了一个名称服务器:
cat /etc/resolv.conf
nameserver x.x.x.x
答案1
您知道,IPv6(而不是 IPv4)是 IP 的前瞻性版本...IPv6 很遗憾看到您离开 :-( 但您可以禁用它。
如果您正在使用 libcURL,那么您需要做的就是:
curl_easy_setopt(easy_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
但是,您是否担心这些额外的 AAAA 请求所花费的时间或额外的网络流量?我希望 A 和 AAAA 可以并行完成,这样您就不必担心延迟。