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

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

该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

raf/target/assembly/bin root@ubuntu:~/topology

raf/target/assembly/bin# .

raf

查看topology模块是否运行:

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

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

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

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2017-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LuckQI

美团面试经历,贡献出来一起学习

  晚7点,因为想到下周一才面试,我刚准备出去打个羽毛球,北京的电话就来了。面试官各种抱歉,说开会拖延了。 1、自我介绍 说了很多遍了,很流畅捡重点介绍完。...

92120
来自专栏木东居士的专栏

漫谈并发和并行:概述

18340
来自专栏斑斓

代码诊所

几年前,我有机会负责一个项目的咨询。团队很小,目标是对旧有系统的后端用Java改写,而团队的开发人员全为C程序员。我的工作职责是负责项目设计、开发,以及担任项目...

43060
来自专栏java工会

用JS编写一个Java虚拟机?谈谈哗众取宠的BicaVM

今日目睹某网络新闻,开篇明义便包含如下几行文字 【程序员Artur Ventura,这位超级大牛,用JavaScript写了一个java虚拟机BicaVM】 ...

13200
来自专栏企鹅号快讯

高级语言,高级在哪?

高级语言、低级语言,都是对计算机而言。人类语言不存在这种说法。 在上篇文章(一分钟认识你的电脑)中,柚子向大家介绍了内存。 内存的最小单位是bit,二进制表示,...

294100
来自专栏屈定‘s Blog

面经

从2016.7来到上海后记录下自己的面试经历,希望能对其他人有所帮助,同时给自己一个提醒.

14540
来自专栏一个会写诗的程序员的博客

附录C Java编程简史附录C Java编程简史丰富多彩的JVM生态参考资料

在20世纪60年代,软件曾出现过严重危机,由软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,荷兰E.W.Dijkstra提出了程序设计中常用的...

11940
来自专栏刘望舒

一个妹子的Android秋招面试总结(已拿BAT等7家口头offer)

在2018Android暑期实习面试总结曾介绍过个人情况、自学经历、校招流程和复习重点,这部分就不再赘述。那么本篇先以日历形式回顾秋招之路,方便各位参考某厂的处...

1.3K20
来自专栏java一日一条

不愿看到Java开发者再做的10件事

编者注:Andy是OSI(开发系统集成者)的CEO,同时也是位思想先锋及优秀博客作者。

7020
来自专栏恰童鞋骚年

自己动手写游戏:飞机大战

  要说微信中最火爆的小游戏是哪款,可能既不是精心打造的3D大作,也不是《植物大战僵尸2》,而是微信5.0刚开启时的《飞机大战》。

50510

扫码关注云+社区

领取腾讯云代金券