APP下载

Facebook借助零接触配置框架扩展骨干网

消息来源:baojiabao.com 作者: 发布时间:2024-05-14

报价宝综合消息Facebook借助零接触配置框架扩展骨干网

作者:Joe Hrbek、BrandonBennett、 DavidSwafford和James Quinn

来源:Facebook 开源博客

十多年来,Facebook一直在扩大全球性广域骨干网络和边缘网络入网点(POP)。今天,这些网络横跨多个大陆,包括城域网、长途光纤网络以及两个并行的IP骨干网。所有这些网络在迅速扩大规模,不仅支持迅速增加的发往互联网的出站流量,还支持内部更庞大的机器到机器流量需求。

Facebook以前的网络配置系统不足以应对构建这些网络的规模和复杂性,于是用零接触配置(Zero Touch Provisioning)自行开发了全面灵活的工作流程系统。这个新框架已经帮助Facebook的工程师加快行动步伐,更创造性地解决问题,并采用一种高度迭代的方法来构建Facebook的网络和网络部署工具。

快速增长带来的挑战

构建Facebook这等速度和规模的骨干网给Facebook的网络工程师带来了前所未有的独特的技术挑战。地域分散的IP和光纤骨干网络本来就具有异构特性,不容易适合常常用于同构数据中心网络中的传统的网络构建自动化方法。

多年来,Facebook的网络工程师应对骨干网增长方面的这些挑战采取的方法与同行并没有什么不同。虽然开发了工具来支持网络工程师的工作,但总体方法还是编写文档(MOP即程序法),聘请更多的工程师,以便在步伐迅速加快的部署工作中遵循这些日益详细的MOP。这些工具只是长篇MOP中的对应行,供工程师手动执行。

光自动化还不够,随后出现了新方法:VendingMachine

Facebook快速增长的骨干网流量需求很难跟上步伐,光靠手动方法无济于事。要求更迅速地构建网络导致错误增加,进而影响了服务。需要改用一种更加以软件为中心的方法来构建骨干网,并使MOP实现自动化。

起初,骨干网团队尝试使用一套十多年前的老式Facebook系统(通过控制台/串列连接进行交互),以构建数据中心服务器和架顶式交换机。这种基于控制台的方法在当时是最先进的,不过通过控制台进行配置并不总是很快速或稳定。对于遍布全球的骨干网来说,这种方法更脆弱不堪。

这个配置系统一开始规模小、针对性强,但久而久之,逐渐添加了许多新的网络使用场景、平台和角色,都在if/else条件的单一代码路径当中。顶峰时期,这个单一配置系统用于构建几乎所有的Facebook网络设备,从架顶式交换机一直到复杂的骨干网MPLS和BGP对等路由器。随着代码越来越复杂,排查故障、坏掉后解决问题或者克服新挑战变得更难了。

最终,这些挑战促使Facebook的网络工程师为网络部署工作流程开发出了一种全新的方法。称之为Vending Machine(自动售货机),这个名称源自售卖糖果和软饮料的机器。拿Facebook的Vending Machine来说,输入是设备角色、位置和平台,输出是刚配置的网络设备,准备提供生产流量。

使用Python代理的ZTP

这个新型Vending Machine系统面临的一个特别重大的挑战是,为自动化设备配置本身寻找一种方法来替代不可靠的控制台。随着数据中心交换机供应商开始支持零接触配置(ZTP)功能,使用DHCP用于网络平台,我们开始与骨干网IP路由器和设备供应商合作,以支持类似的功能。这种方法让我们得以重复使用当初为自己的服务器构建的DHCP自动配置基础设施,并通过可靠得多的以太网管理连接来配置网络设备。

虽然基本的ZTP方法只是针对网络设备进行配置和升级软件,我们采用了一种更可靠、更灵活的独特方法:下载由网络设备执行的一段特殊的Python代码,作为设备端代理。一旦ZTP进程启动了网络设备端的Facebook Python代理,代理就执行这几项功能:

1. 它从我们的Vending Machine服务器下载指令包,这些指令可能针对该特定的平台、角色和位置,甚至针对特定的设备。

2. 它遵循这些指令来:

1)执行任何指定的初始命令;

2)下载相关文件,包括配置、固件、补丁或任何其他定制包(比如Facebook的Open/R软件);以及

3)执行进一步的操作(载入配置、升级代码和重启设备等)。

3. 它还通过一条通向HTTP服务器的REST通信通道将日志发回VendingMachine服务器,用于状态、日志记录和调试。

4. 最后,代理向Vending Machine报告构建任务完成的信息,然后自行终止。

所有这些功能都在网络设备上用Facebook网络工程师编写的Python代码来执行,这意味着我们可以随时扩展和调整该代理代码,另外还能处理我们在网络供应商软件或我们自己的工作流程中发现的任何错误。

Vending Machine接下来的“步骤”

载入网络设备的软件和配置很重要,但它只允许我们替换MOP的一小部分。许多手动步骤仍然是自动化的。为了淘汰MOP,Vending Machine需要处理每一行。

我们构建Vending Machine的初衷主要是作为一种灵活的工作流程框架,那样工程师可以并行开发,以迭代方式使构建网络设备涉及的每一个非物理步骤实现自动化。我们开发了Vending Machine,将所有程序拆分成可以用任何编程语言编写的小型独立的代码片段(称为系统中的步骤即step)。

这些步骤旨在成为仅仅关注一项特定任务的简单程序。使用这种较简单的方法,工程师可以在无需更深入地了解整个Vending Machine系统的情况下编写和调试步骤。这还意味着工程师可以独立编写和部署步骤,无需重新部署整个系统,不会对系统中运行的其他步骤或工作流程带来任何影响,负责编写和调试系统不同部分的工程师之间基本上不需要协调。

Vending Machine将需要跨一组分散式服务器执行的步骤排入队列。每个步骤运行时,它:

读取用JSON编码的STDIN(标准输入),包括识别设备的数据(主机名和IP地址等)以及一般的作业元数据。

执行用针对特定步骤的代码实现的工作。

将采用标准格式的日志输出到STDERR(标准错误),与父作业一起存储起来。

返回表示步骤成功(0)或失败(任何非零退出代码)的Unix退出代码。该行为还发现步骤失败时出现的任何未处理的异常。

一个步骤失败时,Vending Machine自动将该步骤排入队列以便再次执行,从而应对配置过程中出现的任何瞬间故障。

将步骤作为独立的二进制代码来构成很简单,因而网络工程师极容易开发和部署新步骤,也极容易在改进特定网络部署工作流程的同时迭代处理代码。它还使得整个Vending Machine极其灵活。可迅速改动以支持新的使用场景和功能,无需重写现有步骤。

我们的网络工程师稳步开发越来越多的自动化Vending Machine步骤,取代过去网络部署中的手动MOP步骤:

对等互联通知

更新库存和管理系统

实现运维监控

等待设备重启

执行地址分配

生成配置

重新生成和推送全局iBGP和MPLS网状网

执行一系列广泛的链路级、设备级和拓扑级的健康检查和验证

调用支持生产流量的耗尽/未耗尽(draining/undraining)的现有工具。

Vending Machine使我们的网络工程师能够在VendingMachine里面将这些自动化步骤连起来,连成逐渐更全面的生产网络部署工作流程。这些工作流程定义了步骤运行的顺序,以及哪些步骤应与另外哪些步骤并行运行以缩短构建过程。步骤可以在多个工作流程之间共享和重用,也可以隔离到某个特定的设备角色或平台。

这些步骤和工作流程逐渐取代了我们的庞大MOP中的每一行和每个部分,直到MOP只显示一行:“Run Vending Machine”。或者更确切地说是,vmconfigure 。同样这个命令可用于我们在Facebook网络中支持的每个网络设备、角色和平台。网络构建的复杂性和变化性隐藏起来,由Vending Machine系统以及在里面构建的工作流程和步骤来处理。

Vending Machine的下一站是什么?

Vending Machine让Facebook大大增强了信心,对于骨干网部署以及那些部署背后自动化的可靠性有了把握。这种信心已经使我们的工程师得以开始力求实现更宏伟的目标:

协调VendingMachine设备作业组,以构建或重构更庞大的网络拓扑。

使我们重构Express骨干网中的整个全局平面完全实现自动化。

使我们跨全球骨干网顺畅、无缝地升级软件版本实现自动化。

使我们以一种健康、系统化的方式持续重构所有网络使实现自动化。





2018-05-28 03:33:00

相关文章