OpenDaylight系列文章(三):OpenDaylight初窥(中篇)之OpenDaylight的系统架构


如果说前面的文章是铺垫的“地毯”,那么从本篇开始OpenDaylight就算是正式踩着地毯走来了。在本篇文章中将会给大家简要介绍一下OpenDaylight的系统架构及工程。

OpenDaylight的系统架构

一、“做人的原则”

OpenDaylight(ODL) 在架构设计的时候遵循了六个基本的原则:

1、做一个可随时变身的“变形金刚”:Runtime Modularity and Extensibility

2、南向协议多样化:Multiprotocol Southbound

3、服务抽象层:Service Abstraction Layer

4、北向应用API“收缩自如”:Open Extensible Northbound API

5、多租户、多切片:Support for Multitenancy/Slicing

6、良好的“克隆”能力:Consistent Clustering

二、“做人的样子”

以Carbon版本为示例,ODL控制器系统整体架构如下图所示:(图片来自官网)

CarbonDiagrams_final.png


从架构图我们可以看到,控制器主要由以下部分组成:

1、开放的北向API:包括REST/RESTCONF/NETCONF/AMQP

2、控制器平面:包括ODL root Parent、Controller等几十个工程

3、南向接口和协议插件:包括OpenFlow、NETCONF等

OpenDaylight的工程

OpenDaylight是由几十个有着“裙带关系”的工程组成,就像一个庞大的家族。下图为ODL的“全家福”,列出了Carbon版本众多工程及相互之间的依赖关系(图片来自官网):

Opendaylight-项目依赖.jpg


因ODL家族比较庞大,限于篇幅,在这里只给大家简要介绍下图的几个工程,这些工程在在后续篇章中会主要涉及:

部分项目3.png


一、ODLParent

家族角色】 Kernal project,ODL家族的“族长”

性格特点】威严、老是爱制定“家法”

家族职责】为参与版本发布的项目提供统一的项目配置,其他项目只需遵从继承odlparent即可获得ODL统一设置,是opendaylight中所有项目的Maven配置基础。

人际关系】德高望重、受人爱戴

二、YANG Tools

家族角色】Kernal project,ODL家族的“智多星”

性格特点】总是爱发明创造各种工具

家族职责】基础设施项目,旨在开发必须的工具和库,为Java项目和应用提供NETCONF和YANG支持。

人际关系】爱戴ODL Parent(项目依赖于ODLParent)

三、MD-SAL

家族角色】Kernal project,ODL家族的“外交部长”,制定家族外事的标准规范。

性格特点】说话做事总有一些标准的套路

家族职责】提供Request Routing和基础设施用来定义抽象服务和相应API的基础框架,管理基于Yang 模型定义的各种Plugin。MD-SAL使得SDN控制器那些丰富的服务和模块可以使用统一的数据结构和南向、北向的API。

人际关系】尊敬ODLParent,和YANG Tools关系很好(项目依赖于ODLParent、YANG Tools)

四、Controller

家族角色】Kernal project,ODL家族的“核心人物”。odlparent年纪大了,族内很多事情离不开controller来处理。

性格特点】能力卓越、颇有人缘、四通八达

家族职责】为多厂家网络的SDN部署提供一个高可用、模块化、可扩展并可支持多协议的控制器基础框架。在该项目中模型驱动的业务抽象层使控制器支持多个南向协议插件;面向应用的可扩展北向架构为控制器提供丰富的北向API。

人际关系】尊敬odlparent,和YANG Tools、MD-SAL来往密切。( Controller项目依赖于ODLParent、YANG Tools、MD-SAL。)

五、AAA

家族角色】Kernal project,ODL家族护卫,负责家族的安保系统。

性格特点】忠诚可靠

家族职责】为用户开发身份认证、授权和计费功能,包括为用户提供适用于多种身份认证、授权、计费机制的通用模型,提供可插拔的机制并为通用系统提供插件。

人际关系】对Kernal project们忠心耿耿(项目依赖于其他kernal project)

六、OpenFlow

家族角色】Protocol Project,ODL家族外事办的重要成员之一,负责处理“OpenFlow”事务。

性格特点】机灵、有活力

家族职责】为OpenDaylight提供OpenFlow协议支持,实现控制器与OpenFlow交换机之间的交互。OpenFlow在OpenDaylight中的实现分为OpenFlowJava和OpenFlowPlugin两部分:OpenFlowJava,负责面向南向设备完成OpenFlow协议的序列化、反序列化、端口监听以及消息收发;OpenFlowPlugin,负责完成OpenFlow协议的状态管理、会话管理、事件处理等,向SAL层提供服务。

人际关系】紧密团结在核心大佬周围(项目主要依赖于很多kernal project)

七、L2Switch

家族角色】Uncategorized Projects,ODL家族外事办的成员之一,负责处理“L2”事务。

性格特点】学习能力强、主动性高

家族职责】将传统L2Switch设备的控制层抽离到控制器上,使控制器具备L2Switch的处理能力,负责MAC地址学习、数据转发决策等。它是具备L2Switch控制能力的应用插件,通过向软交换机下发流表,从而控制数据包的转发行为。

人际关系】关系复杂,不信的话请看上文项目依赖图。

八、DLUX

家族角色】App Project,ODL家族的新闻发言人

性格特点】实用(长相不敢恭维,但是表达清晰、简洁)

家族职责】为控制器的使用者提供交互式Web UI应用,通过图形化的用户界面提供用户体验。

人际关系】不说了,参照L2Switch

本文简单地对ODL的系统架构及工程进行了一些介绍,纯属抛砖引玉,详细内容大家可以参照官网进行了解。下篇将会给大家介绍一些常用feature的安装及使用,敬请期待。谢谢!

——未来网络 Zebra Decoder,2018.01.31出品
course

6 个评论

沙发
板凳
地板
吃瓜
学习了.
总体上可以给初学者一个大致的印象, 但还是要结合对代码的学习才能真的理解这些比喻.

要回复文章请先登录注册