文档首页> 云搜索服务 CSS> 最佳实践> 规划集群与索引
更新时间:2024-02-23 GMT+08:00

规划集群与索引

云搜索服务(Cloud Search Service,简称CSS),支持灵活选择集群版本、集群架构、存储机型、集群节点数量、存储容量和索引分片数。您可以根据业务的读写请求、数据存算和搜索与分析等需求进行自由组合。

CSS集群选型主要包括以下内容:

集群版本

CSS中的Elasticsearch搜索引擎目前支持7.6.2和7.10.2版本,版本选择建议如下:

  1. 新上线的Elasticsearch集群,建议选择7.10.2或7.6.2版本。
  2. 如果有Elasticsearch集群迁移与代码改造的需求,建议优先选择7.10.2或7.6.2版本,否则建议和之前的大版本保持一致。

集群架构

CSS支持读写分离、冷热分离、存算分离、角色分离、跨AZ部署等多种架构。架构适用的场景如下所示:

架构

适用场景

用户价值

读写分离

生产业务,读多写少,数据写入后实时可见性要求低(10s+)。

高并发、低时延

冷热分离

日志业务,冷数据查询性能要求低。

低成本

存算分离

日志业务,冷数据不需要更新,并且冷数据查询性能要求低(10s+);可以和冷热分离结合使用,构建“热-温-冷”3级存储。

低成本

角色分离

集群的规模较大、集群中的索引数量较多或集群可扩展性要求高。

高可用

跨AZ部署

对可用性要求非常高的生产业务,或采用本地盘时。

高可用

存储机型

CSS支持云盘和本地盘两种机型。

  • 云盘机型包括:计算密集型(CPU:内存=1:2)、通用计算型(CPU:内存=1:4)、内存优化型(CPU:内存=1:8)。
  • 本地盘机型包括:磁盘增强型(挂载HDD盘)、超高IO型(挂载SSD盘)。

    各机型适用的场景如下:

表1 存储机型适用场景

机型

适用场景

计算密集型

推荐场景:数据量较少(单节点<100GB)的搜索场景。

通用计算型

通用场景:用于单节点数据量在100-1000GB间的搜索与分析场景,例如中等规模的电商搜索、社交搜索、日志搜索等场景。

内存优化型

通用场景:用于单节点数据量在100-2000GB间的搜索与分析场景

向量检索场景:大内存有利于提升集群的性能与稳定性。

磁盘增强型

日志场景:用于存储冷数据,冷数据的数据查询性能要求低,并且数据需要更新的场景。

超高IO型-鲲鹏

大型日志场景:用于存储热数据。

超高IO型-X86

大型搜索与分析场景:场景对计算或磁盘IO均有较高要求,例如舆情分析、专利检索、以及部分数据库加速场景。

集群节点数量

当CSS集群的构架与机型确定后,集群的节点数主要由业务对性能的要求决定。

表2 节点数量计算方式

类型

性能基线

节点数量计算方式

示例

写入节点

对于挂载云盘的节点,其单核写入性能基线为1MB/s。

对于超高IO型的节点,其单核写入性能基线为1.5MB/s。

业务峰值时的流量/单节点的核数/单核写入性能基线*副本数

业务峰值写入100MB/s,使用16u64g的节点,预计需要100/16/1*2 = 12个节点。

查询节点

相同节点,不同业务场景下的性能差异非常大,单节点的性能基线难以评估。这里以业务平均查询响应时间作为查询的性能基线进行测算。

QPS/{单节点的核数*3/2/平均查询响应时间(s)}*分片数量

查询QPS要求1000,平均查询响应时间100ms,索引规划3个分片,使用16u64g的节点,预计需要1000/{16*3/2/0.1}*3 = 12个节点。

节点数量

/

节点数量= 写入节点数 + 查询节点数

节点数= 写入节点数 + 查询节点数 = 24个节点数。

在同等集群性能的情况下,建议优先选择高配置少节点的集群。例如32C64G*3 节点的集群相比于8C16G*12节点的集群,在集群稳定性和扩容的便捷性上都有一定的优势。因为高配置的集群如果遇到性能瓶颈需要扩容,则只需要横向扩容,即向集群中加入更多同等配置的节点即可;而低配置的集群在扩容节点配置时,则需要纵向扩容。

节点存储容量

CSS集群中每个节点的磁盘空间由数据量、副本数量(一般建议为1)、数据膨胀率、磁盘空间使用率(一般建议为70%)规划等多个因素决定,可以通过以下公式来计算集群的存储容量:

存储容量 = 源数据 * (1 + 副本数量) * 1.25 * (1 + 预留空间) ≈ 源数据 * 2 * 1.25 * 1.3 =源数据*3.25

索引分片数

CSS集群的索引分片数,建议按照以下要求规划:

  1. 单个分片大小控制在10~50GB。
  2. 集群总分片数量控制在3w以内。
  3. 1GB的内存空间放置20~30个分片为佳,单节点建议不超过1000个分片。
  4. 对于单个索引,索引分片数建议和节点数保持一致,或者为节点数的倍数。