7

我正在评估 Terracotta 以帮助我扩展当前受 RAM 限制的应用程序。它是一个协同过滤器,每个用户存储大约 2 KB 的数据。我想使用 Amazon 的 EC2,这意味着我被限制为 14GB 的 RAM,这为我提供了大约 700 万用户的有效每服务器上限。我需要能够超越这个规模。

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

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

4

1 回答 1

4

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

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

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

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

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

于 2008-09-22T21:25:37.423 回答