知识卡片
Routing是查询性能优化的"王道":把查询流量按维度拆分到独立小集群
内容
Elasticsearch查询性能优化里,被反复强调为”王道”的第一手段是routing——按某个业务维度把数据和查询请求拆分引导到不同的集群,让每个集群只承担一部分查询压力。作者给出了一个反例来说明这个维度选择有多关键:曾尝试把某个查询维度(用户维度的查询)引到一个非用户routing的集群,结果这个集群直接被打垮,完全顶不住;而选对了routing维度(比如用户、城市、类目这类业务本身天然具备的划分方式)之后,把不同的查询按维度分别引入合适的集群,每个集群只需要很少的机器就能维持很低的CPU使用率和负载,慢查询几乎被消灭。这个经验揭示了一条关于查询流量治理的通用原则:应对海量查询压力,与其一味给单个集群堆机器、扩容硬件去硬扛,不如先审视查询请求本身有没有天然的、能把流量切分开的业务维度——一旦切分得当,原本一个不堪重负的大集群可以拆成多个轻装上阵的小集群,整体资源消耗反而更少,因为每个小集群只需要针对性地服务一小部分请求模式,不再需要为了应付所有可能的查询组合而过度配置。选routing维度的关键在于要找到真正能均匀切分流量、且和业务查询模式高度吻合的字段,选错维度(比如把本该独立处理的用户查询硬塞进一个不相关的集群)会直接导致这个集群被压垮,说明routing维度的选择本身需要结合具体业务的查询分布特征去反复验证,不能凭直觉套用。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.8 亿级规模的Elasticsearch优化实战"节,"2.8.2 查询性能(Query Performance)"(源文件:_epub-src/OEBPS/Text/Chapter2_8_3.xhtml)
- 结论依据:原文说明"王道是什么?routing、routing、还是routing……我们碰到过一种情况,当时想把此维度的查询(即用户查询)引到非用户routing集群,结果集群完全顶不住!……这样做以后,每个集群只需要很少的机器,而且保持很小的CPU Usage和LA,查询速度也更快,慢查询几乎消灭",直接支撑本卡片结论。
- 原始内容:王道是什么?routing、routing、还是routing……我们碰到过一种情况,当时想把此维度的查询(即用户查询)引到非用户routing集群,结果集群完全顶不住!……这样做以后,每个集群只需要很少的机器,而且保持很小的CPU Usage和LA,查询速度也更快,慢查询几乎消灭。