0%

Evolve or Die: High-Availability Design Principles Drawn from Google’s Network Infrastructure 论文阅读报告

一、研究背景

Google为了向广大的用户提供服务,拥有很多的数据中心和三种不同类型的网络,包括数据中心网络(具有逻辑上集中的控制平面)、软件定义的广域网B4(支持多种流量类别并使用集中式流量工程)以及全球广域网B2(用于面向用户的流量,采用了分散式流量工程)。

二、文章要解决的主要问题

面对规模、网络演变和复杂性,保持高可用性是一项挑战。例如,对于面向用户的流量,Google的内部可用性目标是每月停机时间不超过几分钟。

维持这种高可用性尤其困难,是由于以下三个原因。首先是规模和异构性:Google的网络遍布全球,在这种规模下,网络中某些组件的故障很普遍。第二个是演进的速度:网络不断变化以响应不断增长的流量需求以及新服务的推出。第三是管理复杂性:尽管控制平面已经在发展以应对网络的复杂性,但是管理平面却没有跟上步伐。

三、文章提出的主要技术方法

对于每一次重大的故障,以反思报告的形式详细地记录故障事件、原因、解决方法。本文主要是对反思报告进行分析,从中汲取分布式系统高可用性设计原则。

本文将故障事件分为六类不同的影响类别:黑洞,其中到目标集或来自一组来源的访问量完全被黑洞;高优先级流量的高/低丢包;较低优先级流量的流量高/低丢包;以及,没有影响。为了区分高/低丢包,我们基于可用性目标设计了丢失阈值。

所有网络故障的根本原因可以直接分为硬件故障,软件错误和配置错误,但是,从这种粗略的分类来看,除了增加硬件冗余,加固软件,避免配置错误的一般建议之外,很难得出有关如何应对这些根本原因的具体见解。因此,本文对根本原因进行了更细致的分类,从而为提高网络可用性提供了有用的见解。

首先将根本原因分为数据平面、控制平面、管理平面三大类。当然,故障可以是多个根本原因导致的。

数据平面:设备资源超限,控制平面网络故障,并发硬件故障或硬件配置错误,不良的服务等级标记,结构不对称或冻结,链接错误或震荡。

控制平面:控制平面元素的级联,控制平面元素之间缺乏一致性,控制平面软件推送时并发错误,错误的流量工程,数据平面和控制平面之间缺乏同步,部分或全部控制平面故障。

管理平面:风险评估错误,管理平面自动化中的错误,路由配置错误,竞争性的排空或升级,管理流程不正确/不完整,错误执行的管理流程。

四、实验及结论

可以认为反思报告的分析就是本文的实验,本文的结论是提出了一些保持高可用性的设计原则。

  1. 采用纵深防御
  2. 在平面内和平面之间保持一致性
  3. 失效开放
  4. 防患于未然
  5. 快速恢复
  6. 不断升级网络
  7. 高可用性设计的研究

其中第6点是本文的新颖观点。可以观察到触碰网络会导致可用性故障,这可能使人得出以下结论:限制网络发展的速度。这是不可取的,因为:i)网络能力的增强应该显著领先于市场需求,而不仅仅是当前必需的;ii)网络将会不支持应用程序必要的演化需求,例如低延迟和强大的拥塞控制;以及iii)更改操作数量有限,这意味着网络会将更改视为由很少执行的代码路径处理的罕见事件。

作者从内部得出相反的结论。尤其是在软件定义的网络基础结构中,并且随着管理平面的自动化程度的提高,有机会进行升级和更改常见情况。Google努力每周将新功能和配置投入生产。

五、分析及启示

增强网络能力的方法不是不去触碰这个网络,而是勇敢地面对他,并且不断地演化升级。

咖啡,亦我所需也