具有局部性的Java分布式对象?
我正在评估应用服务器的各种Java对象分发库(Terracotta、JCS、JBoss、Hazelcast…),我很难理解它们在不同轴上的行为 我对分布式对象的需求并不多——它们可以归结为一对一和一对多消息传递。还有更多,但对于其余部分,我们只使用JDBC,我假设我可以使用任何可用的库在它前面插入一个缓存 我想要一个能够分发对象并展示局部性属性的系统——换句话说,一个能够抓取对象的服务器倾向于抓住它,而不会与其他节点进行过度通信。Hazelcast看起来很简单(点对点也不错),但似乎要求对象均匀分布在所有节点上 我想要一种保存对象的方法,最好是透明的。我计划使用EC2,所以我可以选择临时、免费、有限的本地存储(磁盘)和永久、非免费、无限的存储(S3)。不用担心OutOfMemoryErrors会很好 我喜欢赤陶的简单和“魔力”,但它把我吓坏了。此外,为了真正实现规模化,您必须花费$$$,否则您将与单个中心进行通信 我很便宜,我想要的东西不仅是免费的,而且是成熟的,并且拥有大量的用户群具有局部性的Java分布式对象?,java,cluster-analysis,terracotta,jboss-cache,jcs,Java,Cluster Analysis,Terracotta,Jboss Cache,Jcs,我正在评估应用服务器的各种Java对象分发库(Terracotta、JCS、JBoss、Hazelcast…),我很难理解它们在不同轴上的行为 我对分布式对象的需求并不多——它们可以归结为一对一和一对多消息传递。还有更多,但对于其余部分,我们只使用JDBC,我假设我可以使用任何可用的库在它前面插入一个缓存 我想要一个能够分发对象并展示局部性属性的系统——换句话说,一个能够抓取对象的服务器倾向于抓住它,而不会与其他节点进行过度通信。Hazelcast看起来很简单(点对点也不错),但似乎要求对象均匀
谢谢您的意见。陶土似乎非常适合您的情况
- 设置起来很简单
- 可以将其配置为持久性(将EBS卷用于EC2)
- 它与Ehcache(实际上是Terracotta购买的Ehcache)紧密集成,以获得出色的分布式缓存性能
- 这项免费服务在多个客户中的规模相当大
我不得不承认,我已经一年没有用过赤陶了,而且我不知道你建议的其他产品。赤陶确实符合要求。我理解你的反对意见,但以下是我的评论: 1) 兵马俑确实展示了地方性——与你提到的那些相比,它可能是最好的系统。对象仅在被请求时才引入本地JVM。使用租用机制执行读或写锁定。这意味着,如果您在系统中表现出完美的局部性,那么您将产生很少的网络开销 2) Terracotta在OSS版本中提供了开箱即用的磁盘持久性(您无需支付$$$) 3) 你为什么这么害怕?只需将EHCache用作缓存,或者使用Hibernate二级插件。它的设置和使用非常简单 4) 是的,Terracotta FX要求您支付(扩展服务器)。然而,我建议,如果你有一个系统,主要是阅读和展示真实的地方,那么我不认为你会有一个问题,你要找的规模。在Terracotta 3.2中,Hibernate二级缓存的性能是100000 ops/s,使用8台应用服务器和一台Terracotta服务器,读/写比率为100/0,使用相同的配置,读/写比率为95/5
(我刚刚为Bay Area SDForum做了一个关于这些数字的演讲,所以我碰巧手头有这些数字)顺便说一句,不清楚您在寻找什么(消息传递与集群/分布式对象不同)
如果您正在寻找Java中的消息传递,我建议您看看RabbitMQ(它基于Erlang,但这并不重要)。是的,Hazelcast将在集群中分发您的对象。但是,如果希望降低通信成本,可以启用近缓存。
我确实喜欢TC,但我对自己的对象使用DSO进行的测试没有那么好。除非你做了大量的测试(或者在生产中发现),否则你不会学到一些小麻烦。也许EHCache会更像傻瓜。我查看了RabbitMQ,但它有一个缺陷,即还不能持久化到磁盘(很快就会出现)。我希望将集群对象/分布式缓存/消息传递需求合并到一个系统中,以降低复杂性。