写点什么

Easysearch 容量规划建议

作者:极限实验室
  • 2023-10-27
    广西
  • 本文字数:1246 字

    阅读完需:约 4 分钟

Easysearch 容量规划建议

基于容量估算

主要问题:

  • 每天将索引多少原始数据(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

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



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


发布于: 刚刚阅读数: 4
用户头像

简单、易用、极致、创新 2021-11-22 加入

极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

评论

发布
暂无评论
Easysearch 容量规划建议_数据库_极限实验室_InfoQ写作社区