SONiC作为一个开源项目,理论上是包含了SAI(switch abstraction interface,交换机抽象接口),SAI是没有开源的,厂商自己完成统一的API,提供给上层sonic用户来调用,发布出来是二进制形式,并没有真正实现开源。
另一方面SONiC和SAI是两个部分,首先微软是统一了API接口,厂商按照微软的API接口来使用二进制实现。
 
 
SONiC项目的发展及其相关介绍
SDNLAB君• 18-03-19

作者简介:郑敏先,任职于诺云信息系统(上海)有限公司,担任售前工程师。从事SDN、白盒交换机和云计算相关产品的推广工作。

在2015年3月举行的OCP(Open Compute Project,开放计算项目)峰会上, 微软向OCP贡献SAI (Switch Abstraction Interface,交换机抽象接口)。当年7月,OCP正式接纳了SAI 。

2016年3月9日,微软在这届OCP峰会上,正式发布了SONiC ( Software for Open Networking in the Cloud)。SONiC的所有软件功能模块都是开源的,推动了OCP社区以及其他厂商在开放网络方面的创新。

SONiC是构建网络设备(如交换机)所需功能的软件集合。它可以通过交换机换抽象接口(SAI)运行在不同的ASIC平台。正是由于SAI的存在,SONiC的的app(网络功能)才能够支持多个厂家的ASIC。

需要注意的是,SAI没有公开源代码,ASIC厂家只提供二进制格式的SAI文件。虽然SAI没有开源,但是SAI向上给SONiC提供了一套统一的API 接口,向下则对接不同的ASIC。

SONiC和SAI支持的ASIC芯片厂商及其对应产品为:

SONiC是一个将传统交换机操作系统软件分解成多个容器化组件的创新方案,这使得增加新的组件和功能变得非常方便。(SONiC路线图 :https://github.com/Azure/SONiC/wiki/Sonic-Roadmap-Planning

SONiC大量使用了现有的开源项目和开源技术,如Docker,Redis,Quagga和LLDPD 以及自动化配置工具Ansible、Puppet和Chef等。

OCP接纳SONiC和SAI,很重要的一点就是看重SONiC能够完善白盒交换机的生态链 。试想一下,如果没有SAI,那么就需要白盒交换机厂商自行适配不同的ASIC。有了SAI之后,适配ASIC的工作就由芯片厂商完成,使得白盒交换机厂商推出一款新产品所花费的时间大大缩短。

前面已经提到过SONiC只是构建交换机网络功能的软件集合,它需要运行在Base OS上。SONiC所使用的Base OS 是ONL (Open Network Linux ) 。ONL是一款为白盒交换机而设计的开源Linux操作系统,ONL中包括了许多硬件(温度传感器、风扇、电源、CPLD控制器等)的驱动程序。

将SONiC和Base OS、SAI、ASIC平台对应的驱动打包制作成为一个文件,这个文件才是可直接安装到白盒交换机的NOS镜像 。SONiC目前已经可以运行在Accton/EdgeCore 、Dell和Mellanox等厂商的白盒交换机上。SONiC社区提供一些制作好的NOS镜像 : https://github.com/Azure/SONiC/wiki/Supported-Devices-and-Platforms

由于SONiC的网络应用都是基于容器构建的,可以非常方便的在生产环境实现不停机部署或升级应用,这一点也吸引了不少的互联网公司的目光。百度、阿里、腾讯等公司于2017年8月成立的“凤凰项目”主要就是细化这个打包工作,并兼容更多白盒交换机,未来还会做LTS模式的版本管理工作。(凤凰项目相关介绍:http://www.opendatacenter.cn/work-group/p-958516783572459522.html)

SONiC项目的发展及其相关介绍(转载)的更多相关文章

  1. 转载:Nginx 相关介绍

    转载自:https://www.cnblogs.com/wcwnina/p/8728391.html Nginx 相关介绍(Nginx是什么?能干嘛?)   Nginx的产生 没有听过Nginx?那么 ...

  2. 寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输

    002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...

  4. Android HttpClient HttpURLConnection相关介绍

    Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...

  5. 大数据入门:Maven项目的创建及相关配置

    目录 Maven项目的创建及相关配置 一.Maven的介绍 1.Maven是什么: 2.Maven作用: 3.Maven项目的目录结构: 4.Maven的三点坐标: 5.maven的pom文件: 6. ...

  6. Spring项目的发展历史和SpringBoot的发展历史

    Spring项目的发展历史和SpringBoot的发展历史 在Java做web应用的服务端开发领域,一直存在着两套技术体系,一套是Sun公司官方推出的JavaEE,另一套是Spring.Spring ...

  7. Vue 封装axios(四种请求)及相关介绍(十三)

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

  8. ppDelegate的相关介绍

    //  AppDelegate的相关介绍//  IOS笔记 //@interface AppDelegate : UIResponder <UIApplicationDelegate>// ...

  9. C#需要在项目程序生成前后执行相关的事件

    分享4: 需求:需要在项目程序生成前后执行相关的事件,比如:需要将某个文件拷贝到bin\Debug中,或者创建某文件夹等. 分析:我们可利用项目属性(选择项目右键,选择属性)中的“生成事件”预定义相关 ...

随机推荐

  1. 转 C# GDI+ 实现橡皮筋技术

    http://www.cnblogs.com/arxive/p/6080085.html 应该有很多人都在寻找这方面的资料,看看下面我做的,或许对你会有所帮助,但愿如此. 为了实现橡皮筋技术,我用了两 ...

  2. maven - 多模块构建

    使用idea创建maven项目 点击next输入GroupId和ArtifactId 点击next创建项目,新建项目结构如下 修改demo打包方式为pom 按层级拆分创建模块model,server, ...

  3. J.U.C之AQS:CLH同步队列

    此篇博客所有源码均来自JDK 1.8 在上篇博客[死磕Java并发]—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一个FIFO ...

  4. iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...

  5. js控制台不同的打印方式

    在控制台单个输出: console.log(...):值 console.info(...):信息 console.debug(...):调试信息 console.warn(...):警告信息 con ...

  6. BKP和RTC

    Stm32内部有多个BKP寄存器,在主电源被切断或者系统产生复位的时候,BKP寄存器仍然可以利用备用电源的支持保持其重要内容. BKP在实际应用中可以存入重要数据,防止被恶意查看. BKP有入侵检测, ...

  7. mysql limit和offset用法

    limit和offset用法 mysql里分页一般用limit来实现 1. select* from article LIMIT 1,3 2.select * from article LIMIT 3 ...

  8. 修改mysql/MariaDB数据库的端口号+远程

    1.修改端口 2.远程+开放端口 (1)设置远程账号:xxx和密码yyyyyyygrant all privileges on *.* to 'xxx'@'%' identified by 'yyyy ...

  9. python txt文件读写(追加、覆盖)

    (1)在lucky.txt中新增内容(覆盖:每次运行都会重新写入内容) f = "lucky.txt" a =8 with open(f,"w") as fil ...

  10. C# 中写得很不错的一段代码摘出来

    private void LikeMyworkEvent(EditedImg img, bool islike) //点赞自己的作品 { if (ApplicationModel.userInfo ! ...