首先,我想表扬自己终于开始实践自己一直想贯彻的想法———用博客来记录和总结自己的学习历程。
现在我正在设计一套基于Equinox的管理门户平台上各种不同服务的分布式框架。Equinox是Eclipse内的一个简单的开源OSGi框架,在它的基础上,我需要自己创建我所需要的bundles。框架底层衔接的是一个其他项目组正在开发中的非结构化数据库,而框架之上是一个门户服务平台,其中有许许多多不同的应用服务——具体的说,这些服务的实现各自有相同之处,但存在较大的不同,比如他们的数据存储的模型各不相同,所以我需要建立基础bundle供应用级的bundle使用。
简单介绍一下OSGi吧,虽然Wiki,百度百科会比我解释得更好。一个月以前,我开始接触OSGi这个概念,它是一种SOA(面向服务)的新的架构,可以很轻松的管理软件组件的生命周期(组件可以位于网络中的任何设备上), 而且组件可以动态的安装, 加载, 升级和卸载, 而不用终止和重启设备。 这里的组件是指程序库或者是应用程序, 它们又可以动态的使用别的库和程序。OSGi下最重要的成员就是它的Bundles。通过部署Bundle,start/stop Bundle来实现动态部署服务(服务在Bundle内注册)。
我决定用一个身边的例子来说明OSGi要实现的效果。它就是Eclipse。Eclispe公司非常看重OSGi的发展前景,如果上网搜的话,应该可以搜到Eclipse公司上层对OSGi的一段采访报道,记得好像在InfoQ的网站上看过。Eclispe在3.0版本之后,就放弃了原先自己的那套管理组件的体制,而选用了OSGi来管理Eclipse的Plug-ins。无论是Eclipse还是MyEclispe,他们的plugins目录下都是非常多非常多的.jar包,这些是Eclispe——作为一个可以集合各种各样开发环境的容器——的核心资产。想要动态地部署,管理这么多的jar包以及未来不断加入新的组件进行更新,是件不容易的事情。而OSGi就是为了更好地完成这件事而诞生的。不知道大家有没有仔细注意过,在Eclipse的plugins目录里丢入一些jar包(需要开发新环境的时候),重新启动Eclipse,我们会发现,在Eclipse主界面的上部会出现新的任务按钮。这时候,你如果新建一个工程,或者查看window
-> preferences,就会看到一些新的面孔出现在你面前。这就是一种动态部署,即插即用,即删既无。OSGi真正实现了这个效果。
不知道以上的这个例子有没有让您对OSGi所干的事情有点初步的形象的了解。下面我会列举我在这一个月的学习过程中,所能找到和参考到的比较好的资源。首先是淘宝的林昊工程师写的两篇open doc:《OSGi实战》和《OSGi进阶》。这两篇open doc出现的时候,国内的OSGi并没有普及,虽然现在也没有算已经普及起来。这两篇doc可以带领我们走进OSGi,里面的例子简单又有代表性,让我们可以好好体会OSGi工程的编写形式和思想,这点非常重要(只有在设计的时候才感受到)。基于这两篇open doc,林昊又和淘宝的另一位朋友一起编写了《OSGi原理与最佳实践》这本书。这本书是应了一些论坛上喜爱OSGi的网友的要求,在前两篇doc的基础上,更具体地介绍OSGi以及其目前已经开源的框架的入门书。对Equinox,
Spring-DM, Apache Felix, 这几个比较主流的已经开源的OSGi框架都做了分析和简单教学实现。OSGi R4规范也涵盖在了书里。这本书我是已经购入了的,在国内OSGi资源稀缺的前提下,它是我必备的一本起步书籍。此外,国外的书籍里主要有《OSGi in Action》和《OSGi and Equinox: Creating Highly Modular Java? Systems》。两本书的电子版我都找到了,第一本书我看了下目录,没有具体看;相比之下,第二本书是我现在正在细读的,它的电子版我是前天才找到的,附上地址
http://code.google.com/p/osgicse/downloads/list .我可能会对第二本书的阅读做一个摘要和自己的解读,希望能和大家分享一些自己的经验。除了以上几本书,我还想推荐的是一些硕士/博士的学位论文,都是国内的,也许你在google里输入OSGi框架,OSGi实现之类的关键字都可以找到它们。
前面提到,我现在正在设计一个比较简单的OSGi框架,其实有种代码重构的意思,把传统的从数据库中提取信息,返回给页面显示的简单java project重构成Equinox工程。怎样设计出粒度适中,又能发挥出OSGi管理服务特色的bundle是我目前正在考虑的事情。这也是我在细读《OSGi and Equinox: Creating Highly Modular Java? Systems》这本书的原因,想从中学习到OSGi的正确的设计思路。除此以外,大家可以关注下目前正在开发的OSGi框架,比如我现在在解读的amdatu,在Github里可以找到源码。通过读源码,帮助我们更好地设计框架和规划bundle粒度。
最后想实现的是分布式的OSGi框架,底层希望是基于Hadoop的那套东西——存储在HBase,HDFS,集群之间是zookeeper来协调,与门户的响应采用REST接口,把基础服务和新的应用服务部署在云端。
我希望能在这个平台上和更多业界的人士交流,学到更多的东西,设计出一个能够管理海量数据的靠谱的框架。