OpenDoc Series':OSGI实战(三)

 由  ValRay 发布

三. OSGI 带来什么

在上一个章节中,从需求实现和技术角度分别体验了 OSGI,对于基于 OSGI 搭建的系统和传统的系统有什么不同有了个大概的印象,那么到底 OSGI 给我们带来了什么呢?

从需求实现方面,OSGI 为动态扩充、修改系统功能和改变系统行为提供了支撑,而在传统的开发方式下,要实现系统的动态扩充、修改以及改变是一件很麻烦的事。

从技术角度方面,OSGI 带来了规范化的模块组织以及统一的开发方式,这为传统的模块的组织、模块开发以及模块积累提供了一种全新的指导以及支撑。

来具体看看 OSGI 提供的这些支撑能给具体的项目带来什么不一样的感觉。

●可插拔的系统

估计很多人都接触过路由器,大部分的路由器都支持模块的热插拔,这就意味着可以在路由器运行的状况下给它动态的增加新的功能或者卸载不需要的功能,硬件界的这种热插拔技术一直就是软件界所追求的,而 OSGI 则使得热插拔技术在软件界成为现实。

基于 OSGI 的系统,可通过安装新的 Bundle、更新或停止现有的 Bundle 来实现系统功能的插拔。

●可动态改变行为的系统

在业界可插拔的系统其实并不少,但可动态改变行为的系统并不多,JMX,no no no,JMX 和 OSGI 在动态改变行为方面绝对不是一个级别的,OSGI 有一整套完整的机制去实现动态改变系统行为。

改变系统行为的典型例子见上章节中的动态改变登录验证方式,无需我说,基于这个基础上可以做出更为复杂的多的动态改变系统行为的支持。

可插拔、可动态改变行为从根本上保证了系统在运行期足够的灵活性和扩展性。

●稳定、高效的系统

基于 OSGI 的系统采用的是微核机制,微核机制保证了系统的稳定性,微核机制的系统只要微核是稳定运行的,那么系统就不会崩溃,也就是说基于 OSGI 的系统不会受到运行在其中的 Bundle 的影响,不会因为 Bundle 的崩溃而导致整个系统的崩溃。

OSGI 的动态性原则保证了系统的高效,只有在请求发生时 OSGI 才去完全加载、启动相应的 Bundle、Service。

●规范的、可积累的模块

规范的模块开发方式其实是大部分软件公司都期盼的,规范的模块开发方式就意味着规范的人员技能培养体系以及规范的人员技能要求,这对于软件公司来讲是很重要的。

但为什么大部分软件公司都形成不了规范的模块开发方式呢,因为没有统一的规范的基础架构体系的定义,往往每个项目、每个产品都会因为架构师的偏好、技术的发展而导致模块的开发方式完全不同,这就使得软件公司在人员技能要求、培养上很难形成统一,而 OSGI 为这个问题提供了解决方案,基于OSGI的系统采用规范的模块开发、部署方式构建系统。

当然,采用 OSGI 作为规范的模块开发、部署方式自然给现有梯队提出了新的要求,对于设计师而言,需要学习新的基于 OSGI 的模块分解、设计方式,对于开发人员而言,需要学习新的基于 OSGI 的开发方式,但对于公司形成规范的模块开发方式能带来的回报而言,这样的付出是值得的,而且,这个学习成本并不是很高。

模块的积累是软件公司发展的基础,只有公司独特的竞争力的项目经验模块被积累下来了,公司的发展才能一直的持续和高速,而在形成了规范的模块开发、部署方式后,模块的积累自然水到渠成。

OSGI 除了带来这些的明显的优点和挑战之外,还带给我们更多,例如面向服务的组件模型设计思想、高效系统设计思想等,也希望在实际的项目中 OSGI 能让你享受到更多,同时也希望你能分享更多给大家。

四. OSGI 案例

说了这么多 OSGI 的好,吹了这么多的”牛”,来以事实证明下 OSGI 并不是什么实验品,而是已经在业界被证明切实可用的东西。

OSGI 典型的应用案例主要有两个,都非常的著名,分别是 Eclipse 和 BMW 汽车的应用控制系统。

●Eclipse

Eclipse 作为 Java 业界成功的 IDE project,在 3.0 以前的版本它采用的是自己设计的一套插件体系结构,而 Eclipse 的插件体系结构在整个业界都是非常知名的,也是被认为非常成功的一种设计,但 Eclipse 在 3.0 版本时却做了一个重大决度,就是推翻它自己以前的插件体系结构(虽然开始只是做兼容的方式,随着版本的逐渐升高已经开始逐步的替换工作了),而转为直接采用 OSGI 作为其插件体系结构,这到底是为什么呢?

Eclipse 的插件体系结构和 OSGI 的思想非常的耦合,都强调微核+系统插件+应用插件的概念,Eclipse 之所以要抛弃自己那套已经比较成熟的插件体系结构而转而采用 OSGI,就是因为 OSGI 的规范性以及 OSGI 对于插件体系结构更为完整的定义,当然,还有一些官方性质的原因,这些原因在这里暂且不提,Eclipse 采用 OSGI 作为其插件体系结构的成功是很明显的,在 Eclipse 3.1 版本以后大家可以明显的感觉到启动速度的提升,同时也使得可以在运行时对插件进行管理,更明显的提升是插件的开发更加的规范,从而可以使用很多已有的 OSGI 插件。

Eclipse 同时也带给了业界良好的插件系统的体验以及插件系统的开发经验。

●BMW 汽车的应用控制系统

BMW 汽车的应用控制系统采用 OSGI 作为其底层架构,估计这一定程度上颠覆了很多人对于 Java 的认识,很多人都认为基于 java 的系统低效,不可能用于汽车这样的应用控制系统上,在 EclipseCon 2006 会议上 BMW 采用 OSGI 得到了证实,估计是猜想会被很多人怀疑,演讲者在 PPT 上讲了下 BMW 汽车的应用控制系统,这套系统主要用来控制汽车上的音箱、灯光等等设备,总共由 1000 多个 Bundle 构成,但 BMW 汽车的应用控制系统启动时间却只需要 3.5 秒,是不是很令人惊讶呢,这也从很大程度上反应了采用 OSGI 的系统的效率并不会低。

这两个非常成功的案例向大家证明了基于 OSGI 开发系统的可行性,同时这个两个成功案例的足够的知名性以及优秀的使用、技术效果也为 OSGI 的推广铺设了不错的基础,到这篇文档完稿之时,关于 OSGI 被商业领域(例如 IBM P5 服务器系列、Websphere V6.1、Lotus Sametime、Adobe CS2 等)、知名开源软件领域(例如 Apache 等)采用的消息已经是不断的传出,可以看出 OSGI 在服务器端应用、企业应用中已经开始广泛流行了,而这对于 OSGI 更好的发展成为支撑服务器端应用和企业应用的规范会起到很好的推动作用。

五. OSGI 框架

在开源界中实现 OSGI 的框架比较知名的有:Equinox、Knopflerfish、Oscar。

5.1. Equinox

Equinox 是 Eclipse 中的项目之一,Equinox 是作为 OSGI R4 RI 而知名的,同时由于Equinox 有 Eclipse IDE 这么个成功案例,反应出了 Equinox 作为 OSGI 框架的优势。 Equinox 目前是随着 Eclipse 版本而发布的,同时,它也提供独立的下载,在独立的下载页面中可以下载到 Equinox 对于 OSGI R4 的所有实现以及 Equinox 扩展 OSGI R4 而提供的 Bundle。 Equinox开发小组由IBM的Jeff领衔,开发状态非常的活跃,从它的开发者maillist可以看出,讨论非常的热闹,大家感兴趣的话可以申请加入开发者 maillist :

http://dev.eclipse.org/mailman/listinfo/equinox-dev。

想了解更多的 Equinox 信息请参看:

官方站:http://www.eclipse.org/equinox

中文站:http://www.riawork.org

5.2. Oscar

Oscar 是一个遵循 OSGI R3 框架的实现,目前它的开发状态不怎么的活跃,新的新闻都是 2005 年的了。

Oscar 的优势在于提供了大量 OSGI R3 标准之外的 Bundle,为开发基于 OSGI 的系统提供了方便。

更多 Oscar 的信息请参看: 官方站:http://oscar.objectweb.org/

5.3. Knopflerfish

Knopflerfish是一个知名的OSGI框架,目前提供的新版本也已经完整的实现了OSGI R4,Knopflerfish 的开发状态非常的活跃,同时它也提供了为方便开发基于 OSGI 系 统的大量的 Bundle。

更多 Knopflerfish 的信息请查看:

官方站:http://www.knopflerfish.org

三种框架各有优劣,我也没有仔细的对三个框架做过具体的比较,出于对 Eclipse 项目的信任、Equinox 作为 OSGI R4 RI 以及 Equinox 有 Eclipse 这个强大的开发 IDE 作为其开发环境的原因,在实际的应用中我选用了Equinox作为项目/产品中使用的OSGI框架,由于 OSGI 是个标准的规范,在开发需要的情况下可以选用 Oscar、Knopflerfish 提供的大量的 Bundle 做为项目/产品中的基础设施。

查看评论