【发布时间】:2020-03-13 08:40:57
【问题描述】:
我的应用程序执行大量 RPC。并得到了一些 DNS 解析错误。发现tornado AsyncHttpClient没有缓存dns结果,每次都调用socket.getaddrinfo。
我找到了像https://github.com/jayvdb/dns-cache 这样的库
和sn-ps之类的
def _setDNSCache():
"""
Makes a cached version of socket._getaddrinfo to avoid subsequent DNS requests.
"""
def _getaddrinfo(*args, **kwargs):
if args in kb.cache:
return kb.cache[args]
else:
kb.cache[args] = socket._getaddrinfo(*args, **kwargs)
return kb.cache[args]
if not hasattr(socket, "_getaddrinfo"):
socket._getaddrinfo = socket.getaddrinfo
socket.getaddrinfo = _getaddrinfo
我应该使用应用层 dns 缓存库吗?
【问题讨论】:
-
有一个称为生存时间 (TTL) 的属性,它是 DNS 请求过程的一部分。这指定了当前 DNS 记录有效且不应发出新请求的时间。这减少了网络请求。您是否觉得您正在使用的库缓存时间过长或请求过于频繁?
-
@vincent 非常感谢。我认为我的应用发送 dns 查询请求过于频繁。