随着信息技术的快速发展,企业应用规模也在迅速扩大,客户对应用的服务质量要求也越来越高。然而随着近年来多家网络运营商DNS解析故障,网络丢包,网络抖动等问题一直没有得到很好的解决,企业应用双活逐步成为近年来很多公司IT规划建设的重要方向。
        双活包含网络双活和应用双活,在应用层面上分为“同城双活”和“异地双活”,宏观策略基本上都是将应用服务分散部署在不同的软硬件环境中,区别可能就在于机房的位置是否在同一个城市。双活在网络层面上分为同网双活和异网双活,整体上来看网络双活主要的关注点是网络服务商的网络类型和网络服务位置。
        目前大多数企业的关注点更多的在应用双活,然后近年来网络运营商各种网络故障频发,系统的可用性无法得到有效的保障。本文就是在这种大环境下,按照“减少网络链路,避免网络交叉”这个大原则,提出企业应用网络双活解决方案,包括DNS解析双活策略,负载均衡双活策略,企业应用双活策略是个部分。从以往的经验中来看,良好的网络双活设计对于减少请求链路,避免网络故障导致服务不可用方面效果是非常显著的。

 


Java 应用层面解决双活数据 应用双活要求_F5

应用层双活策略整体架构

DNS解析双活策略 

         DNS解析双活策略主要在于当服务不可用时,客户端能够快速获取新的IP尝试请求最近可用备用服务。整体包括客户端请求地址列表和DNS就近接入策略。在客户端通过配置地址列表分别对应移动,电信,联通三大网络服务运营商环境下的DNS解析服务器。而每台DNS解析服务器配置在不同网络环境下的企业应用,并通过最近接入原则解析用户请求实现就近接入。

        考虑到成本问题和用户访问的友好性,企业可以适量精简,选择使用一个域名配合多家运营商的DNS解析服务,至少是一家运营商的DNS服务器做了高可用策略,服务尽量不再同一网段,同一机房,同一网络服务商。只是这样一来当这家运营商的DNS解析服务发生故障的时候,企业的服务也就完全中断了。这个问题其实还是比较严重的,比如2015年四月份四川电信递归DNS大规模故障,2015年6月份山东联通DNS大规模瘫痪,2015年12月6日起全国运营商递归DNS出现较大范围内域名间隙性解析缓慢或者解析到127.0.0.1的情况……2019年4月4日早上10:30分左右,国内知名公共DNS服务商“114DNS”发生故障。其实这样的问题非常多,而且每年都有发生。所以在条件允许的情况下还是希望至少同时部署两家不同服务商的DNS解析服务,其实这部分成本还是很低的相对整个企业应用系统来说通常都可以忽略。
 

负载均衡双活策略
        负载均衡策略主要涉及Nginx和F5。Nginx是软件负载弱网络依赖,低成本高性能,安装配置比较简单同时可以很好的避免企业应用环境直接暴露在互联网环境中。F5是硬件负载均衡,可以通过智能交换机实现,处理能力更强,而且与系统无关,更适合大访问量简单应用。但是成功过高,配置冗余,网络探活无法有效掌握服务器以及应用状态。
综合考虑安全性,硬件成本,运维成本,负载均衡策略采用Nginx(我们暂时称为Nginx1)+F5+Nginx(我们暂时称为Nginx2)的组合策略,应该是一种比较合理的方案。Nginx1负责解析分发请求到F5服务器,在充分利用F5的硬件资源带来的优秀处理能力的同时,避免企业内部网络暴露在外网环境中。同样F5下面也可以对应Nginx2的负载均衡服务最终将用户请求分发到具体的应用实例上。这样既可以达到减少F5配置维护难度,又可以通过Nginx2端口检测到服务器内部的故障,并把错误的请求重新提交到另一个节点。

         负载均衡双活策略中存在的一个问题是F5的处理能力没有得到充分的发挥,当然因为我们这边涉及的是一个应用的部署问题,通常一个企业会有很多个应用的这种情况下低成本的Nginx可以以应用为单位单独部署,既方便维护又能实现应用隔热,安全且保证性能。当然,关于F5资源利用率这是个一个硬件资源利用的问题,这个问题我们后面通过专门的文章再补充。

应用服务部署双活策略
       应用服务部署目前有很多主流的容器,平台都可以很方便的完成应用服务的部署和维护工作。例如Docker,K8s或者swarm等可选择 的范围非常广泛。我们这里从网络双活层次提出的建议是相互关联的应用部署在同一网段,同一机房,因为这些应用本身就是同工实现同一个业务服务的,单独加强某一个应用的可用性作用不大,反倒是会加强运维的复杂程度和请求链路的增加。而对于同时完成一个服务的一组应用应该部署在不同的网络环境下,这样可以尽量减少网络故障对服务造成的影响。

        关于企业双活策略的问题由于文中所述策略比较完整,企业还是要根据自身的服务质量容忍度,企业可以根据实际应用酌情精简。