OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDaylight的工程技术架构


上篇我们简单地和OpenDaylight控制器打了个照面,后续篇章会逐步介绍OpenDaylight的系统架构和实现机制。不过呢,在揭开其面纱之前熟悉它的背景技术是很有必要的。不然讨论OpenDaylight时我们就会丈二和尚——摸不着头脑。

那么OpenDaylight控制器使用了哪些核心技术?它的工程技术架构又是怎样的呢?

万殊一辙。OpenDaylight的工程技术架构其实就像一座高楼大厦的构造,核心技术如同风靡建筑行业的装配式技术。

OSGI---OpenDaylight的“装配式技术

【画外音】

装配式技术:现代建筑建造普遍采取的技术。这种技术理念下建筑的组成部分如墙板、楼板、阳台等等被看成一个个独立的模块,在构件工厂预制完成。然后在施工现场通过钢筋连接、焊接等方式进组装,最终建成整体建筑。
这个大家一看就明了,说白了就像积木游戏。呃,这样说来,OpenDaylight的实现岂不就是搭积木。。。说好的高大上呢。。。
OSGI:以java为技术平台的动态模块化规范。OSGI拥有许多优秀特性,如动态性、模块化和可扩展力。它在OpenDaylight中被引用为后端技术框架。

在OSGI框架规范下,OpenDaylight这栋高楼大厦是怎么建设起来的呢?

OpenDaylight的功能组件(feature)有很多。OSGI就像建筑行业的装配式技术那样去组装和管理这些feature:

在OSGI中部署的最小单位是bundle(bundle就相当于一个普通的jar包),它就像预制的建筑构件,比如墙板、楼板、楼梯、阳台;

多个bundle聚合在一起构建成一个feature,一个独立的房间(空间)。feature又可以聚合在一起形成一个大的feature、如同多个房间(空间)组成一个功能场所(楼层);

功能场所比如有健身场所(楼层)、餐饮场所(楼层)、娱乐场所(楼层)等等,有了这些高楼大厦的躯干就建造完成了。

在这个过程中,我们的键盘和CODE就如同建设大厦的工具,搅拌机、电焊机、起重吊车、铁铲。。。好吧,我承认这个画风不是那么美好。。。
old1.png

KARAF---OpenDaylight的“建筑主体”

KARAF:是Apache旗下的开源项目,同时也是一个基于OSGI的运行环境,可以用于部署各种组件和应用程序。OpenDaylight控制器从HELIUM版本开始使用karaf作为底层架构。

KARAF提供了一个基础容器的功能,在OSGI“装配式技术规范”下它就像是建筑主体。如果建造的是商业大厦,那么就会把一些健身、娱乐、餐饮场所(feature)建造进来;如果建造的是住宅楼,那么聚合的就是各类居住户型。

【小记】

OpenDaylight的功能组件如果在实际的应用中全部安装,那么随着功能组件的发展或个性化的开发,ODL控制器就会暴饮暴食,变得身材臃肿,步履蹒跚。而OSGI框架和KARAF容器可以实现功能组件即插即用,保证了ODL控制器体态匀称、身形灵活。

Maven---OpenDaylight的“构件工厂”

Maven: 项目管理工具。它包含项目对象模型、标准集合、项目生命周期、依赖管理系统和用来定义生命周期阶段中插件和目标的逻辑。

在OpenDaylight里,Maven扮演着构件工厂的角色。它管理着开发项目的资源,包括墙板、楼板、阳台这些最小单位的模块构件。当项目开始建设的时候,资源的调配使用都是它说得算。

下面示例一下如何使用maven自动创建OpenDaylight项目基本结构并编译的:

环境配置

1、系统环境:ubuntu 14.04 64 bit
2、软件环境:Java JDK 1.8+、Maven 3.5.2 

maven配置

1、修改仓库
修改maven默认配置~/.m2/settings.xml文件,使用OpenDaylight自己的仓库,
命令如下:
cp -n ~/.m2/settings.xml{,.orig} ; \wget -q -O - https://raw.githubusercontent. ... s.xml > ~/.m2/settings.xml

2、创建工程
创建maven工程
root@ubuntu:~#mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate-DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeVersion=1.3.2-Carbon -DarchetypeRepository=https://nexus.opendaylight.org ... ublic

创建工程的过程中需要输入一些选项:
Define value for property 'groupId': : org.opendaylight.demo
Define value for property 'artifactId': : topology
Define value for property 'version': 0.1.0-SNAPSHOT: : 0.1.0-SNAPSHOT
Define value for property 'package': org.opendaylight.demo: : org.opendaylight.demo.topology
Define value for property 'classPrefix': Topology: :
Define value for property 'copyright': : ZebraDecoder
Define value for property 'copyrightYear': 2017: : 2017


BUILD SUCCESS后会生成一个名为topology的文件夹,topology/下面的目录结构为:
odl2.png

该maven工程生成了bundles和bundle aggregator。
Bundles分别是api, artifacts, cli,features, impl,it,karaf,src;
bundle aggregator即为pom.xml。

3、编译项目
root@ubuntu:~# cd topology/
root@ubuntu:~/topology# mvn clean install -DskipTests


4、验证工程
编译成功后,启动OpenDaylight
root@ubuntu:~# cd /root/topology/karaf/target/assembly/bin
root@ubuntu:~/topology/karaf/target/assembly/bin# ./karaf

odl3.png

查看topology模块是否运行:
opendaylight-user@root>feature:list | grep topology
看到下图内容,说明组件已经正在运行,工程创建ok:
odl4.png

Netty---OpenDaylight的“水电系统”

Netty:java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

OpenDaylight南向使用Netty来管理底层的并发IO。Netty就像高楼大厦的水电系统,提供给水给电的通道,通过它高楼大厦可以调配水、电等能源。

Jersey---OpenDaylight的“布线系统”

“布线系统”保障大厦的多种网络应用需求,如语音、数字、视频等等

Jersey:开源的RESTful框架,实现了JAX-RS (JSR 311 & JSR 339) 规范。OpenDaylight北向使用Jersey提供REST接口。它就像一栋高楼大厦的“布线系统”。

以上简单列举了OpenDaylight使用的核心技术和工具。当然还有其它一些技术,如Infinispan(开源的数据网格平台,实现OpenDaylight控制器的集群)等等,在这里不作一一赘述了。后续篇章里这些技术会陆续登场亮相,敬请期待。


因为编辑器的原因,部分代码可能显示不完全,如果对本文代码感兴趣的,可直接下载附件文档:
文档下载处
——未来网络 Zebra Decoder,2017.12.21出品
course

8 个评论

讲的通俗易懂
写的非常生动啊,希望能继续写下去,不要换人啊,我就喜欢这种风格
一个被SDN耽误的建筑工程师
文采不错,比喻很生动
顶二楼
厉害,学习了。。。
期待继续深入的文章
很6,期待

要回复文章请先登录注册