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

san*_*ity 7 java terracotta scalability amazon-ec2

我正在评估Terracotta,以帮助我扩展目前RAM限制的应用程序.它是一个协作过滤器,每个用户存储大约2千字节的数据.我想使用亚马逊的EC2,这意味着我只限制了14GB的RAM,这使我的每服务器有效上限约为700万用户.我需要能够超越这个范围.

根据我的阅读情况,我认为Terracotta可以拥有比每台服务器上的可用RAM更大的集群堆.拥有30GB或更高的有效群集堆是否可行,其中每个服务器仅支持14GB?

每用户数据(其中大部分是浮点数组)变化非常频繁,可能每分钟数十万次.这些更改中的每一个都不必在它们发生时同步到集群中的其他节点.是否可以定期同步某些对象字段?

Ale*_*ler 4

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

您仍然需要记住 a) 工作集大小和 b) 数据流量。对于a),内存中必须存在一些数据集才能在任何给定时间执行工作,并且如果该工作集大小>堆大小,则性能显然会受到影响。对于b),聚簇堆中添加/更新的每条数据都必须发送到服务器。当您更改 pojo 图中的细粒度字段时,Terracotta 是最好的选择。使用大数组并不能充分利用 Terracotta 功能(这并不是说人们有时不那样使用它)。

如果您创建了大量垃圾,那么 Terracotta 内存管理器和分布式垃圾收集器必须能够跟上。如果不尝试,很难说您的数据量是否超出了可用带宽。

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

从数字的角度来看,可以索引 30GB 的数据,因此这还没有接近任何硬限制。