在过去的50年中,我们在开发互联网从一小亿计算机的微小互连开发互联网时,我们已经取得了很大的进展,这是一个带有数十亿个节点的全球结构。在该旅程中,我们已经学习了关于如何构建网络和互连它们的路由器的巨大数量。对于那些选择学习他们的人来说,我们所有人都会产生一些重要的教训。
一开始,路由器简单地是通用计算机,网络接口卡(NIC)连接到总线。
这是一个点。在此架构中,数据包输入NIC,并由CPU从NIC转换为内存。 CPU进行转发决策,然后将数据包推出到出站NIC。 CPU和内存是集中资源,受他们能够支持的内容。总线是一个额外的限制:总线的带宽必须能够同时支持所有NIC的所有NIC的带宽。
如果你想扩展这个,问题很快就会变得明显。您可以购买更快的CPU,但您如何扩展公共汽车?如果您加倍总线的速度,则必须在每个NIC和CPU卡上加倍总线接口的速度。这使得所有卡片更昂贵,即使个体NIC并不涵吞一些能力。
尽管如此,但缩放的权宜解解决方案是添加另一巴士和其他处理器:
附加的算术逻辑单元(ALU)是数字信号处理(DSP)芯片,选择,因为其价格优异 - 性能比率。额外的总线增加带宽,但架构仍然没有扩展。换句话说,您无法继续添加更多的ALU和更多的总线以获得更多性能。
由于ALU仍然是一个显着的限制,因此下一步是将字段可编程门阵列(FPGA)添加到架构中以卸载最长的前缀匹配(LPM)查找。
虽然这有助于,但它没有更多的帮助。阿卢仍然饱和。 LPM是工作量的大部分,但如果您剥夺了该部分问题,集中式架构仍然没有规模。
第2课:LPM可以在Custom Silicon中实现,并且不是性能的障碍。
尽管如此,但下一步就是进入另一个方向:用通用处理器替换ALU和FPGA。通过添加更多CPU和更多的总线来尝试缩放。这需要大量努力进行小的增量收益,并且仍然受到集中式总线带宽的限制。
在互联网演变的这一点上,更大的力量进入了戏剧。随着网络在热门的想象中起飞,互联网的巨大潜力越来越明显。 Telco获得了NSFnet区域网络,并开始部署商业骨干网。特定于应用的集成电路(ASIC)成为可靠的技术,允许直接在硅中实现更多功能。对路由器的需求飙升,并且对剧烈可扩展性的需求终于不堪重负工程保守主义。许多初创公司突出了满足这种需求,具有各种潜在的解决方案。
在此架构中,每个NIC都是输入和输出。 NIC上的处理器使转发决定,选择输出NIC并向横杆发送调度请求。调度程序从NIC中拍摄了所有请求,尝试弄清楚最佳解决方案,用其解决方案编程横梁,并提示输入要传输。
此问题的问题是每个输出只能在时间收听单个输入,而Internet流量则突发。如果需要两个数据包进行同一输出,其中一个必须等待。如果必须等待的数据包会导致相同输入的其他数据包等待,则系统将遭受线路阻塞(HOLB)的头部,导致路由器性能非常差。
第3课:即使在压力条件下,路由器的内部面料也需要无阻塞。
迁移到定制硅也鼓励设计人员迁移到基于单元的内部织物,因为执行小型固定尺寸小区的切换比处理可变长度,有时大包的更容易。但切换单元也意味着调度程序必须以更高的,每个单元格速率运行,使调度更加困难。
这里,每个NIC都有链接到四个邻居,并且输入NIC必须计算跨面料的路径到达输出线卡。这有问题 - 带宽并不均匀。南北方向的带宽比在西方方向上有更多的带宽。如果输入流量模式需要进入东西,则随后拥堵。
第4课:路由器的内部面料必须具有统一的带宽分配,因为我们无法预测交通的分配。
一种非常不同的方法是将NIC的全网格创建到NIC链接和在所有NIC中分发单元格:
尽管先前的经验教训,但新的问题来了光明。在这种架构中,一切都很好地工作,直到有人需要更换卡进行维修。由于每个NIC持有的细胞为系统中的所有数据包,当拉动卡时,可以重建任何数据包,导致简要但痛苦的中断。
这里,所有数据包都流入中心存储器,然后向输出NIC流出。这相当好,但缩放记忆是一项挑战。您可以添加多个内存控制器和内存库,但在某些时候,聚合带宽对于物理工程师来说太多了。跑进实际的物理限制迫使我们在其他方向上思考。
我们在电话网络中找到了灵感。 Charles Clos很久以前意识到可以通过构建较小的交换机的网络来构建可扩展的开关。事实证明,我们所需要的所有精彩属性都存在于CELL网络中:
我们始终将输入和输出一起实现,因此我们通常在虚线上折叠此图片。这产生了折叠的CLOS网络,这是我们今天在多机箱路由器中使用的,其中一些机箱充满了NIC和一层交换机,以及带有附加开关层的机箱。
不幸的是,即使这个架构也没有没有问题。交换机之间使用的单元格格式为芯片供应商专有,导致芯片组锁定。与芯片供应商绑定并不是与单个路由器供应商相关联,具有类似的单源定价和可用性问题。硬件升级是具有挑战性,因为新的单元格交换机必须同时支持传统链接和单元格格式以互操作以及任何升级链路速度和单元格格式。
每个单元格必须具有地址,指示它应该流到的输出NIC。该寻址必须有限,导致可扩展性的上限。迄今为止,多底盘的控制和管理是完全专有的,为软件堆栈创建了另一个单一供应商问题。
幸运的是,我们可以通过改变我们的建筑哲学来解决这些问题。在过去的50年里,我们一直在努力扩大我们的路由器。我们从建立大云层的经验中学到的是,扩展哲学经常更加成功。
在横向扩展的架构中,而不是尝试构建一个巨大的,非常快的单个服务器,为什么不划分和征服?充满较小服务器的机架可以做同样的工作,同时也具有更具弹性,灵活和经济的。
当应用于路由器时,思维是相似的。我们可以采取一些较小的路由器,并在拼接拓扑中安排它们,以便我们具有类似的架构利益,但避免基于细胞的问题?事实证明,没有过于困难:
通过用数据包交换机(例如路由器)替换单元开关,并保留拼盘拓扑,我们确保我们具有简单的可扩展性。
我们可以以两个维度缩放:通过添加更多的输入路由器和分组交换机与现有图层并行,或通过添加其他交换机层。由于各个路由器现在相对通用,避免了供应商锁定。链接是所有标准以太网,因此互操作性没有问题。
升级是直接和简单的:如果在交换机上需要更多链接,则在更大的开关中交换。如果需要升级给定链接并且链路的两端都有能力,那么它只是简单地升级光学器件。当每个路由器充当速率匹配设备时,在织物内运行非均相链接速度是非问题。
这种架构已经在数据中心世界中常见,并且被称为叶子脊柱或超脊柱架构,具体取决于交换机的层数。它已被证明是非常坚固,稳定和灵活的。
从转发平面透视中,很明显这是一种可行的替代架构。保留的问题适用于控制平面和管理平面。缩放控制平面需要在我们的控制协议的规模中提高大量提高。我们通过创建架构的代理表示来改进我们的抽象机制来实现这一目标,将整个拓扑作为单个节点代表整个拓扑。
同样,我们正在努力开发管理平面抽象,使我们能够将整个晶面料控制为单个路由器。这项工作正在作为开放标准进行,因此涉及的技术都没有专有。
在过去的50年中,路由器架构已经符合拟合并开始,并且随着我们导航技术之间的权衡,而且有许多误操作。很明显,我们的进化尚未完成。通过每次迭代,我们已经解决了前一代的问题,并发现了一套新的关注点。
希望通过仔细考虑我们的过去和现在的经验,我们可以通过更灵活和强大的架构前进,并在没有叉车升级的情况下进行未来的改进。
Tony Li一直是互联网路由的先驱30年,有助于扩展互联网架构并领导BGP和CIDR的部署。