分布式OSGi - 如何在所有容器中正确管理bundle?

7
我们正在考虑在企业环境中使用分布式OSGi。
我们将有以下设置:
  • 许多主机上的10到100个OSGi容器提供各种服务。
  • 这些服务中的许多由多个容器提供。
  • 其中一些服务可能需要在所有容器中保持一致(部署相同版本)。
如何在所有容器中管理bundle的生命周期(安装、启动、更新、停止、卸载)是正确的方法?
几个要求:
  • 由于可能有很多容器,因此应一起处理它们;即当我要更新bundle时,单个命令应该更新已经存在该bundle的所有容器。
  • 命令必须可重复:首先在测试系统上执行命令,然后在完成测试后在生产系统上重复完全相同的命令。
对于上述问题,我感谢任何建议。
最好的问候, Marton

所有这些OSGi容器是否构建成一个大型分布式OSGi容器,使得主机X上的服务A可以像在同一主机X上一样使用主机Y上的服务B?还是它们彼此分离,您只想维护10-100个OSGi容器?它们都是相同的吗,例如10-100个OSGi容器具有完全相同的捆绑包,并且您希望同时向所有这些OSGi容器发送命令(例如“安装”)?还是它们不同,即主机X具有具有N个捆绑包的OSGi容器,而主机Y上的OSGi容器具有不同的捆绑包集? - Progman
这是一个大型分布式OSGi环境:主机X上的服务A可以使用主机Y上的服务B。每个容器可能具有不同的捆绑包集合。谢谢! - Marton Sigmond
我会尝试使用Apache Karaf来构建这样的系统(因为它提供了自动化命令和简单的bundle管理方式)。我将使用共享bundle存储设置它,因此每当我更新一个bundle时,所有运行时都会选择它。Karaf旨在支持从脚本执行命令,因此编写所需的脚本来管理系统不应该很难。但是,您将无法获得分布式事务。在某个时间点,可能会出现版本不匹配的情况,我认为目前没有解决方案。 - Danail Nachev
4个回答

7
你可能想看看更多针对云环境的“托管”解决方案:Apache ACE或其更大的兄弟Amdatu
Apache ACE将单个OSGi容器转换为托管容器,其状态可以从单个管理点进行控制。 Amdatu是一个更完整的框架,包括用于提供的ACE,但添加了水平功能。

请注意,Apache ACE 刚刚毕业成为顶级 Apache 项目,因此该链接(仍在孵化器空间中)可能不会长时间有效。 - Toni Menzel
1
链接将保持有效,并简单地重定向到新位置。 - Marcel Offermans

3

在处理大量bundle时,可以考虑使用Karaf features - 它们极大地简化了管理大型bundle套件的过程。

对于分布式方面的问题,请查看Karaf子项目Cellar,它使用HazelCast进行Karaf集群化(并通过特性机制在Karaf中安装)。


2
如果您需要一个“强大”的分布式OSGi运行时环境,那么请看Paremus Service Fabric。我们从2005年开始就一直在做这个!Service Fabric的配置/管理架构非常可扩展(>>1,000个容器),响应迅速且稳定!多年的开发和商业运行经验支撑着这个产品。Service Fabric架构支持多个并发的基于OSGi的分布式应用程序。Service Fabric的架构是以OBR为中心的;我们的首席工程师负责最近的OSGi联盟OBR规范活动。
Service Fabric的消息后端利用DDS消息协议 - 在我看来,这是分布式OSGi的自然伙伴。Paremus RSA(远程服务实现)是标准的干净室实现,非常强大、轻量级,并允许协议和分发提供者的动态插入。默认的发现提供者 - 再次是DDS。
最后,Service Fabric可以直接使用。

以下链接可能会引起兴趣 - http://www.slideshare.net/mfrancis/the-dawn-of-composite-clouds-why-osgi-is-the-most-important-ingredient-in-the-next-generation-of-java-compute-cloud-richard-nicholson 和 http://www.slideshare.net/mfrancis/cloud-osgi-the-dawn-of-composite-clouds,以及一个稍微抽象一些的演示文稿http://www.slideshare.net/mfrancis/complexity-components-clouds-paremus - Richard

1
Gyrex中,我们使用p2将bundle分发到集群的不同节点。可以通过使用节点标签和LDAP过滤表达式(在OSGi中常见)来控制应向哪个节点提供哪些bundle。例如,可以仅在Web节点上安装(和激活)Web bundle。
分布式服务的支持不能直接使用。需要手动集成ECF。

截至2016年4月,似乎只有在服务器http://git.eclipse.org/c/gyrex/上进行工作。 - Paul Verest
所有代码已合并到一个单一的Git存储库中,以便更轻松地进行维护。 - Gunnar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接