连贯性拓扑建议

时间:2011-05-10 10:39:41

标签: topology oracle-coherence

要缓存的数据:

  • 100 Gb数据
  • 大小为500-5000字节的对象
  • 每分钟平均更新/插入1000个对象(峰值5000)

需要建议生产和测试中的Coherence拓扑(随备份一起分发)

  • 服务器数量
  • 每台服务器的节点
  • 每个节点的堆大小

问题

  • 与缓存数据使用的内存相比,每个节点需要多少可用内存(假设无法使用100%)
  • 每个缓存元素生成1-2个附加索引需要多少开销?

我们不知道将完成多少次读取操作,该解决方案将由低响应时间至关重要的客户端(超过数据一致性)使用,并取决于每个用例。通过以固定频率轮询并填充缓存,将从DB更新缓存(因为缓存是数据主服务器,而不是使用缓存的系统)。

2 个答案:

答案 0 :(得分:7)

为Coherence调整JVM大小的经验法则是数据是假设1个备份的堆的1/3:缓存数据的1/3,备份的1/3,索引和开销的1/3。 / p>

调整大小的最大困难是没有很好的方法来估计索引大小。您必须尝试使用​​实际数据并进行衡量。

JDK 1.6 JVM的经验法则是从4GB堆开始,因此您需要75个缓存服务器节点。有些人成功拥有更大的堆(16GB),所以值得尝试。对于大堆(例如,16GB),您不需要1/3的开销,并且可以容纳超过1/3的数据。随着堆大于16GB,垃圾收集器调整变得至关重要。

为获得最佳性能,每个节点应该有1个核心。

服务器计算机的数量取决于可管理性,容量(核心和内存)和故障的实际限制。例如,即使您有一台可以处理32个节点的服务器,当机器出现故障时您的集群会发生什么?群集将是机器安全的(备份不在同一台机器上),但是如果要将大量数据移动到新备份,恢复将非常缓慢。另一方面,75台机器难以管理。

我已经看到Coherence对于1K对象放置具有250微秒(不是毫秒)的延迟,包括网络跳和备份。因此,您正在寻找的插入和更新数量应该是可以实现的。使用多个线程插入/更新进行测试,并确保您的测试客户端不是瓶颈。

答案 1 :(得分:2)

还有一些“经验法则”:

1)对于高可用性,三个节点是最好的。

2)使用Java 7,您可以使用更大的堆(例如27GB)和G1垃圾收集器。

3)对于100GB的数据,使用David的指南,您将需要300GB的堆总数。在具有128GB内存的服务器上,可以使用3台物理服务器完成,每台服务器运行4个JVM,每个服务器堆27GB(总共约324GB)。

4)索引内存使用情况因数据类型和数据而异。最好使用代表性数据集(包括索引和不使用索引)进行测试,以查看内存使用差异。