详解:SONiC演进四部曲

开放网络建立在开放标准(例如OpenFlow协议等)和裸机硬件之上,可以自由选择网络操作系统,只有具备这些条件才能打破软件和硬件在网络层面的固有特性,实现软硬件的分离,提供灵活、可扩展和可编程的网络,以适应不同场景的应用需求。

开放式网络交换机日益普及,并允许部署不同的开源网络操作系统(NOS)。

开放式交换机

通常,交换机可以表示为四个分层组件的堆栈。下图显示了这些组件:

交换机的分层组件堆栈

  • 芯片或ASIC(专用集成电路)是为特定任务而设计的专用硬件元件,对交换机来说,此任务是通过网络快速发送数据包;
  • 硬件层包括交换机的其他所有物理组件,例如接口、输入/输出端口、LED和电源;
  • 网络操作系统(NOS)控制硬件和底层ASIC以用于联网,并允许控制和管理平面应用程序使用硬件;
  • 除了底层操作系统的功能外,控制平面和管理平面应用程序还为交换机用户提供了特定的功能。

为了理解开放式交换机与传统交换机之间的区别,需要考虑上述组件彼此交互的方式。传统交换机交付时预安装了无法更改的软件,无法独立更改。而开放式交换机解耦了NOS和底层硬件,可以彼此独立地改变,因此,开放式交换机让用户拥有更多的选择权去运行什么NOS。

随着开放式交换机的市场份额增长,人们对开源的网络操作系统需求也越来越强烈。

开源网络操作系统——SONiC

SONiC (Software for Open Networking in the Cloud) 是微软基于 Debian Linux 打造的一款开源网络交换机操作系统,声称包含了第3层网络设备的所有功能,SONiC Object Library3允许外部应用程序彼此交互并与SONiC应用程序交互。

由于微软运行着世界上最大的网络之一,因此其对SONiC提出了严格的要求:

1. 可以实现新特性,而又不影响最终用户。由于SONiC由多个容器组成,每个容器都包含用于部署特定网络功能(例如BGP、LAG)的资源,因此,当某个功能存在更新或bug时,只需更新一个容器即可,而不是替换整个交换机映像(这将导致数据平面停机)。这使得SONiC适用于在部署更新时不允许停机的情况。

2. 可以在最新的硬件平台上使用。由于SONiC使用SAI,因此数据中心可以不断地更新交换机硬件,而无需更改软件堆栈。因此,SONiC适用于那些可能会定期更改硬件的用例。

3. 云级深度遥测和全自动故障缓解。SONiC具有NetBouncer和Ever ow等创新产品,可以部署NetBouncer来自动准确地检测大型数据中心内的故障设备或链路,Ever ow可以调试多个网络故障,如丢包或循环。此外,它可以快速识别在网络中引起高延迟的设备。 简而言之,SONiC适用于必须持续监控以自动响应潜在问题的大型网络用例。

SONiC组件概述

SAI(Switch Abstraction Interface)

上文说过ASIC旨在处理特定任务,在网络交换机中对ASIC进行了设计和优化,以根据路由表快速处理传入的数据包。为了使NOS能够对ASIC进行编程,已经开发了几种API与ASIC进行通信。

作为大众熟知的方法之一,交换机抽象接口(SAI)是一个跨平台的交换机平台接口,该接口定义了标准化的API,可以对软件进行编程以用于多个不同的交换机,而无需进行任何更改SAI在所有硬件上运行相同的应用程序堆栈,这使得 SAI 接口具备简单性,一致性。SAI向上给SONiC提供了一套统一的API 接口,向下则对接不同的ASIC。

SONiC日渐成为构建开放网络的钥匙,SAI则是实现钥匙的标准模具,SONiC通过将SAI作为南北向互联的中间件,屏蔽了不同ASIC之间的驱动差异,也正是由于SAI的存在,SONiC的网络功能应用才能够支持多个厂家的ASIC。

Switch State Service

交换机状态服务(SwSS)是软件的集合,该软件提供数据库接口,用于与网络应用程序和网络交换机硬件进行通信并进行状态表示。SwSS允许在SONiC上运行的网络应用程序完全独立于它们所运行的硬件,下图显示了SwSS的体系结构:

SwSS架构

Quagga

路由套件是控制平面软件的集合,它们使用多种路由协议在网络操作系统之上运行。路由套件与其他路由器交换路由信息,并在内核中更新路由信息。Quagga是路由套件的示例,它为SONiC提供了BGP路由功能,是开源的。

SONiC设备上存在两个主要的Quagga进程:BGPd(BGP daemon的缩写)和Zebra。下图显示了当收到一条新的BGP路由信息时,Quagga和SONiC是如何相互作用:

Quagga确定是否应在路由表中放置新路由,然后SONiC负责更新内核路由表

SONiC子系统交互

SONiC系统的体系结构包含各种模块,这些模块通过集中式和可扩展的基础结构相互交互。SONiC将每个模块放置在独立的docker容器中,以保持semantically-affine组件之间的高内聚性,同时减少相互分离的组件之间的耦合。

下图显示了每个Docker容器中包含功能的高级视图,以及这些容器之间的交互方式。

LLDP-状态相互作用

下图描述了在LLDP状态转移期间观察到的一组相互作用:

SNMP状态交互

snmp容器既托管snmp主代理(snmpd),又托管SONiC特定的agentX进程(snmp_subagent)。该子代理与所有提供可提供MIB状态信息的redis数据库/表进行交互。下图描述了在系统处理传入的snmp查询期间,各种SONiC组件之间的典型交互:

端口状态交互

下图描述了与端口相关的信息传输期间发生的系统交互:

关于SONiC子系统交互的详细信息以及具体过程可以查看:https://github.com/Azure/SONiC/wiki/Architecture

SONiC的演进历程

SONiC自推出以来在不断发展更新,目前已经有超过10家的云厂商和一些大型企业都采用了SONiC作为他们的交换机操作系统,而微软和阿里巴巴就是其中的两大巨头。

2016年,微软推出SONiC及其配套的交换机抽象接口(SAI)时,就在Linux内核上的容器中运行了第二层和第三层交换功能,并带有用于遥测的Redis数据库。该软件可在多个ASIC上运行,包括Broadcom的Trident 2、Mellanox的Spectrum、Cavium的XPliant(现在是Marvell的一部分)和Centec Networks的GoldenGate。这些主要用于40 Gb/s的交换机。

2017年,增加了Broadcom的Tomahawk、Tomahawk 2 ASIC、Marvell的Prestera、Barefoot的Tofino,主要用于100 Gb / s的交换机,大约有16种不同的平台可供使用。并且,RDMA和QoS功能也通过Swarm(旧的Docker工具)管理添加到了SONiC堆栈中。

2018年,SONiC有了另一个重大飞跃,虚拟化技术被添加到了容器支持中,并在流式遥测和新的配置数据库中添加了热重启(不到1秒)。并且,还添加了ARM计算支持,平台列表增加到31台不同的计算机,包括基于Nephos的Taurus芯片、Broadcom的Helix 4、Trident 2、Tomahawk 3芯片、Cisco的Lacrosse芯片(用于高端Nexus 9000交换机)。

2019年,SONiC增加了对Broadcom Jericho和Jericho 2深度缓冲器(deep buffer)交换机ASIC的支持,以及对Innovium的Teralynx 7、Marvell的Falcon、Mellanox的Spectrum 2 ASIC的支持。平台的基础增加到了69种不同的计算机。另外,微软与SONiC社区合作增加了对模块化交换机的支持。今年,思科将它的Silicon One商用路由器芯片添加到了SONiC中。

如今SONiC已走过了四个年头,市场占有率也在不断增加,但仍面临来自Stratum、DANOS和DENT等开源NOS的激烈冲击,未来SONiC能否继续扩大优势,占据头把交椅?

由江苏省未来网络创新研究院主办、SDNLAB承办的“2020 SONiC产业生态研讨会”将于9月19日进行线上直播,会议将邀请来自芯片公司、白盒厂商、传统数通厂商、互联网公司、测试厂商、研究院所等的专家学者共同探讨网络操作系统SONiC产业生态的行业分享,共同创造更繁荣的新一代开源网络生态。

大家也可添加SDNLAB酱的微信,回复“SONiC”,拉你进本次会议交流群哦~

参考链接:
https://github.com/Azure/SONiC/wiki/Architecture
https://mp.weixin.qq.com/s/sAXZouqy-t-Ozf4Iivoh7w
白皮书:Open-source network operating systems: feature evaluation of SONiC


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/24408.html
分享到:
相关文章
条评论

登录后才可以评论

大脸肥飞猫 发表于20-09-09
1