图7、通过撤销VIP路由进行故障隔离
至此,我们已经实现了一个基于FULLNAT,主要依赖三层协议端口做健康检查,通过BGP和网络设备对接实现VIP收发的方式实现负通用载均衡架构模型。
四、VGW的实现方案
基于上述4层负载的架构,我们建设了VGW(vivo Gateway),主要对内网和外网业务提供4层负载均衡服务。下面我们将从逻辑架构、物理架构、冗余保障、如何提高管理性转发性能等方面进行说明。
4.1 VGW组件
VGW核心功能是复杂均衡,同时兼具健康检查,业务引流等功能,所以组成VGW的组件主要就是核心的负载均衡转发模块、健康检查模块、路由控制模块。
- 负载均衡转发模块:主要负责负载计算和数据转发;
- 健康检查模块:主要负责检测后端(RealServer)的可用状态,并及时清除不可用后端,或者恢复可用后端;
- 路由控制模块:主要进行VIP发布引流和隔离异常VGW服务器。
4.2 逻辑架构方案
为了方便理解,我们把客户端到VGW环节的部分称之为外部网络(External),VGW到后端(RealServer)之间的环节较内部网络(Internal)。从逻辑架构上将,VGW功能很简单,就是把External的业务请求均匀分发到Internal的RealServer上。
图8、VGW逻辑示意图
4.3 物理架构方案
物理架构上,对于提供内网的VGW和外网的VGW会有一定差异。
外网VGW集群使用了至少2张网卡,分别接外网侧网络设备和内网侧网络设备。对于VGW服务器来说,两个网口延伸出两条链路,类似人的一双手臂,所以称这种模式为双臂模式,一个数据包只经过VGW服务器的单张网卡一次。
图9、外网VGW物理示意图
而内网VGW和外网不同,内网VGW则只用使用了1张网卡,直接内网侧网络设备。相对应的,该方式称为单臂模式,一个数据包需要需要先从仅有的一张网卡进,然后再从网卡出,最后转发到外部,总计穿过网卡2次。
图10、内网VGW物理示意图
4.4 VGW现有业务模型
前面我们说过,负载均衡可以为7层负载提供更上一层的负载均衡。
- 当前VGW最大的业务流量来自于7层接入接出平台(也就是Nginx)的流量,而Nginx基本承载了公司绝大部分核心业务。
- 当然Nginx并不能支持所有类型的业务,直接构建于TCP、UDP之上的非HTTP类型这一部分流量7层Nginx并不支持,这类业务直接有VGW将数据转发至业务服务器上,中间没有其他环节,比如kafka、Mysql等等。
- 还有一部分业务是用户自建了各种代理平台,类似于Nginx等等,但也由VGW为其提供4层负载均衡。