如何在分布式OSGi中进行负载平衡?

如何在分布式OSGi中进行负载平衡?,osgi,load-balancing,Osgi,Load Balancing,我们使用CXF分布式OSGi在不同的机器上部署了两个服务实例。我们希望为系统提供负载平衡功能。据我们所知,OSGi不提供任何负载平衡功能。有人知道怎么做吗?负载平衡是一个需要拓扑管理器(TM)来实现的问题。阅读远程服务管理规范会很有用,它正好解决了这类问题 据我所知,远程服务的CXF实现只实现了一个TM,这是“混杂的”,即它发布每个侦听框架中的每个可用服务。但是,您可以编写自己的TM来执行负载平衡和故障切换等 远程服务规范的编写方式使TM实现可以完全独立于任何特定的远程服务实现进行开发。您应该能

我们使用CXF分布式OSGi在不同的机器上部署了两个服务实例。我们希望为系统提供负载平衡功能。据我们所知,OSGi不提供任何负载平衡功能。有人知道怎么做吗?

负载平衡是一个需要拓扑管理器(TM)来实现的问题。阅读远程服务管理规范会很有用,它正好解决了这类问题

据我所知,远程服务的CXF实现只实现了一个TM,这是“混杂的”,即它发布每个侦听框架中的每个可用服务。但是,您可以编写自己的TM来执行负载平衡和故障切换等


远程服务规范的编写方式使TM实现可以完全独立于任何特定的远程服务实现进行开发。

您应该能够使用ServiceTracker获得完整的服务列表。因此,创建负载平衡器的一个好方法应该是自己创建一个代理服务来进行负载平衡,并将其作为具有特殊属性的服务在本地发布。因此,您的业务应用程序可以在不了解任何负载平衡细节的情况下使用该服务。

Hi Neil,即使对于CXF DOSGi的默认TopologyManager,这听起来也是一个很好的增强。但我不确定它将如何工作。TopologyManager会创建一个实现负载平衡/故障切换逻辑的服务代理吗?@ChristianSchneider基本上是的。。。。请记住,所有远程服务本质上都是代理。然而,一般来说很难进行负载平衡。你将如何测量负载?衡量负载的方法有很多种,当然它也会快速波动。嗨,@NeilBartlett,这意味着我必须实现自己的TM来进行负载平衡,不是吗?现在,我想使用循环算法访问我的远程服务。如何实施?我的想法是:1.通过ServiceTracker.getServices()获取可用的服务;2.访问服务迭代。对吗?我缺乏负载平衡方面的经验。:)是的,这就是我想要实现的目标。创建一个代理包怎么样,它会提供一个服务,例如QueryLoadBalancement(),它将获得两个query()服务实例,并执行一些负载平衡工作,例如循环等。我将使用您代理的服务的原始接口。因此,您的业务逻辑不必知道它与一个特殊的代理进行通信。通过使用属性来标记负载平衡服务,您的业务逻辑可以过滤特殊服务,以不获取未经验证的服务。ServiceTracker只能查看本地发布的服务,因此此解决方案有两个大的假设。首先,TM是混杂的,因此所有远程服务都在本地可见。其次,TM通过某种负载信息拉入本地服务代理的属性。实际上,TM是进行负载平衡的正确位置,因为它具有端点属性的可见性,这些属性不一定反映在服务代理中。@NeilBartlett,因此,您建议实现我自己的类似于TM的CXF来处理服务和服务端点之间的通信,而不是使用另一个服务来代理它们?如果您想这样做,您应该能够使用CXF TM的源代码作为起点。如果您对如何将负载平衡集成到CXF TM有一些想法,我们可以在CXF列表中讨论。当然,您也可以为您的案例创建一个特殊的实现。谢谢您,Christian和Neil,您的回答和评论对我非常有用。但克里斯蒂安的解决方案可以解决我的问题。