OSGi架构学习与设计

首先,我想表扬自己终于开始实践自己一直想贯彻的想法———用博客来记录和总结自己的学习历程。

      

       现在我正在设计一套基于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接口,把基础服务和新的应用服务部署在云端。

      我希望能在这个平台上和更多业界的人士交流,学到更多的东西,设计出一个能够管理海量数据的靠谱的框架。

时间: 2024-08-03 13:33:48

OSGi架构学习与设计的相关文章

学习产品设计:绘制交互设计流程图

文章描述:绘制交互流程图. 学习产品设计初期肯定会遇到两个问题:第一,如何考虑更全面:第二,如何绘制交互流程图.开始产品设计前先要考虑所有可能性,如何才能以线性流程图的方法组织所需的设计元素.小郑老师的<交互设计表格>中已经介绍了非常实用的表格穷举法,适合初学者使用. 流程图是产品经理和交互设计都必须掌握的技能,一张流程图可以省去需求文档和交互设计文档的很多文字描述,让技术人员一目了然地明白设计意图,便于组织程序的逻辑顺序. 绘制流程图准从简单的原则,流程图是设计师的产出物,体现设计意图,主要

ABP架构学习系列一 整体项目结构及目录

本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习. abp的源码分析学习主要来源于 HK Zhang ,他的博客是https://www.cnblogs.com/1zhk/ 一.什么是ABP ASP.NET Boilerplate(ABP)是现代新的Web应用程序的最佳实践和最流行的工具的起点.它的目标是实体模型.通用应用程序框架和项目模板. ABP是一个建立在最新的ASP.NET的MVC和W

学习网页设计必知的20个教学资源站

  好在伟大的互联网让全世界苦逼的互联网er都联合起来,一起解决问题.在线课程社区正是在这种情况下诞生的,应对不同需求的在线社区为需要学习的用户们提供了大量的辅助学习资料以及名师们的课程视频和文字教程,在社区中,你会发现一些传统经典的问题的解决方案,还能找到新兴技术和趋势的深度解读. 这些网站里有大量的第一手的学习资料,只要你用心学习,它们绝对不会让你失望. 1. Udemy Udemy是一个在线学习平台,如果你是技术大牛,可以在此销售自己的教学视频;如果你想在此学习技术,可以购买符合自己需求的

演化架构和紧急设计: 利用可重用代码,第2部分

简介:在使用 演化架构和紧急设计 前几期描述的技术发现 代码中的紧急设计之后,下一步您需要一 种获取和利用这些设计元素的方法.本文介绍了两种用于获取惯用模式的方法:将模式作为 APIs 进行捕 捉:使用元程序设计方法. 本 系列 的前几期主要关注紧急设计中显而易见的第一步:发现 惯用模式.发现惯用模式之后,您要 用它做什么?该问题的答案就是本期重点,本文属于由多个部分组成的系列文章的第二部分.第 1 部分 -代码与设计的关系探讨- 介绍了一种观点的理论基础,这种观点就是软件中的设计真正是指解决方

演化架构和紧急设计:利用可重用代码,第1部分

简介:识别出代码中的惯用模式后,下一步是积累和使用它们.理解设计与代码之间的关系有利于发 现可重用的代码.本期的 演化架构与紧急设计 探索代码与设计的关系,使用表达性强的语言的重要性, 以及重新考虑抽象风格的潜在价值. 通过本 系列 的前几期,您已经知道,我的观点是软件的每个部分都包括可重用的代码块.例如,公 司处理安全性的方式在整个应用程序甚至多个应用程序中可能都是一致的.这就是我所说的 惯用模式 的 实例.这些模式代表对构建软件特定部分时遇到的问题的常用解决方案.惯用模式有两种类型: 技术模

演化架构和紧急设计: 演化架构

简介: 这一期的 演化架构和紧急设计 将会解决演化架构相关的各种主题,包括设计和架构之间的重 要区别(以及如何区分两者),您在创建企业级架构时遇到的某些问题,以及面向服务的架构中静态类型 和动态类型的区别. 在 本系列的第一期 中,我推荐了软件世界中的一些架构定义.无论如何,如果您已经阅读过本系列 ,您会注意到我花费了大部分时间在设计上.我之所以这么做是基于以下几个原因:首先,在当前紧急设 计尚未被广泛关注时,软件世界里存在很多架构定义(良莠不齐):其次,在设计方面很多问题都有具体 的.不受环境

演化架构与紧急设计: 积累惯用模式

简介: 本期将之前的 演化架构与紧急设计 文章中的紧急设计概念与一个案例研究相结合,展示如何 发现.积累和利用代码中意料之外的设计元素.一旦理解了如何识别设计元素,便可以使用该知识改进代 码的设计.紧急设计使您可以发现代码中意料之外但是已成为代码库重要部分的那些方面. 在本系列第一期 "研究架构和设计" 中,我曾断言每个较大的项目都包括超出所有人意料的设计元 素.详细考虑一个问题时,常常会发现有些本以为困难的事情实际上却更容易,有些本以为容易的事情实 际上却更困难.随后的几期则演示了发

演化架构与紧急设计: 通过指标进行紧急设计

简介: 软件指标可以帮助您寻找代码中隐藏的设计元素,让它们能够成为惯用模式. 演化架构与紧急设计 的这一期讲解如何使用指标和可视化发现被复杂性掩盖的重要代码元素. 紧急设计的难题之一是寻找隐藏在代码中的惯用模式和其他设计元素.指标和可视化有助于识别代码的重要部分,从而提取出一些设计元素.本文主要讨论两个指标,圈复杂度(cyclomatic complexity) 和传入耦合(afferent coupling).圈复杂度度量方法的相对复杂度.传入耦合表示有多少个其他类使用当前类.本文要介绍显示和

演化架构与紧急设计:研究架构和设计

演化架构(evolutionary architecture)和紧急设计(emergent design)都是将 重要的决策推迟到最后责任时刻(Last Responsible Moment)的敏捷技术.在本 系列的第一期文章中,系列作者 Neal Ford 将定义架构和设计,然后指明了一些 关于整个系列的基本概念. 软件架构和设计一直都没有一个明确的定义,因为软件开发作为一门学科,尚 未完全理解其中的复杂度和内涵.但是要发表关于这些主题的论述,您必须从某 个位置开始.本系列涉及演化架构和紧急设