容量规划示例
以下是一个关于针对以下需求列表的 Neo4j 工作负载的容量规划的简要示例
需求
需求 | 值 |
---|---|
总用户数 |
100-200(最终用户,最有可能通过前端应用程序访问) |
每个用户每天的访问次数(读取/查询) |
5 |
节点数 |
50-75 MM |
关系数 |
100-150 MM |
每个节点的属性数 |
最小 1,最大 50,平均 5 |
每个关系的属性数 |
最小 0,最大: 20,平均: 2 |
平均请求时间 |
500 毫秒 |
峰值查询每秒 |
200/秒 |
批量插入和更新的频率 |
每天 4-5 次 |
假设批量大小为提供量的 10% |
~ 每天 20 GB,500 万个节点 |
增量数据量的最大处理/摄取 |
一小时 |
RR |
在美国 + EU AWS 中 |
DR |
在 2 个美国可用区中进行 DR |
分析
1) 估计初始数据库大小约为 38GB(见下表) - 假设
-
索引的 20%
-
节点和关系的最大数量,以及每个节点和关系的平均属性数
数量 |
每个对象的字节数 |
空间(GB) |
属性小计 |
|
节点 |
75000000 |
15 |
1.048 |
|
关系 |
150000000 |
34 |
4.750 |
|
每个节点的属性 |
5 |
41 |
14.319 |
|
每个关系的属性 |
2 |
41 |
11.455 |
25.774 |
索引(百分比) |
20 |
6.314 |
||
总计 |
37.886 |
2) 假设每天负载为 500 万个节点(或 10% - 并且假设我们为了未来一年的增长而需要再增加 50% 的容量。)
3) 然后我们估计每个实例大约需要 100GB 的总内存 [ 5 GB(OS) + 60 GB(数据 + 索引 + 50% 增长) + 30GB(堆) ~ 100GB 的总内存]
4) 最后,我们估计我们需要大约 10 个 CPU 内核(或 20 个 vCPU 内核)来满足峰值需求(每秒 200 个查询,响应时间为 500 毫秒),在具有 3 个内核和 2 个 RR 的集群中(见下文)
-
每秒的并发请求数 200/秒
-
工作负载/查询处理时间 (w=0.50 秒)
-
CPU 负载系数 0.5 (c=.5 ; 也就是说 CPU 平均将占用 50% 的负载)
-
需要为之设计的实例故障数 F=1
-
内核数 = r x w / c = 200 x .5 / .5 = 200
-
集群大小 = 3 个内核 + 2 个 RR
-
每台机器的内核数 = 200/5 = 40 (或 80 个 vCPU 内核)
-
估计
-
集群配置 (5 个实例) x (每个实例 80 个 vCPU 内核,内存 100GB)
-
此页面是否有帮助?