Java分布有局部性的对象?

时间:2010-02-19 17:43:34

标签: java cluster-analysis terracotta jboss-cache jcs

我正在为应用服务器评估各种Java对象分发库(Terracotta,JCS,JBoss,Hazelcast ......),我无法理解它们在各种轴上的行为。

我对分布式对象的要求并不多 - 它们归结为一对一和一对多的消息传递。还有更多,但其余的我们只使用JDBC,我假设我可以使用任何可用的库在前面填充缓存。

我想要一个分配对象并展示位置属性的系统 - 换句话说,抓取对象的服务器往往会保留它而不会与其他节点进行过多的通信。 Hazelcast看起来很简单(点对点很好),但似乎要求对象在所有节点上均匀分布。

我想要一种保持物体的方法,最好是透明的。我打算使用EC2,因此我可以选择临时,免费,有限的本地存储(磁盘)和永久,非免费,无限存储(S3)。不要担心OutOfMemoryErrors。

我喜欢赤土陶器的简洁和“神奇”,但它吓跑了我的蜜蜂。另外,为了真正扩展,您必须花费$$$$,否则您将与单个集线器进行通信。

我很便宜,我想要的东西不仅是免费的,而且是成熟的,拥有庞大的用户群。

感谢您的任何意见。

4 个答案:

答案 0 :(得分:2)

Terracotta似乎非常适合您的情况。

  • 设置简单
  • 可以将其配置为持久性(使用EC2的EBS卷)
  • 它与Ehcache紧密集成(实际上是Terracotta购买了Ehcache)以获得出色的分布式缓存性能
  • 免费提供的产品与几个客户相当。

开始玩它。我打赌你会喜欢它。为了减轻您的性能恐惧,只需对消息传递执行一个直通测试。这不应该花费你一个下午的时间。

我必须承认我没有使用过兵马俑一年,而且我不知道你建议的其他人。

答案 1 :(得分:1)

Terracotta确实符合要求。我理解你的反对意见,但这是我的意见:

1)Terracotta确实展示了地方性 - 与你提到的相比,它可能是最好的系统。对象仅在请求时引入本地JVM。使用租赁机制执行对读取或写入的锁定。这意味着如果您在系统中展示出完美的位置,那么您将产生很少的网络开销。

2)Terracotta提供开箱即用的磁盘持久性 - 在OSS版本中(您不必支付$$$$)

3)为什么这么吓到你?只需使用EHCache作为缓存,或使用Hibernate二级插件。它的设置和使用非常简单。

4)是的,Terracotta FX要求您支付(用于横向扩展服务器)。但是我建议如果你的系统主要是阅读并展示真实的地方,那么我认为你没有问题获得你想要的规模。使用Terracotta 3.2,Hibernate二级缓存的性能为100,000 ops / s,使用8个应用程序服务器和一个Terracotta服务器,读取/写入比率为100/0,使用相同的配置为95,000读/写比率为12,000 ops / s。

(我刚刚就湾区SDForum就这些数字进行了一次谈话,所以我碰巧把它们放在手边)

答案 2 :(得分:1)

是Hazelcast将在群集中分发您的对象。但是,如果要降低通信成本,则可以启用近缓存。 http://www.hazelcast.com/documentation.jsp#MapNearCache

答案 3 :(得分:0)

顺便说一句,目前还不清楚你在寻找什么(消息传递与集群/分布式对象不同)。

如果您正在寻找使用Java的消息传递,我建议您查看RabbitMQ(它是基于Erlang的,但这没关系)。