域名切换IP连接处理策略

#域名对应IP切换

今天在微博看到有人在讨论当域名对应IP发生变化时,程序如果自动切换到新IP,针对此问题说明下常用的方案。

在很多应用场景以及内部访问服务都使用域名的方式,使用域名的方式有很多优点,比如说后端服务器更换机器或者切换别的IP地址时,只需要修改域名对应的绑定IP即可,但同时对于TCP连接的业务场景确会带来一些问题。

问题1:如何发现域名对应的IP发生变化

问题2:域名对应的IP发生变化时业务需要注意哪些?

假设域名为:xxx.bj.com(简称域名) 对应IP为:127.0.0.1(简称原IP),切换域名到新IP为:127.0.0.9(简称新IP) 请求客户端简称为C,服务端简称为S

域名对应原IP发生变化时,为了保证服务高可用性,原IP上得服务还会保留运行一段时间,等所有请求都切换到新IP后,原IP对应的服务做下线处理。正常情况C与S使用TCP长连接保持连接,当S对应的域名发生IP切换时C如何知道并做处理呢?

问题1方案: 客户端C与服务端S创建连接时,在客户端做一个缓存,记录域名对应的IP,使用一个后端线程定时去探测域名对应IP情况,如果发生变化,则通知应用层IP发生了变化,回收老连接,创建新连接。

问题2方案: 当业务程序接受到域名对应IP发生切换时,要回收旧连接,创建新连接,在回收旧连接时要保证正在请求或者已经发出的请求等待服务端返回数据在切换,不然会有部分请求丢失。

总结:

频繁创建连接也是需要一定的成本的,如果每次请求都创建一个新连接,这样也可以保证域名切换新IP后业务及时切换,但这个成本比较高,对于业务场景来说性能也不是太理解,常见得方案是创建连接池。

在很多应用场景要把复杂问题简单化,越复杂带来得不可控制因素就越多,简单高效往往就是好方案。

blog comments powered by Disqus