我的要求是在群集中共享一个java对象。
我感到困惑
具有
的约束任何人都可以考虑到这些限制条件,提出最佳选择。
答案 0 :(得分:4)
它可能取决于您要在群集中共享的对象的用例。
我认为它归结为最复杂到最不复杂的
中的以下选项分布式缓存 http://www.ehcache.org
如果需要确保可以从每个节点上的缓存访问对象,则分布式缓存很有用。我已经使用ehache进行了非常成功的分发,除非你需要比例,否则无需设置兵马俑服务器,只需通过rmi将实例指向一起即可。也可以根据需要同步和异步工作。如果节点出现故障,缓存复制也很方便,因此缓存实际上是多余的,不会丢失任何东西。如果您需要确保在所有节点上更新了对象,那就太好了。
群集执行/数据分发 http://www.hazelcast.com/
Hazelcast也是一个很好的选择,它提供了一种在集群中执行java类的方法。如果您有一个表示需要执行的工作单元的对象,并且您不太关心它执行的位置,那么这将更有用。
对分布式集合也很有用,即分布式映射或队列
滚动您自己的RMI / Jgroup
可以编写自己的客户端/服务器,但我认为如果您处理的对象的要求开始变得复杂,您将开始遇到更大框架解决的问题。实际上Hazelcast非常简单,应该真的不需要自己动手。
答案 1 :(得分:1)
它不是开源的,但Oracle Coherence可以轻松解决这个问题。
如果你需要JCache的实现,那么我唯一知道今天可用的是Oracle Coherence;见:http://docs.oracle.com/middleware/1213/coherence/develop-applications/jcache_part.htm
为了充分披露,我在Oracle工作。本文中表达的观点和观点是我自己的,不一定反映我的雇主的意见或观点。
答案 2 :(得分:0)
您可能会考虑使用RMI和/或动态代理。
*动态代理可以包装任何对象,并在每个方法调用上执行一些前后任务。在这种情况下,它可能使用原始对象进行RMI调用