我正在为应用服务器评估各种Java对象分发库(Terracotta,JCS,JBoss,Hazelcast ......),我无法理解它们在各种轴上的行为。
我对分布式对象的要求并不多 - 它们归结为一对一和一对多的消息传递。还有更多,但其余的我们只使用JDBC,我假设我可以使用任何可用的库在前面填充缓存。
我想要一个分配对象并展示位置属性的系统 - 换句话说,抓取对象的服务器往往会保留它而不会与其他节点进行过多的通信。 Hazelcast看起来很简单(点对点很好),但似乎要求对象在所有节点上均匀分布。
我想要一种保持物体的方法,最好是透明的。我打算使用EC2,因此我可以选择临时,免费,有限的本地存储(磁盘)和永久,非免费,无限存储(S3)。不要担心OutOfMemoryErrors。
我喜欢赤土陶器的简洁和“神奇”,但它吓跑了我的蜜蜂。另外,为了真正扩展,您必须花费$$$$,否则您将与单个集线器进行通信。
我很便宜,我想要的东西不仅是免费的,而且是成熟的,拥有庞大的用户群。
感谢您的任何意见。
答案 0 :(得分:2)
Terracotta似乎非常适合您的情况。
开始玩它。我打赌你会喜欢它。为了减轻您的性能恐惧,只需对消息传递执行一个直通测试。这不应该花费你一个下午的时间。
我必须承认我没有使用过兵马俑一年,而且我不知道你建议的其他人。
答案 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的,但这没关系)。