点击上方蓝字关注我们

多年以前,由于基于传统协议的控制平面缺乏灵活性,无法满足多样的业务对数据平面的转发需求,软件定义网络(SDN)被提了出来。业界希望通过一种转控分离、开放解耦的架构,让网络资源能够被上层应用通过标准的API,更加灵活的按需分配。在这种架构下,SDN控制器提供北向接口给上层应用,实现网络资源的动态管理;并通过OpenFlow、NETCONF、SNMP、RESTCONF等南向接口控制底层网络设备数据平面转发行为及设备管理。可见,SDN控制器的架构以及南向接口是SDN的关键技术点,不夸张的说,这两方面是决定整个SDN方案成败的关键因素。在控制器领域,尽管OpenDaylight,ONOS和Ryu等开源系统已经逐渐被各个厂家和用户所接受,但由于南向接口OpenFlow的天然缺陷以及单体架构控制器的日渐臃肿,使得基于传统架构和技术的SDN解决方案,迟迟无法达到最初的设计理念,很难适应业务对网络的需求。

从本期开始,小编将连续出三篇系列文章,以ONOS(开放网络操作系统)为例,详细分析控制器的架构、网络设备可编程接口的发展趋势,解析以去中心化、云原生、协议无关为设计目标的下一代SDN体系结构,并分享星融在这方面的最新实践。

什么是ONOS?

ONOS是领先的开源SDN控制器,被广泛应用于构建下一代SDN / NFV解决方案。它为SDN提供控制平台和管理网络的组件(例如交换机和链接),并运行网络应用程序提供通信服务。如果您熟悉传统的嵌入式交换机操作系统,则会发现ONOS可以管理整个网络而不是单个设备,可以大大简化多台交换机的软硬件配置管理和部署。如果您熟悉SDN控制器,则应该感到宾至如归,因为ONOS是一个可扩展的模块化的分布式SDN控制器。

接下来我们看看ONOS的设计原则和总体架构。

ONOS的设计遵循四条基本原则:

第一,高可用性,高可扩展性和高性能;

第二,要对网络资源进行高度抽象并简练地表示出来;

第三,要做到协议无关及硬件无关;

第四,网络应用程序的模块化。

图1 ONOS的总体架构

ONOS整体架构可分为三层,分别为:

1、北向接口(NBI),应用程序使用这些接口来了解网络状态(例如遍历拓扑图、拦截网络数据包),并控制网络数据平面。

2、分布式核心,负责管理网络状态,并将状态的变化通知给网络应用程序。核心层内部使用的数据库是可扩展的分布式键/值存储数据库Atomix。

3、南向接口(SBI),由共享协议库和特定设备的驱动程序构成的插件集合。

接下来我们主要介绍下分布式核心和南向接口层如何通过P4runtime协议与设备交互。

分布式核心

ONOS分布式核心由许多子系统组成,子系统负责网络拓扑、主机跟踪、数据包拦截、流编程等的维护和管理。主要的子系统有:

  • Device Subsystem- 管理网络设备集群

  • Link Subsystem- 管理网络链路

  • Host Subsystem- 管理主机及其在网络上的位置

  • Topology Subsystem- 管理网络拓扑及实时状态的更新

  • Packet Subsystem- 允许应用程序收发业务报文(从/往网络设备)

  • Path Subsystem-计算/查找网络设备之间或终端主机之间的路径

  • FlowRule Subsystem- 管理网络设备的流表规则

这些服务大多是使用分布式表(映射)构建的,而这些表存储在atomix数据库中,接下来让我们来看下Atomix数据库。

它可以跨一组分布式服务器进行扩展,并实现故障时的容错处理。Atomix是构建分布式系统的通用工具,它是一个基于Java开发的系统,其支持以下功能特性:

  • 分布式数据结构,包括maps、sets、trees、counters

  • 分布式通信,包括直接消息传递和发布/订阅

  • 分布式协作,包括locks、leader elections、barriers

  • 管理群组成员

Atomix在ONOS中的一个重要作用是协调ONOS的所有实例,主要体现在两个方面:首先,ONOS具备水平可扩展的能力,在任何时间运行的ONOS实例的数量取决于工作的负载情况和在出现故障时为保证系统可用性所需的备份情况。Atomix group membership原语用于确定可用实例的集合,从而可以检测到已转换的新实例和已失败的现有实例。其次,每个ONOS实例的主要工作是监视和控制网络中物理交换机的子集。ONOS采取的方法是为每个交换机选择一个主实例,只有主实例可以向给定的交换机发出(写入)控制指令,而所有实例都可以监视(读取)交换机状态。这些实例使用Atomix leader-election原语来确定每个交换机的主实例(主控制器)。如果一个ONOS实例发生故障,则使用相同的原语为交换机选择新的主控制器。当有新交换机上线时也采用相同的方法来为其选举主实例。接下来看看ONOS是如何实现对P4Runtime的支持。P4Runtime在传统SDN方案中,OpenFlow一直被看做是控制底层网络数据平面的理想接口之一,但由于硬件支持度不高,在实际部署中并未达到预期效果。P4Runtime作为一种控制器和网络设备之间的数据转发控制接口,和OpenFlow同样具备协议无关性,是一套基于Protobuf和gRPC框架定义的协议。通过P4Runtime协议,SDN控制器可以控制配置支持P4的网络设备。现在P4是数据平面可编程的主流代表,其匹配域和动作域可以任意定制,流表流水线也可以根据网络需求的改变而修改。ONOS是如何支持流水线可变性的呢?首先,ONOS为了解决这个问题,在Core层诸多子系统中横向扩展了一个子系统,叫做PI 框架。PI = Protocol/Program/Pipeline Independent,代表了协议无关、程序无关、以及处理流水线的无关。PI框架是围绕着P4和PSA进行建模的,但PI框架在设计上是面向通用的协议无关思想的,能容纳未来各种协议无关的语言或者协议,目前仅仅是适配到了P4语言。PSA(Portable Switch Architecture)就是P4设备的一个通用架构描述,类似OpenFlow的TTP(Table Type Patterns)。PI架构里包含了一些类、服务和设备驱动的功能描述来建模和控制可编程数据平面,定义了抽象的表项和计数器等等。图2:  PI框架在ONOS中的架构设计首先,最底层是协议插件,有P4 Runtime和gRPC;往上一层是Driver子系统,有P4Runtime、Tofino和BMv2等;最上层是核心层也是PI框架核心所在,它包含了PI模型、FlowRuleTranslation子系统和还有Pipeconf子系统等三大模块。而流水线流表可变性 实现的关键,就是这个FlowRuleTranslation子系统,下文统称为“流表翻译子系统”。PI框架向上既可以支持pipeline无感知的应用,比如之前针对OpenFlow设备编写的程序 ;也可以支持对Pipeline有感知的应用,也就是针对特定的P4程序编写的控制应用。接下来介绍下流表翻译子系统:

图3 FlowRule Translation

PI框架里的流表操作涉及到三个阶段的转换操作,分别对应Pipeliner、Interpreter、P4Info这三个元素,也就是上图中的蓝色部分,是我们pipeconf(.oar)应用里的内容。如果我们使用FlowObjective来下发决策,就会经过Pipeliner把它转换成FlowRule,当然我们也可以直接使用FlowRule。然后P4设备驱动会调用PI框架的FlowRuleTranslation 子系统,借助Pipeline Interpreter把FlowRule转换成PI Table Entry,它是PI框架对一条表项的抽象。最后PI Table Entry会在南向协议插件的P4Runtime Client中借助P4Info转换成P4 Runtime Message这个通信报文,然后在网络中传递给P4设备。如上图3所示,流表操作主要就是三次转换。介绍完分布式核心和P4Runtime,让我们来看看ONOS的发展现状。ONOS的发展现状随着ONOS 2.0版本的发布,当今的ONOS架构提供了一个稳定的基础平台,包含了许多的功能特性,例如简单的第三方应用开发、轻松的分布式集群部署、服务自动导入、已存在大量的第三方应用和拓展组件。但是,ONOS架构当前也同样存在一些限制,比如有限的资源隔离、基于平台的应用仅支持java或JVM-based语言开发;比如应用/服务水平扩展困难、组件无法迁移到平台之外(控制平面功能无法卸载到设备);再比如与NFV的集成受限且对NFV的支持也同样有限等等。尽管上述限制在本质上都是技术性的,但它们还是限制了ONOS在一些重要的行业场景中的应用,因此我们必须解决ONOS的这些限制。ONF(Open Network Foundation)正在开发一个新的开源架构Micro ONOS(µONOS)以提供真实网络控制、零接触配置和可验证/安全的网络,并使运营商可以完全控制其网络 ,这也是下一代SDN的发展趋势。那么µONOS架构到底如何呢?下篇文章再做介绍。

点点在看行不行


modbus报文解析实例_云原生、全栈可编程的下一代SDN解析与实践 (一)丨传统SDN架构演进...相关推荐

  1. 新氧云原生全栈数仓最佳实践

    简介: 新氧数据中台数据研发部总监 高宏超:自建大数据平台面临困难与挑战,我们从成本.安全.资产管理及组件可扩展性等综合考量后决定整体迁移到阿里云,上云后,总体资源成本降低30%,性能上提升2-3倍, ...

  2. 重大升级!灵雀云发布全栈云原生开放平台ACP 3.0

    云原生技术的发展正在改变全球软件业的格局,随着云原生技术生态体系的日趋完善,灵雀云的云原生平台也进入了成熟阶段.近日,灵雀云发布重大产品升级,推出全栈云原生开放平台ACP 3.0.作为面向企业级用户的 ...

  3. rds数据加密_如何保障云上数据安全?一文详解云原生全链路加密

    导读:对于云上客户而言,其云上数据被妥善的安全保护是其最重要的安全需求,也是云上综合安全能力最具象的体现.本文作者将从云安全体系出发,到云数据安全,再到云原生安全体系对全链路加密进行一次梳理,从而回答 ...

  4. 企业深入使用微服务后会面临哪些问题?云原生全链路灰度给了新思路

    作者:魁予.十眠 如何落地可灰度.可观测.可回滚的安全生产三板斧能力,满足业务高速发展情况下快速迭代和小心验证的诉求,是企业在微服务化深入过程中必须要面对的问题.在云原生流行的当下,这个问题又有了一些 ...

  5. 如何保障云上数据安全?一文详解云原生全链路加密

    对于云上客户而言,其云上数据被妥善的安全保护是其最重要的安全需求,也是云上综合安全能力最具象的体现.本文作者将从云安全体系出发,到云数据安全,再到云原生安全体系对全链路加密进行一次梳理,从而回答:在云 ...

  6. 阿里巴巴mysql集群方案_云原生下,如何实现高可用的MySQL?

    简介: MySQL 作为当前比较受欢迎的关系型数据库(RDS),在云原生浪潮中仍然面临诸多挑战.如何用 Cloud Native 的设计原则,通过沙箱隔离.计算和数据的完全分离,实现低成本.可扩展.高 ...

  7. mysql云化方案_云原生下,如何实现高可用的MySQL?

    简介:MySQL 作为当前比较受欢迎的关系型数据库(RDS),在云原生浪潮中仍然面临诸多挑战.如何用 Cloud Native 的设计原则,通过沙箱隔离.计算和数据的完全分离,实现低成本.可扩展.高可 ...

  8. 蚂蚁集团俞仁杰:金融级云原生之多活容器集群高可用建设实践

    本文整理自蚂蚁集团金融云产品技术部SOFAStack产品专家俞仁杰在2020 GIDC全球互联网数据大会的分享.详细讲解了云原生架构下的多活高可用平台和产品建设相关经验和观点. 过去几年是云原生理念高 ...

  9. 云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇

    ​作者:​智妍(郑妍).​浣碧(何颖)​ 什么是混沌工程,云原生大潮下的混沌工程特点 通过使用云计算厂商如阿里云.AWS 等提供的服务,现代服务提供者得以用更低廉的成本,更稳定地进行丰富的软件服务提供 ...

最新文章

  1. 心跳实现_真强啊!建议每一位Java程序员都读读Dubbo心跳设计的源码...
  2. 【手写系列】写出我的第一个框架:迷你版Spring MVC
  3. 嵌入式杂谈之makefile补充
  4. AnySDK项目实战教程
  5. Android开发之异步消息处理机制AsyncTask
  6. 非极大值抑制(Non-Maximum Suppression)
  7. chrome保护眼睛设置【转】
  8. QT5/C++项目:基于QT的跨平台网络对战象棋(二)(推荐★★★★)
  9. 并行计算、分布式计算、网格计算讲解
  10. 【Layui+Vue】动态获取表格cols数据并加载
  11. python爬虫实践之下载轻音乐
  12. 发布新一代微控制器 AURIX 2G 的背后,半导体巨头英飞凌如何应对汽车行业变革?...
  13. 火星超大nasa开源全景图分享
  14. 狄克斯特拉算法——python实现
  15. PG之pg_repack使用
  16. GMSL高带宽视频数据接入的方法
  17. 三极管打造树莓派温控风扇
  18. 视频倒退编辑android,视频倒放剪辑软件下载-视频倒放剪辑 安卓版v2.6.3-PC6安卓网...
  19. 震惊!!!一个关于c语言图形化界面编程的小游戏
  20. 现在学计算机好还是学电竞好,学电竞有发展前景吗?

热门文章

  1. 用JavaScript fetch API取数据遇到CORS policy问题
  2. 如何使用Chrome HAR保存和显示HTTP性能分析结果
  3. 使用SAP C4C rule editor动态控制UI上某个按钮是否显示 - SAP Cloud for Customer UI 规则编辑器的使用一例
  4. 医学图像处理期末复习(四)
  5. leetcode60.第k个排列java题解
  6. 计算机辅助教学应用论文,高校计算机辅助教学应用论文
  7. qstring截取一段字符串_笔记 | 自学Python 05:数据类型之字符串
  8. gis环境设置在哪_三维GIS平台的可视化应用 (下)
  9. mysql查看表内容 很乱_mysql常用命令--15.10.14记录,内容有点乱
  10. c# 非顶层截屏_C#中三种截屏方式总结