1. 需要场景

目前互联网的服务广泛都部署在数据中心(Data Center)内。数据中心是一个很简单的零碎,波及到供电、制冷、供水等一系列的环节。因为设施故障、供电故障和自然灾害等因素,数据中心也可能呈现故障。从服务的高可用角度,个别须要将服务部署在多个数据中心内,以便在数据中心呈现故障的状况下,依然保障服务的继续提供。

在多数据中心场景下,须要思考网络流量如何在多个数据中心之间调度。如下图所示,有2个数据中心,每个数据中心内都部署了雷同的服务(别离命名为服务1和服务2)。每个数据中心各有一个网络接入点。上面要解决的问题是如何将用户流量在多个数据中心部署的服务间做调度。


图1 多数据中心场景下的流量调度

2. 基于DNS的调度计划

2.1 计划阐明

在多数据中心调度方面,目前比拟广泛采纳的是基于智能DNS的计划。工作原理如下图所示。

每个数据中心的接入点有不同的VIP(别离为1.1.1.1和2.2.2.2)。客户端在向服务发送申请前,首先通过智能DNS将域名(www.demo.com)解析为IP地址。智能DNS依据待解析的域名和客户端的IP地址(3.3.3.3),基于设置的解析策略,返回解析的后果(1.1.1.1)。

在每个数据中心内,发往这个数据中心接入点的申请都仅由同数据中心内的服务来解决。在下图中,发往1.1.1.1的申请仅由服务1来解决,发往2.2.2.2的申请仅由服务2来解决。


图2 在多数据中心场景下利用智能DNS

如果数据中心产生了故障(如:接入点1产生了故障,或服务1产生了故障),能够通过扭转智能DNS的策略,将2.2.2.2返回给客户端,从而将用户流量从数据中心1中的服务1调度到数据中心2中的服务2。


图3 基于智能DNS实现故障切换

2.2 计划的问题

尽管基于DNS的多数据中心调度计划已广泛采纳,然而这个计划也存在着非常明显的问题。计划的问题包含:

(1) 失效速度慢。DNS采纳缓存机制,在客户端和客户端间接拜访的Local DNS(位于客户端所处的网络或运营商内)内个别都有缓存。缓存能够升高客户端对于权威DNS和Local DNS的拜访压力,但同时也减少了失效的延迟时间。例如,如果在权威DNS中将TTL设置为5分钟,则最终的失效提早会达到8-10分钟。还可能存在有故障或不遵循DNS TTL的Local DNS,从而导致对应的用户应用更长的工夫实现切换,甚至始终都不切换。

(2) 控制精度低。对于智能DNS的期待,是能够比拟准确的管制达到各数据中心接入点的流量。但这个指标是无奈实现的。这一方面是因为上文所提到的DNS缓存机制,客户端在每次DNS解析后发送的申请数量不确定;另一方面,在DNS解析的过程中存在Local DNS,权威DNS无奈判断每个Local DNS所代表的用户规模。


图4 权威DNS难以判断Local DNS代表的用户规模

3. 基于七层负载平衡的调度计划

为了解决基于DNS的调度计划中所存在的问题,能够在转发的过程中引入七层负载平衡零碎(如BFE)。

3.1 计划阐明


图5 引入七层负载平衡零碎后的调度计划

具体的计划如上图所示。在各数据中心内各部署一个BFE集群。BFE能够依照指定的权重,将流量转发至多个后端集群。

这个计划要求在多个数据中心之间有较好的内网互联。在同城的多个数据中心之间,这个条件是比拟容易满足的。并且在同城内,数据中心之间的网络提早能够管制在1-2ms内,对于转发整体的网络提早影响也不大。

对于位于不同地区的多个数据中心,如果在数据中心间接有比拟好的内网互联,也能够利用七层负载平衡做内网调度;如果没有短缺的内网互联,只能持续应用基于DNS的调度计划。

3.2 计划的收益

和只应用DNS的计划相比,在引入七层负载平衡零碎后,能够取得如下收益:

(1) 失效速度快。多集群间分流的权重配置在BFE加载后,能够立即失效。这相比DNS的分钟级提早有了微小的进步。而且相比于DNS计划中Local DNS的不可控性,BFE的集群齐全在服务提供方的管制之下。

(2) 控制精度高。在引入BFE后,转发至后端服务集群的流量能够准确的依照给定的权重来管制。这为后端服务的容量治理和压力过载场景下的处理提供了便当。

4. 利用场景阐明

上面联合几个具体的场景,阐明七层负载平衡如何在多数据中心流量调度中发挥作用。

4.1 场景1:服务故障

在某些场景下(如服务的灰度公布),可能呈现单个数据中心内的服务呈现故障,从而导致服务容量降落甚至齐全无奈提供服务。这时能够调整BFE上的分流权重,将流量调度到其它数据中心,疾速实现止损解决。


图6 服务故障场景下的解决

4.2 场景2:外网流量突增

可能呈现某个地区的用户流量突增,导致单个数据中心内的服务压力超过容量。这时能够将局部流量调度到其余子集群来服务。


图7 外网流量突增场景下的解决

4.3 场景3:外网故障

在外网故障的场景下,会在外网通过DNS将局部流量从一个网络接入点调度到另外一个网络接入点。这样可能会导致另一个数据中心内的服务(下图中的服务2)压力超过容量。这时能够将局部流量调度到服务1来服务,以升高服务2的压力。


图8 外网故障场景下的解决

5. 延长浏览

本文阐明了在多数据中心场景下如何通过应用七层负载平衡零碎BFE来实现更好的流量调度成果。有趣味的读者,能够浏览以下资料进一步理解:

(1) BFE多服务间分流权重比例的配置。能够查看《万亿级流量转发:BFE核心技术与实现》的第11章,或《深刻了解BFE》(在线版本)的第21章。

(2) BFE多服务间负载平衡的实现机制。能够查看《万亿级流量转发:BFE核心技术与实现》的第14章,或《深刻了解BFE》(在线版本)的第32章。