一个白牌厂商视角:极简交换机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在架构上进化为使用通用的数据库,容器虚拟化技术,支持高速迭代,某种意义上设备商是不是也可以称自己是互联网公司了。
作者:成伟
来源:51CTO

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
微信小程序架构分析 (上)
【引自第九程序的博客】相信不少上手试用了微信小程序开发者工具的开发者都会对其实现有些疑惑, 本文试图对其架构模型进行一些解析。如有错误之处,欢迎留言指出。 本文分为以下几个部分: 小程序调试技巧 小程序主要模块构成 小程序模块间通信 设计理念分析 小程序调试技巧 微信开发者工具默认禁用了右键打开调试面板功能,我们可以修改开发者工具部分代码移除该限制。 找到 app.nw 项目根目录,Mac 下为/Applications/wechatwebdevtools.app/Contents/Resources/app.nw 使用 js-beautify 对代码批量格式化: cd/Applications/wechatwebdevtools.app/Contents/Resources/app.nw find.-typef-name'*.js'-not-path"./node_modules/*"-not-path"./modified_modules/*"-execjs-beautify-r-s2-p-f'{}'\; 注释掉文件 app/dist/app.js 44 行和app/dist/co...
- 下一篇
“移动优先”背景下如何推进移动化建设
在经历概念形成期、应用试水期之后,移动化部署正在政府、军队、军工、大型企业等组织中得到快速普及,“移动优先”也相应地成为越来越多的组织在推进信息化建设过程中所遵循的原则。这不仅意味着组织将移动化工具引入到组织运营管理之中,也意味着组织IT架构可能面临全新变革。 “移动优先”成为流行趋势 “移动优先”的概念之所以会得到普遍认可,关键原因是移动智能终端广泛普及以及移动应用的迅速落地。正是因为如此,让移动互联网成为组织以及个人用户获取信息、与外界进行交互的主要方式之一。目前移动数据流量已经超过PC数据流量,由此可见,要适应信息化终端的移动化转变,首先需要从理念上落实移动化的需求。 对于组织来说,在组织内部推行移动化的压力虽然要小很多,但是趋势却是难以避免。究其原因,是源于移动设备在组织运营管理流程中的逐步渗透。根据Tech Target的介绍,这是一种“工作习惯的变化趋势,会有越来越多的员工在办公室外工作,他们会在执行业务、任务的过程中使用各种移动设备和云服务”。这意味着不需要迫使员工做任何事,不过组织依然需要解决一些具体的问题,尤其是围绕可用性、安全策略,以及成本方面的问题。 对于政府、军...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果