一、研究背景
Google为了向广大的用户提供服务,拥有很多的数据中心和三种不同类型的网络,包括数据中心网络(具有逻辑上集中的控制平面)、软件定义的广域网B4(支持多种流量类别并使用集中式流量工程)以及全球广域网B2(用于面向用户的流量,采用了分散式流量工程)。
二、文章要解决的主要问题
面对规模、网络演变和复杂性,保持高可用性是一项挑战。例如,对于面向用户的流量,Google的内部可用性目标是每月停机时间不超过几分钟。
维持这种高可用性尤其困难,是由于以下三个原因。首先是规模和异构性:Google的网络遍布全球,在这种规模下,网络中某些组件的故障很普遍。第二个是演进的速度:网络不断变化以响应不断增长的流量需求以及新服务的推出。第三是管理复杂性:尽管控制平面已经在发展以应对网络的复杂性,但是管理平面却没有跟上步伐。
三、文章提出的主要技术方法
对于每一次重大的故障,以反思报告的形式详细地记录故障事件、原因、解决方法。本文主要是对反思报告进行分析,从中汲取分布式系统高可用性设计原则。
本文将故障事件分为六类不同的影响类别:黑洞,其中到目标集或来自一组来源的访问量完全被黑洞;高优先级流量的高/低丢包;较低优先级流量的流量高/低丢包;以及,没有影响。为了区分高/低丢包,我们基于可用性目标设计了丢失阈值。
所有网络故障的根本原因可以直接分为硬件故障,软件错误和配置错误,但是,从这种粗略的分类来看,除了增加硬件冗余,加固软件,避免配置错误的一般建议之外,很难得出有关如何应对这些根本原因的具体见解。因此,本文对根本原因进行了更细致的分类,从而为提高网络可用性提供了有用的见解。
首先将根本原因分为数据平面、控制平面、管理平面三大类。当然,故障可以是多个根本原因导致的。
数据平面:设备资源超限,控制平面网络故障,并发硬件故障或硬件配置错误,不良的服务等级标记,结构不对称或冻结,链接错误或震荡。
控制平面:控制平面元素的级联,控制平面元素之间缺乏一致性,控制平面软件推送时并发错误,错误的流量工程,数据平面和控制平面之间缺乏同步,部分或全部控制平面故障。
管理平面:风险评估错误,管理平面自动化中的错误,路由配置错误,竞争性的排空或升级,管理流程不正确/不完整,错误执行的管理流程。
四、实验及结论
可以认为反思报告的分析就是本文的实验,本文的结论是提出了一些保持高可用性的设计原则。
- 采用纵深防御
- 在平面内和平面之间保持一致性
- 失效开放
- 防患于未然
- 快速恢复
- 不断升级网络
- 高可用性设计的研究
其中第6点是本文的新颖观点。可以观察到触碰网络会导致可用性故障,这可能使人得出以下结论:限制网络发展的速度。这是不可取的,因为:i)网络能力的增强应该显著领先于市场需求,而不仅仅是当前必需的;ii)网络将会不支持应用程序必要的演化需求,例如低延迟和强大的拥塞控制;以及iii)更改操作数量有限,这意味着网络会将更改视为由很少执行的代码路径处理的罕见事件。
作者从内部得出相反的结论。尤其是在软件定义的网络基础结构中,并且随着管理平面的自动化程度的提高,有机会进行升级和更改常见情况。Google努力每周将新功能和配置投入生产。
五、分析及启示
增强网络能力的方法不是不去触碰这个网络,而是勇敢地面对他,并且不断地演化升级。