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
根據索引使用情況不同,通常分為種存儲。
這是一種經濟高效的方法,用于存儲大量數據,同時優化了對較新數據的性能。在容量規劃期間,每個層次必須獨立進行規模確定,然后進行合并。
| 層面 | 目標 | 示例存儲 | 示例內存:存儲比 |
|---|---|---|---|
| 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

INFINI Easysearch 是一個分布式的近實時搜索與分析引擎,核心引擎基于開源的 Apache Lucene。Easysearch 的目標是提供一個輕量級的 Elasticsearch 可替代版本,并繼續完善和支持更多的企業級功能。 與 Elasticsearch 相比,Easysearch 更關注在搜索業務場景的優化和繼續保持其產品的簡潔與易用性。
浙公網安備 33010602011771號