【问题标题】:Refreshing DNS cache in twitter finagle library刷新 twitter finagle 库中的 DNS 缓存
【发布时间】:2015-04-22 20:14:57
【问题描述】:

twitter finagle 库是否自己进行 DNS 缓存?我问这个是因为我们删除了 vip 后面的一些主机,但他们仍然收到我们客户的请求。

如果有这样的缓存,如何设置超时时间?

【问题讨论】:

标签: scala finagle twitter-finagle


【解决方案1】:

是的,Finagle 在内部缓存 DNS。详细信息可以在Resolver.scala 中的com.twitter.finagle.AsyncInetResolver 类中找到。

Finagle 使用networkaddress.cache.ttl 系统属性,因此只能更改整个 JVM 的 TTL。

我建议使用以下代码 sn-p 来处理经常更改主机的服务:https://gist.github.com/agleyzer/6909056。它允许在每个服务的基础上指定 TTL。这在处理使用 Amazon Route 53 故障转移路由策略的服务时特别有用。

【讨论】:

  • 感谢您的回答。我有一些后续问题 - 假设 finagle 库缓存了一些 DNS 条目,这些条目是否根据 networkaddress.cache.ttl 属性刷新?现有的连接池会发生什么?他们也刷新了吗?还使用您提到的代码 sn-p 确保在现有连接池中建立的任何新连接都将具有新的 DNS 值吗?
  • 对这两个问题都是肯定的:现有的连接池由 DnsCluster 和 Finagle 刷新(至少版本 6.24,我不确定它何时实施)。更准确地说,将根据最新的 DNS 数据进行新的连接尝试。只要现有的连接还活着,它们就会被保留。
  • 所以如果我理解正确,现有的连接池和新的连接都将使用新的 DNS 名称,并且这种行为在 finagle 中是默认的。所以你提到的代码剪辑器仅用于指定每个服务的 TTL 吗?
  • 所以我们有一个服务,它的故障转移策略类似于 Amazon Route。将 networkaddress.cache.ttl 设置为一些小值是否足以处理更改的 DNS 名称?
  • 这是可能的,但并不总是需要的。即,在 JVM 范围内将 TTL 设置为 1 秒可能会产生不可预知的后果。
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 2023-01-29
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多