一个白牌厂商视角:极简交换机NOS演进史

传统的交换机操作系统(简称NOS)对大众是一个相对封闭的领域。随着白牌交换机的高速增长,NOS纷纷开源,NOS的开发者也从只有设备商工程师,扩大到互联网,运营商以及云计算的从业者。

NOS的作用是按照管理者的意志将网络中的业务在交换机上运转起来。所以NOS首先需要提供对管理者或者控制器的接口;然后需要运行协议运算,和网络中的其他交换机进行协议面的交互;第三是需要硬件接口来适配交换芯片,风扇电源等板载硬件。如下图,我们可以将NOS拆分为三个核心功能模块,以及基础架构模块。

  • 管理接口,包括传统的CLI, SNMP, WEB功能。SDN引入的Openflow, NET-CONF, OPEN Config,Restful API功能等;
  • 协议应用模块,包括二层的协议模块STP, LLDP, M-LAG,三层的协议模块OSPF, BGP, VRRP等,以及DHCP, NTP等应用模块,SDN时代的Openflow Agent,包括OVS,;
  • 硬件接口上包括对接交换芯片,电源,风扇的管理接口;

具备了以上三个核心功能就算是一个合适的NOS了,但给看一个NOS牛不牛,更要看“基础架构”,它是NOS骨骼和肌肉,NOS的健壮性,延展性都由它决定,NOS演进其实是这个基础架构的的演进历史。

我们将过程分割为两个阶段,第一段是思科,Juniper,Arista的巨头厂商竞争时期,这个时期核心技术集中在设备商手中,是一个技术积累的阶段;第二段是OPS, Sonic和OPX这些开源新势力的时代,喜欢玩颠覆的互联网厂商带着SDN的新需求参与了进来。

巨头之争

原始架构

《Inside Cisco IOS Software Architecture》介绍的IOS架构如上图,框架里还包括软件转发的模块,可见属于非常早期版本。通过蓝色方框去剖析Cisco IOS,可以看到IOS满足了NOS的三个要素,管理接口,协议应用模块,硬件接口。但是在基础架构上还相对原始,没有将管理接口和协议应用模块分开。这个架构更多的是解决有无问题,当时的精力更多的还是在业务模块上。

模块化架构

《JunOS OS for Dummies》中介绍的JunOS的架构如上图,包含管理接口,协议应用模块,硬件接口的同时提出了模块化架构的理念。

The modular architecture of Junos OS allows individual control plane processes to run in their own module (also sometimes called a daemon). Each module has specified processing resources and runs in its own protected memory space, avoiding the processing conflicts that can occur in other platforms.

同样是比较早期的架构,但是通过这个架构可以清晰的看到管理接口和其他模块是分离的,已经有一些控制和转发的分离的意思在里面,但这次演进不是革命性的,更像是从温饱到小康的进步。

Arista的EOS的架构图如上图,EOS最牛的地方就是他的数据库架构,SysDB是一个Key-Value的内存数据库,Arista的核心亮点是能够原生的解决进程级别故障,流程如下:

可以看到进程故障时候,交换芯片继续保持转发,进程恢复后从SysDB重新获取状态继续运行,该功能不但可以保障业务的稳定运行,还可以实现单进程升级功能。记得当时Arista一个典型的DEMO是将正在运行的STP KILL掉进行单进程升级,因为STP的状态都是存在SysDB里的,所以STP进行恢复工作后,业务层面可以做到不感知。数据库架构的演进是一个重大的变革,颠覆了传统的定义数据结构,然后进程间消息通信的传统的架构。开发者可以使用类似开发通用软件的思路进行开发,而且NOS的数据可视化了,大大降低定位问题,解决问题的难度。思科在NX-OS上同样通过Key-Value的内存数据库来实现了HA,如下图:

思科的NX-OS清晰的完成了管理和协议应用分离(排名不分先后),实现了轻量级的Key-Value内存数据库完成了HA Infrastructure,思科在庞大的协议栈包袱下始终不断演进,同样令人钦佩。

新势力

SDN高速发展,白牌产业催生了一批开源开放的NOS,这些新兴的NOS站在巨人的肩膀上,都基于数据库架构,OPS选择了OVSDB,Sonic和OPX选择了Redis,OVSDB和Redis都属于Key-Value的In-memory数据库。但这并没有让新势力满足,SDN要的是更快,更灵活,更大规模,更好扩展。巨头时期的NOS开发周期还是过长,升级还是有点不方便,用惯了动态语言的互联网开发者表示无法接受。数据中心的互联网用户对NOS最痛点的需求是如何流量无感知的完成版本迭代,以及如何更方便,更高效的进行版本升级。

数据库架构 + 容器架构

做公有云的微软自然的想到通过虚拟化重构NOS,将容器技术应用到了NOS。容器技术可以简单理解为:对Linux操作系统来看是容器是一个进程,容器看自己内部是一个轻量级虚拟机。Sonic将各种进程,比如BGP运行在容器中,原生的解决了JunOS提出的模块化问题,更重要是配合数据库架构,由对单进程的升级,变成了对容器的升级,聪明的使用成熟通用的技术解决传统问题。总结整个基础架构发展史如下图:

经过历代演进,NOS已经不再是结构复杂,需要像黑客一样定位问题,产品化周期和芯片差不多的专用操作系统了。现代NOS在架构上进化为使用通用的数据库,容器虚拟化技术,支持高速迭代,某种意义上设备商是不是也可以称自己是互联网公司了。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2017-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

后端程序员都做些什么?

这个问题来自于QQ网友,一句两句说不清楚,索性写个文章。 我刚开始做Web开发的时候,根本没有前端,后端之说。 原因很简单,那个时候服务器端的代码就是一切:接受...

702170
来自专栏数据科学与人工智能

【数据】常用API接口汇总

下面列举了100多个国内常用API接口,并按照 笔记、出行、词典、电商、地图、电影、即时通讯、开发者网站、快递查询、旅游、社交、视频、天气、团队协作、图片与图像...

7.4K110
来自专栏开源项目

码云周刊 | 面试之前,或许该高效率地学点干货!

一周热门资讯回顾 1、程序员多大年纪算高龄,届时该何去何从? ? 随着年龄的增长,程序员会相对难以保持技能更新。许多人宁愿留在自己的舒适区,不冒任何风险。即使...

31460
来自专栏java一日一条

对码农而言什么样的代码才能叫做好代码?

好的代码,就像是好的笑话——无需解释就能让别人明白。如果你的代码能够做到不解自明,在大多数时候,你根本无需为其配备说明文档。

7510
来自专栏Golang语言社区

手游页游和端游的服务端的架构与区别

类型1:卡牌、跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使...

625110
来自专栏IT派

【大数据分析必备】超全国内常用API接口汇总

下面列举了100多个国内常用API接口,并按照 笔记、出行、词典、电商、地图、电影、即时通讯、开发者网站、快递查询、旅游、社交、视频、天气、团队协作、图片与图像...

3.2K10
来自专栏纯洁的微笑

于码农而言什么样的代码才能叫做好代码?

好的代码,就像是一辆配备了优秀音响和杯架的汽车,这辆车在行驶到最高速度的时候,你听不到噪音,也不用担心水会洒出来。在它出现故障的时候,任何一名修理工都可以使用最...

11330
来自专栏高性能服务器开发

5 各类游戏对应的服务端架构

卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:

44720
来自专栏java一日一条

对码农而言什么样的代码才能叫做好代码?

好的代码,就像是好的笑话——无需解释就能让别人明白。如果你的代码能够做到不解自明,在大多数时候,你根本无需为其配备说明文档。

5210
来自专栏云教程

腾讯云在线教育企业上云图鉴

在线教育的互动直播系统上云,能够避免业务侧重复造轮子、提高资源利用率、降低开发和运维成本,且因其基于音视频开源标准和主流方案,能够更容易跟随技术发展的步伐。

26700

扫码关注云+社区

领取腾讯云代金券