admin管理员组

文章数量:1550938

OSGI在国内不常用,而且相关资料比较少,很早之前在2015年的时候,公司有机会拿此框架做过一个项目,还算成功,所以在此分享一下OSGI的相关内容。

一、什么是OSGI?

Open Service Gateway Initiative,官方说的很明白,上网一搜介绍也有一堆,在此就不详细搬述了,也没啥意义。但是根据项目中对osgi的实战,想说说我个人的理解,我个人总结的是osgi是一个非常好的模块化、组件化的生态系统。它解决了软件设计最重要的三个主题:复用、内聚、耦合。并且提供了设计层面的一种规范,将模块化思想发挥到了极致。这是我个人对它的总结概述。

二、为什么要使用OSGI(优势)?

整体上来说,当然是osgi对模块化有很好的支持。
具体从开发角度来看:
1、复杂性的降低:基于OSGI的组件模型bundle能够隐藏内部实现,而bundle是基于服务进行交互。
2、复用性强:因为是模块化,很多第三方的组件都可以以bundle的形式进行复用。
3、简单:核心API总数不超过30个类和接口。
4、小巧:OGGI R4框架的实现仅需要300k jar就足够了。系统中引入osgi基本上没有什么开销。
5、非侵入式:服务可以以POJO形式实现,不需要关注特定接口。
从部署角度来说:
1、动态更新:也是OSGI最常被提起的一个特性,所谓的热部署,任何一个bundle都可以动态的安装、启动、停止、更新和卸载,但是不需要重启整个系统,是不是很牛。
2、适配性:OSGI提供的服务机制、组件可以动态的注册、获取和监听服务,使得系统能够在osgi环境调整自己的功能。
3、透明:提供了管理API来访问内部状态,因此通常无需去查看日志,能够通过命令进行调试。
4、版本化:bundle可以版本化,多版本共存而不影响整个系统功能,解决了JAR Hell问题。
5、快速:OSGI的类加载机制,和Jar包的线程加载不同,bundle委托式的类加载机制,使得类加载无需搜索,而且又能有效的加快系统的启动速度。
6、懒加载:OSGI也提供了懒加载机制,比如服务可以被注册,直到使用时才被创建。
OSGI的安全层面当然也是ok的,因为其本身就提供了一个安全层,基于java安全模型增加了可用性。

三、OSGI适用于哪些项目?

如果你想把你的系统设计成流行的模块化的方式,这些模块需要支持随时启动,停止,更新操作并且对你的系统或者其他模块造成的影响最小,OSGI是最理想的选择。每个模块都是自治的,它们可以自己解决模块依赖传递关系而不需要在容器层解决这些问题。但是这里我要强调一点,模块化的实现并不是只有OSGI。遵守良好的开发习惯和设计,模块间适当隔离,这不就是模块化吗?如果你的场景是动态化的,毫无疑问,OSGI将是最佳选择。
OSGI构建最著名的应用当属Eclipse了,为了让eclipse成为更动态化的富客户端平台并增强这个平台的模块化,eclipse团队最终选择osgi框架作为运行时模块系统(该项目成为equinox)。这个新版本的eclipse中有一个基于osgi的运行时模型。osgi不再只是用于嵌入式软件以及网络设备中的技术,而是成为所有eclipse插件开发的基础,成百上千开发人员也使用该平台上的eclipse IDE来开发软件。
 

四、OSGI整体架构

主要分为Security Layer、Module Layer、Lift Cycle Layer、Service Layer。

Security Layer:

Module Layer:

Lift Cycle Layer:

Service Layer:

五:重要基本概念及特性介绍

模块化相关

OSGI框架定义了一个模块化单元,称为bundlue,只是一个jar文件。
如何判定是osgi bundle?jar包含了提供功能的资源以及关于bundle元数据的清单文件(manifest)。
资源可以是什么?资源可以是java类、html、图片、servlet甚至jsp。
改变了什么?改变了企业级应用程序的部署模型,传统web的思考方式是以web应用开发为中心的。现在你只需要开发组成应用程序的bundle,所以将从以应用为中心转移到以模块为中心。

管理依赖相关

管理关系的模式是Manifest导入导出包。
发布接口模式是单纯依赖Java,不可能将类型隐藏在模块中。
物理分层模式是必须导入Bundle所要使用所有包,通过检查清单文件来保证没有导入任何展现相关的类。

Osgi uService相关

BluePrint相关

简单来说BluePrint就是让我们的代码独立于OSGI API。说到blueprint,务必需要提及一下Spring,Spring框架对于开发Java的一定不会陌生,其子项目中SpringBoot也成为业界微服务一大选择。而在osgi中,Spring最初也有所涉及,为Spring DM,Blueprint产生的规范便是起源于Spring DM,随后好像Spring DM没有继续发展,但是BluePrint却是一直存在。目前,BluePrint规范主要有两个实现:Aries BluePrint和Gemini BluePrint,它们分别来自Apache和Eclipse两个开源组织。我们日后讲的基本都是Apache官网中的BluePrint。

六:OSGI运行的容器

OSGI运行的容器现在支持最好的当属Apache旗下的Karaf。
Karaf是Apache旗下的一个开源项目.Karaf。同时也是一个基于OSGI的运行环境。Karaf提供了一个轻量级的OSGI容器,可以用于部署各种组件和应用程序。Karaf提供了很多特性用于帮助开发者和用户更加灵活的部署应用,比如热部署、动态配置,几种日志处理系统,本地系统集成,可编程扩展控制台,ssh远程访问,内置安装认证机制等等。同时Karaf作为一款成熟而且优秀的OSGI运行环境以及容器已经被众多Apache项目作为基础容器,比如上面提到的Apache Geronimo,Apache ServiceMix,Fuse ESB,由此可见,Karaf在性能上,功能和稳定性上都是个不错的选择。具体Karaf的一些介绍可以参照下图:

七、实战

具体代码略,有需要的可以留言,在此就不公开了。运行效果如下:

最后,欢迎扫码加入星球《极客e家》,星球里,大咖云集,我们将一起打造极客文化。在这里,您将体会到:

【科技动态】:我们聚焦软件技术发展趋势和行业最新动态,尤其ChatGPT这波的AI风向标,让您轻松掌握一手科技资讯。

【共同成长】:除了传统的【系列课程 & 面试】栏目之外,我们还将分享优质的技术文章和工具等,还有更多来自星主和各个小伙伴的原创学习资料,让您的技术更上一层楼,生产性更进一步提高,我们还提供技术交流和问答平台,更有针对性的解决您的问题。

【小白逆袭】:如果您是刚入行或工作不久的软件小白,在这里,您将在极客文化的熏陶中,引领您走向技术大牛之路。

【技术面试】:我们也会分享一些技术面试的重点和常问的技术问题。

【行业资讯】:分享和探讨最新行业资讯,尤其是星主所在城市(大连)的软件行业动态和技术趋势。

更多精彩内容,期待您在星球中探索。

 

本文标签: 架构OSGi