“我们的网络连接着数百万台服务器、数千万个虚拟机,要具备高性能和低延迟的能力支撑一张非常大规模的网络。在这么大规模的网络之上,我们每天都数以秒计的产生很多业务信息、网络信息和网络数据,我们必须有足够的能力去及时处理。对于故障的发现、恢复和隔离,要能够做到快速有效的保障,这些取决于我们如何构建底层的基础设施。”在OCP China Day 2019(开放计算中国日)上,阿里巴巴高级专家刘永锋谈到了阿里集团在承载海量的业务需求时,所遇到的网络挑战。 说到阿里巴巴,相信很多人都会想到一连串的熟悉名字:天猫、淘宝、支付宝、优酷、高德、阿里云等等,在这些平台上每天都在发生了数以亿计的业务响应,要想为全球的用户提供高质量的使用体验,网络作为传输信息和数据的管道,扮演着至关重要的角色,而相应的,超大规模的业务范围也带来了“超大规模”的挑战。其原因在于,用户的需求无时无刻都在变化,并且这种动态的需求不受时间、空间、地域的限制,需要基础设施具备“秒级”的反应能力。 让网络变得有智慧,是近年来不管是ICT厂商、CSP、ISP都在思考并辅助实践的发展思路,而OS可谓是硬件基础架构的“大脑”。早在2016年的OCP峰会上,微软就正式发布了基于Debian GNU/Linux的开源交换机操作系统——SONiC,实现了数据控制面与转发面的分离,用户可以采购白牌交换机搭载SONiC实现不同的网络功能,SONiC使得用户能够更快的调试、修复并测试软件,通过改变软件策略和拓扑实现新的网络架构,让网络实践更为灵活。而在更早一年的3月,微软同样是在OCP峰会期间,向OCP贡献SAI (Switch Abstraction Interface,交换机抽象接口)。那一年的7月,OCP正式接纳了SAI。 SONiC向AI更进一步 一直以来,在数控分离层面的争议都没间断,完全集中式或完全分布式的解决方案都被认为过于激进,让数控具备编程能力,同时又可以分离之后集中控制,是不少人都看好的一个方面,这或许也是SONiC的初衷之一。Microsoft Open Technologies开放了微软管理硬件操作的软件代码,例如服务器诊断,电源供应、风扇控制等等,这种开源的特性自然也延续到了SONiC,即所有软件功能模块都是开放的,可在GitHub上随时取用,不仅可以让用户在数小时内获得更新,还能够利用云端的能力进行深度遥测和自动化故障处理。 “我们希望让大家记住SONiC的两个特点。”Microsoft Principal Product Manager Xin Liu在OCP China Day的主题演讲中说,“第一,它是基于SAI的,在没有SAI之前所有芯片都要通过自己的SDK与上层的软件通信,相当于用自己的‘方言’跟上层的操作系统通信,SAI把这个‘方言’标准化,大家的芯片用同样的语言与上层的控制软件交流,因为有了SAI,所以才能建立一个操作系统。” 尽管SAI本身没有完全开源,但其却为SONiC提供了统一的API 接口,向下可以对接不同的ASIC。试想,如果没有SAI,那么就需要白盒交换机厂商自行适配不同的ASIC。有了SAI之后,适配ASIC的工作就由芯片厂商完成,使得白盒交换机厂商推出一款新产品所花费的时间大大缩短。 “第二,SONiC可以带来很多好处。”Xin Liu谈到,“首先,能够让使用者很好的使用所需要的功能,或者将性能最好的东西放在操作系统中。其次,SONiC有很好的扩展性,使用者无论需要增加新的功能,还是改变一个Docker,还是开发新的东西,都不需要做太大的变化,只需要对一个局部做出改变。”可以看到,依托于Linux、Docker生态的SONiC在过去三年已经孕育了丰富的管理软件和解决方案,而其自身也与Redis,Quagga、LLDPD等开源技术碰撞出了更多的火花。 2016年正式上线的时候,SONiC的理念就是将传统交换机OS拆分成多个容器化组件的解决方案,进而也定义了控制面的容器化架构,囊括了组件和编程接口。2017年微软对SONiC的性能进行了大幅升级,全面支持IDV,并且融合了更多的容器特性。2018年微软又在管理性上下了大力气(如ConfigDB),让使用者用起来更加从容。未来,SONiC还会在深度学习等AI特性上做更多的尝试。 与开源生态密不可分 有了SAI,SONiC可以在确保与ASIC编程接口一致的情况下,不仅能提升速度和效率,还可以支持多个不同的ASIC,让ISP的硬件创新可以在不同平台上实现统一的软件优化。基于Azure的全球数据中心,与SWSS整合之后的SONiC可以直接管理交换机状态。如果所部署的容器出现问题,也可以调用代码来进行升级,而不是更换交换机镜像,省去了不少麻烦。尤其是面向云数据中心,乃至未来的软件定义数据中心,SONiC可以最大限度简化运维人员的管理/配置工作量,就能做到网络使用场景的定制化。 近两年,有越来越多的合作伙伴加入了SONiC的生态,像Canonical使用SONiC作为Ubuntu的快照;Docker通过Swarm来管理SONiC容器,使其具备了大规模更新的能力;Mellanox使用SONiC来辅助Spectrum ASIC基于硬件的数据包生成功能,实现了故障诊断和故障排除。正是有了这么多的伙伴支持,SONiC在完善白盒交换机生态链的影响力被进一步放大,自然也就吸引了OCP的认可。 在OCP China Day上,笔者看到了SONiC的一些新成果。“我们要把原有的Chassis黑盒子打开,仍然有前端和后端的芯片,中间是用一个标准的以太网相连,我们是在用连接构建数据中心的方法构建Chassis内部网络,网管可以运营数据中心内部的网络。”来自微软研究院的Bai Wei说。 Bai Wei谈到,在构建Chassis过程中,微软借鉴了很多传统Chassis的优点,“我们把Chassis的功能放在红色的芯片上,让前端的SONiC互相通信,广播路由信息可能后端的SONiC完全不知道,如果前端SONiC互相知道路由信息,那么他们怎么把包转发给彼此?我们用了一个虚拟化隧道,一个前端收到一个包以后,实际上每家网络的需求和痛点不一样,但是在SONiC的开放平台上就可以定制出一款让用户满意的解决方案。” Xin Liu表示,SONiC下一步要吸引更多的团队成员加入,以及融入到更多IT公司的网络中,同时也要在2019年开始商业服务,让SONiC支持更多的业务,“我们做了这么多工作和成绩,与我们的合作伙伴密不可分。” 阿里的SONiC构想 Xin Liu所说的合作伙伴,自然是包括阿里巴巴。就像文章开头所说的,阿里巴巴业务规模高速成长的背后,同样衍生出了一部网络进化史。2014-2015年,阿里将更多的网络研发精力放在纯软件优化上,引进了像DPDK这种用户态的协议栈优化性能,在交换机上尝试用独立软件运行在一个裸金属转换器上,让软硬件实现自主可控;2016-2017年,阿里逐渐使能硬件架构,网关快速进入到400G时代;2018-2019年,软硬件融合的趋势加剧,处理器的可编程性对于业务灵活性起到了重要作用。 可以看到,从纯软件到快速的硬件演进,再到软硬件的高度融合,一个崭新的网络基础设施的技术时代正在来临。用刘永锋的话说,在背后要有一个算法驱动AI驱动的调度系统去管理网络资源。由于SONiC的网络应用都是基于容器构建的,可以非常方便的在生产环境实现不停机部署或升级应用,从实现方式来讲更贴合互联网企业需求,自然也吸引了BAT的关注。 2017年,由阿里巴巴、腾讯、百度、京东、中国移动和中国联通共同参与的“凤凰项目”成立,项目以SONiC开源社区为依托,选取社区稳定的SONiC版本软件,并将Base OS、SAI、平台驱动等共同打包制作成可直接加载运行在白盒交换机的网络OS映像文件,网络OS映像文件即凤凰发行版。 “凤凰项目”的目标是推动“白盒+开源OS”的网络生态发展,促进国内开放网络和SDN网络的进步。项目除了关注发行版之外,还在软硬件兼容性测试评估、运维管理体系等方面进行探索。其中,社区软件评估及发行版制作主要由阿里巴巴负责,发行版软硬件兼容性主要由腾讯负责,运维管理体系主要由百度负责,测试验证工作主要由中国信息通信研究院完成。 自加入SONiC之后,阿里与社区合作围绕其对网络的需求和通用或定制化能力进行了大量的贡献,由阿里运行的SONiC版本和社区版本是同步更新的。基于不同地域、不同场景的用户需求,阿里也在业务实践中带来了不少创新,例如把北向接口简化,使其不仅可以做状态的获取,还可以做配置下发,形成了统一的GRPC通道。 一方面,阿里可以借助SONiC建立网络架构系统,在运维时自动线上变更之前可在线下做软件升级和配置变更的演练,大幅提升网络稳定性和可用性。另一方面,也可以针对可用性敏感的区域,基于SONiC在故障发生之后或者要做软件升级的时候,通过服务器和交换机实现端到端的定制,做到无损隔离,甚至是零丢包。 正如刘永锋所讲到的,正是因为有了SONiC这样的开放系统,让阿里将很多之前的不可能变成了可能,“借助OCP平台,非常感谢能有这样一个组织让我们大规模的互联网用户分享对于网络运维的需求、软硬件的需求和思考,也非常欢迎大家加入到SONiC社区,我们希望能够把SONiC变成数据中心网络甚至未来边缘计算的一个实施上的标准。”