如何让Java尊重DNS缓存的超时?
我们使用GSLB进行地理分布和负载平衡.每个服务都分配了一个固定域名.通过一些DNS魔术,将域名分配到最接近服务器的IP中.为了使负载平衡起作用,应用程序服务器需要从DNS响应中尊重TTL,并在缓存时间耗尽时再次解决域名.但是,我无法找到一种在Java中这样做的方法. 该应用程序在Java 5中,在Linux上运行(CentOS 5). 解决方案 根据拜伦的回答,您无法使用-D flag或呼叫System.setProperty设置networkaddress.cache.ttl或networkaddress.cache.negative.ttl作为系统属性,因为这些不是系统属性 - 它们是安全属性. 如果要使用系统属性来触发此行为(因此可以使用-D flag或call System.setProperty),则需要设置以下 system 属性: -Dsun.net.inetaddr.ttl=0 此系统属性将实现所需的效果. 但要注意:如果您在启动JV
44 2022-12-17
编程技术问答社区
有什么办法能让Java尊重DNS缓存超时(TTL)?
我们使用 GSLB 进行地理分布和负载平衡.每个服务都分配了一个固定的域名.通过一些 DNS 魔术,域名被解析为最接近负载最少的服务器的 IP.为了使负载均衡发挥作用,应用服务器需要遵守来自 DNS 响应的 TTL,并在缓存超时时重新解析域名.但是,我想不出在 Java 中执行此操作的方法. 应用程序采用 Java 5,在 Linux (Centos 5) 上运行. 解决方案 Java 有一些非常奇怪的 dns 缓存行为.最好的办法是关闭 dns 缓存或将其设置为 5 秒等较低的数字. networkaddress.cache.ttl(默认:-1) 指示从名称服务中成功查找名称的缓存策略.该值指定为整数,以指示缓存成功查找的秒数.-1 值表示“永久缓存". networkaddress.cache.negative.ttl(默认:10) 指示来自名称服务的不成功名称查找的缓存策略.该值指定为整数,以指示缓存不成功查找失败的秒数.值 0 表示“从不缓存".-1 值表示
1464 2022-07-17
编程技术问答社区