2015年12月25日星期五

JDG_014:缓存节点规划以及容量估算

假定每个JDG节点的堆内存容量估算后的大小为H,那么其推算过程如下:

1. 期望每个JDG节点的堆内存大小是多少?(变量=>S)

2. 估算一条数据的长度。(变量=>x)
  (1)x = 序列化后的Key + 序列化后的Value + 200 bytes 元数据

3. 期望多少条数据放入缓存中?(变量=>y)

4. 考虑到数据同步与计算的冗余,需要给堆内存留出一部分“空闲”空间。(变量=>p,默认0.5)

5. 部署模式是哪种?Local,Distributed,还是 Replicated mode?
    (1)如果是 Local 或 Replicated mode,那么 H = (x * y) / p,这里 S 必须大于 H。
    (2)如果是 Distributed mode,owners=n(变量=>n),那么1份数据需要的JDG节点数是 (x * y) / (S * p) + 1,n份数据需要的JDG节点数是 ((x * y) / (S * p) + 1) * n。

现在我们根据真实使用案例,实际推算一下。
(1)S = 32 G
(2)x = 10 + 35 + 200 = 245 bytes
(3)y = 1,000,000,000 (10 亿条)
(4)p = 0.5
(5)Distributed mode,owners = 3

数据总量是 245 * 1000000000 = 245 G
每个JDG节点可用来存储数据的内存 = 32 * 0.5 = 16 G
1份数据需要的JDG节点数= ((245 * 1) / (32 * 0.5) + 1) = 16
3份数据需要的JDG节点数= ((245 * 1) / (32 * 0.5) + 1) * 3 = 48

参考文献:
1. https://mojo.redhat.com/docs/DOC-174679