OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDayligh

上篇我们简单地和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就如同建设大厦的工具,搅拌机、电焊机、起重吊车、铁铲。。。好吧,我承认这个画风不是那么美好。。。

OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDayligh


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/下面的目录结构为:

OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDayligh

 该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/topologyOpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDaylighraf/target/assembly/bin root@ubuntu:~/topologyOpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDaylighraf/target/assembly/bin# .OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDaylighraf 

OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDayligh

查看topology模块是否运行:

opendaylight-user@root>feature:list | grep topology

看到下图内容,说明组件已经正在运行,工程创建ok:

OpenDaylight系列文章(二):OpenDaylight初窥(上篇)之OpenDayligh


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控制器的集群)等等,在这里不作一一赘述了。后续篇章里这些技术会陆续登场亮相,敬请期待。


上一篇:实验 7:OpenDaylight 实验——Python 中的 REST API 调用


下一篇:实验 7: OpenDaylight 实验——Python 中的 REST API 调用