如果说前面的文章是铺垫的“地毯”,那么从本篇开始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控制器系统整体架构如下图所示:(图片来自官网)
从架构图我们可以看到,控制器主要由以下部分组成:
1、开放的北向API:包括REST/RESTCONF/NETCONF/AMQP
2、控制器平面:包括ODL root Parent、Controller等几十个工程
3、南向接口和协议插件:包括OpenFlow、NETCONF等
OpenDaylight的工程
OpenDaylight是由几十个有着“裙带关系”的工程组成,就像一个庞大的家族。下图为ODL的“全家福”,列出了Carbon版本众多工程及相互之间的依赖关系(图片来自官网):
因ODL家族比较庞大,限于篇幅,在这里只给大家简要介绍下图的几个工程,这些工程在在后续篇章中会主要涉及:
一、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的安装及使用,敬请期待。谢谢!