我可以使用Terracotta来扩展RAM密集型应用程序吗?

问题描述:

我在评估兵马俑,以帮助我扩大目前RAM有限的应用程序。它是一个协作过滤器,每个用户存储大约2千字节的数据。我想使用亚马逊的EC2,这意味着我仅限于14GB的内存,这使得我有效的服务器上限约为700万用户。我需要能够扩展到这个范围之外。我可以使用Terracotta来扩展RAM密集型应用程序吗?

根据我的阅读结果,我发现Terracotta可以拥有比每台服务器上可用RAM大的群集堆。拥有30GB或更高的有效群集堆是否可行?每台服务器只支持14GB?

每用户数据(其中大部分是浮点数组)变化非常频繁,每分钟可能会有数十万次。这些更改中的每一个更改都不需要在集群中的其他节点发生同步时进行同步。是否有可能只定期同步一些对象字段?

+0

分片redis集群可能是一个更简单的方法,可以在这种情况下工作吗? – cobbzilla 2016-07-28 23:59:00

我想说这个答案是肯定的。兵马俑确实允许你使用大于单个JVM大小的群集堆,尽管这不是最常见的用例。

您仍需记住a)工作集大小和b)数据流量。对于a)来说,在任何给定的时间内都有一些数据必须在内存中执行,如果该工作集大小>堆大小,性能显然会受到影响。对于b),群集堆中添加/更新的每条数据都必须发送到服务器。兵马俑是最好的,当你改变pojo图中的细粒度的领域。使用大型阵列并不能充分利用兵马俑的能力(这并不是说人们有时候不会这么用)。

如果你正在创建大量的垃圾,那么Terracotta内存管理器和分布式垃圾回收器必须能够跟上这一点。如果您的数据量超过了可用带宽,很难说没有尝试过。

如果您运行多个服务器并且数据由服务器分区或具有一定数量的引用位置,则您的应用程序将受益匪浅。在这种情况下,您只需要堆中一个服务器分区的数据,其余部分不需要存入内存。如果其他服务器出现故障,它当然会在必要时出现故障转移/可用性故障。这意味着在分区数据的情况下,您不会向所有节点广播,只会将事务发送到服务器。

从数字的角度来看,可以对30GB的数据进行索引,因此不会接近任何硬性限制。

+0

快速跟进:我听说如果你使用带有Terracotta的HashMap,那么这些值可以分布,但是密钥将在任何地方都被镜像。这是真的?不同的Map集合的行为会有所不同吗? – sanity 2008-09-22 23:16:50