要缓存的数据:
需要建议生产和测试中的Coherence拓扑(随备份一起分发)
问题
我们不知道将完成多少次读取操作,该解决方案将由低响应时间至关重要的客户端(超过数据一致性)使用,并取决于每个用例。通过以固定频率轮询并填充缓存,将从DB更新缓存(因为缓存是数据主服务器,而不是使用缓存的系统)。
答案 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)索引内存使用情况因数据类型和数据而异。最好使用代表性数据集(包括索引和不使用索引)进行测试,以查看内存使用差异。