Facebook最近概述了其位于爱荷华州阿尔图纳的新数据中心的高度模块化和可扩展网络。这家社交网络巨头一直对其数据中心网络的方法持开放态度,因为它试图围绕其OpenCompute项目构建一个网络设备和软件生态系统。Facebook的目标是创建一个基于去中心化硬件和软件的数据中心交换市场,降低运营成本和难度。根据OpenComputingNetworkProject的问题,Facebook推出了原型交换机(Wedge)和FBOSS(基于Linux的网络操作系统)。虽然无论是Wedge还是OpenComputing,现阶段都无法在Facebook发挥重要作用,但可以想象,它们的未来将是一片光明。FacebookAltoona数据中心网络通过简单性和创新的架构方法实现了可扩展性和模块化。它仅使用BGP和等价多路径(ECMP)路由来保持拓扑结构的简单性和供应商独立性,并且它采用了一个庞大的叶脊网络,其中每一层都设计为独立扩展。Facebook可以以计算单元和架顶式(ToR)交换机的形式扩展叶层。该网络有多个并行运行的独立主干交换机“平面”。此外,它还可以在网络设计中引入“边界Pod”来扩展外部连接。每个边缘pod包含多个机架的高带宽交换机,这些交换机将主干层连接到外部网络。Facebook的网络设计允许根据需要独立增长spine容量、服务器访问容量或边缘容量。此外,AltoonaNetworks拥有内部开发的BGP控制器,当特定应用程序和服务器需要专用网络路径时,它可以覆盖标准BGP路由。该网络有一个大规模协调器,具有定义明确的网络配置和配置自动分发到各个交换机。最后,该公司还开发了一个自动诊断和修复网络问题的管理平台。想详细了解Facebook在Altoona数据中心的网络设计,于是采访了设计该数据中心的Facebook工程师AlexeyAndreyev。您能谈谈FacebookAltoona网络的设计目标吗?AlexeyAndreyev:我们正在努力解决可扩展性问题并消除过载网络的限制——实现数据中心的容量来支持任何扩展需求,并能够以非常简单的方式扩展到不同的维度在一个统一的框架内。当我们需要扩容时,只需要增加主干交换机即可。当我们需要更多连接时,只需要增加边框Pod即可。这是一个非常结构化和可预测的框架,我们可以使用它来实现我们无限可扩展的容量目标。我们希望能够更轻松地处理网络,而不受拓扑结构或复杂性增加的限制。这种操作简单性是如何实现的?Andreyev:关键是我们用这个软件的方法来创建一个结构,然后它自动管理它。我们将配置数据中心;但我们不会配置各个组件。组件配置主要是我们系统在上层设置中创建的。我们定义了数据中心的结构,以及构成数据中心的特定结构拓扑形式因素。所有必要的具体配置,如单个设备配置、组件配置、连接设备数量的端口映射、路由策略解析等,都来源于高级设置,解析为具体的平台设置。这个解析是如何完成的?Andreyev:我们定义了一种非常简单易用的设备转换方法。我们检查所有网络服务、预期路由状态、预期拓扑和拓扑属性。我们使用此信息来创建每个组件的完全抽象和供应商中立的逻辑视图。然后,我们将它们转换为特定的实现。比如一个交换机有X个端口,这些端口对应的是X个地址,而不是一些固定的路由。这是一个很通用的做法,然后当我们生成这个逻辑视图的时候,我们只需要将它解析为任何真实的组件即可。您如何将此高级策略分发到交换机?Andreyev:我们将使用适合特定组件的方法。我们在我们的存储库中专门为这些组件部署配置。我们有一些机制可以在大量组件上安排这些操作。我们的最终目标之一是让事情尽可能简单。我们的自动化层和缩放层都非常分散,因此我们可以根据需要替换任何组件,而无需对软件进行重大更改。所以我们可以非常快速地应用新组件。这种与供应商无关的方法如何与许多数据中心运营商的目标相关联,尤其是对于开放网络用户组成员而言?这种方法如何转化并应用于更广泛的数据中心行业?Andreyev:一个重要的要求是保持简单,一个组件只有最少的必要功能,只有最少的功能部署和组件运行的必要步骤。例如,对于任何组件,我们定义一个操作(步骤)来轻松地从服务器拉取组件或轻松地将其放回服务中,或者只是部署配置等。我们发现所有不同类型事物的共性。而且越简单,它的共性就越多。这就是我们提出这种方法的原因。它相对简单,我们认为每个人都可以从中受益。您之前提到,除了ECMP,BGP是Facebook的Altoona数据中心唯一使用的路由协议。这是一种保持简单的方法吗?安德烈耶夫:是的。我们还使用最少的功能集运行此拓扑。BGP存在于整个网络中,从机架交换机上行链路到边界链路。Altoona的BGP控制器如何工作?Andreyev:每个交换机都使BGP能够与控制器通信。这里有两个基本组件。一是能够检查交换需要哪些BGP路由信息,二是通过注入路由构建设备到设备、端到提供商的路径。通过这种路由设计方法,我们可以支持大多数网络流量,包括BGP和ECMP。但是,如果需要不同于BGP决策的自定义路径,那么我们可以使用控制器功能逐跳部署它。此外,我们可以快速实施部署。决定我们走哪条路只是软件选择的问题。BGP控制器是自动决策,还是工程师决策?Andreyev:我们支持这两种方法。因为我们的结构拓扑和结构中的所有配置都是由软件创建的,所以我们能够全面监控穿越不同域的路由,以及哪些组件应该有哪些软件信息。了解所有信息后,我们就有了一种非常快速和灵活的方法来修复特定的路由路径。所以我们有关于它的状态的信息。我们的控制器可以控制各个组件的信息,我们的控制器可以向不同的网络位置发送特定的路由,并通过编程实现我们需要的路径。您是否会将此BGP控制器描述为一种SDN控制器?Andreyev:它的行为是基于软件决策的,所以它可以被这样限定。关于结构的一切都是由软件驱动的。完全不需要日志等定义和配置,也不需要为单个设备创建配置。当我们定义一个网络时,我们只是在处理整个网络的高层配置。所有其他方面都源于软件。我们可以定义很多实现方法。同样的方法适用于操作、监控和故障排除,因为大多数问题都是自动解决的。我们几乎不需要操作单个设备。添加新设备时,我们有机制来发现设备在拓扑中的角色,然后从知识库部署配置。所以你为这个网络开发了一个自动修复平台?安德烈耶夫:是的。当我们检测到问题时,系统会检查问题,如果是已知问题,它会立即修复,然后通知操作员已修复问题。修复问题后,如果发现新问题,那么我们会想办法让它自动检测到。这样当它再次出现时,相同的自动修复功能就会出现并修复它。这与我们管理服务器的方式非常相似。我们一直在使用FBAR(FacebookAuto-Remediation)来管理服务器的运维,我们正在努力在服务器上使用相同的方法和概念来实现网络可管理性。无论问题是什么,或者解决它需要采取什么具体行动,它们都是针对该问题的。它是一个普遍的框架,可以检测问题并建议解决问题的措施——以及验证这些措施和报告。这里的关键并不是真正的工具,而是概念。它考虑如何简化操作,这是指通过各种方式监控问题的概念——包括SNMP池或系统日志等,并能够响应这些事件,添加更多的修复操作,并通知人们这些操作的进展.更多的是关于我们如何实现整个框架,以及如何使这样一个大规模分布式网络更易于管理。
