Easysearch 容量规划建议
Easysearch
监控系统
2023-10-26

基于容量估算 #

主要问题: #

  • 每天将索引多少原始数据(GB)?保留数据多少天?
  • 原始数据膨胀率
  • 您将强制执行多少个副本分片?
  • 您将为每个数据节点分配多少内存?
  • 您的内存:数据比例是多少?

原则 #

  • 保留 +15% 以保持在磁盘水位以下。
  • 保留 +5% 用于误差和后台活动的余量。
  • 保留相当于一个数据节点的资源来处理故障。

公式: #

总数据量 GB = 原始数据 GB/天 * 保留天数 * 膨胀率 * (副本数 + 1)

总存储 GB = 总数据 GB * 1.15(包括磁盘 watermark threshold 和误差范围)

总数据节点数 = ROUNDUP(总存储 GB / (每个数据节点的内存 * 内存/数据比例)) + 1(用于故障转移)

举例: #

假设 需要存储的源数据 50TB 大小

膨胀率 10% 副本数 1

每个节点 256G 内存

计算出:

总数据量 TB #

= 50TB * (1 + 0.10) * (1 + 1)

= 110TB

总存储 TB #

= 110TB * 1.15(考虑磁盘 watermark threshold 和误差范围)

= 126.5TB

如果有 256GB 的物理内存,128GB 会用于 JVM 堆,剩下的 128GB 将用于操作系统、文件缓存和其他系统进程。

按照常见的 1:30 的 RAM 到磁盘比例来计算,那么每个节点能处理的数据存储大约是:

256GB 内存 * 30 = 7680GB,大约等于 7.68TB

总数据节点数 #

= ROUNDUP(126.5TB / 7.68TB) + 1(用于故障转移)

= ROUNDUP(16.47) + 1

= 18

基于搜索吞吐量估算 #

在存储容量层面之外,还要考虑搜索响应时间和搜索吞吐量的目标,这些目标可能需要更多的内存和计算资源。

搜索响应时间受太多变量的影响,无法预测任何给定容量计划会如何影响它。但通过经验性测试搜索响应时间并估计预期的搜索吞吐量,我们可以估算出满足这些需求所需的集群资源。

主要问题: #

  • 你每秒的最高搜索次数是多少?
  • 你的平均搜索响应时间(毫秒)是多少?
  • 你的数据节点上有多少个核心和每个核心有多少个线程

经验方法: #

与其确定资源将如何影响搜索速度,不如将搜索速度视为一个常数,通过在计划的硬件上进行测量来处理。然后确定集群需要多少个核心来处理预期的搜索吞吐量峰值。最终目标是防止线程池队列增长速度超过它们被消耗的速度。如果计算资源不足,搜索请求有被丢弃的风险。

公式: #

峰值线程数 = 向上取整(每秒的峰值搜索次数 * 平均搜索响应时间(毫秒) / 1000 毫秒)

线程池大小 = 向上取整((每个节点的物理核心数 * 每个核心的线程数 * 3 / 2) + 1)

总数据节点数 = 向上取整(峰值线程数 / 线程池大小)

举例: #

假设每秒 2 万搜索请求,平均响应时间 50 毫秒,每个节点有 16 个线程数,计算需要多少节点

峰值线程数 = 20000 * 50 /1000 = 1000

线程池大小 = (16 * 1 * 3/2) + 1 = 25

总数据节点数 = 1000 / 25 = 40

大概需要 40 个数据节点来处理每秒 2 万的搜索请求,平均响应时间为 50 毫秒,每个节点有 16 个线程。这是一个粗略的估计,实际需求可能会因多种因素而有所不同。建议进行实际测试以确认这些数字。

Hot, Warm, Frozen #

根据索引使用情况不同,通常分为种存储。 这是一种经济高效的方法,用于存储大量数据,同时优化了对较新数据的性能。在容量规划期间,每个层次必须独立进行规模确定,然后进行合并。

层面目标示例存储示例内存:存储比
Hot搜索为主SSD DAS/SAN (>200Gb/s)1:30
Warm存储为主HDD DAS/SAN (~100Gb/s)1:100
Frozen存档为主Cheapest DAS/SAN (<100Gb/s)1:500

实际情况要把搜索吞吐量估算和容量估算结合考虑。

标签
Easysearch x
Gateway x
Console x