电商场景下 ES 搜索引擎的稳定性治理实践
继上文在完成了第一阶段 ES 搜索引擎的搭建后,已经能够实现对千万级别的商品索引的读写请求的支持。目前,单机房读流量在 500~1000 QPS 之间,写流量在 500 QPS 左右。
- 阶段一:不知道自己不知道(Unconscious incompetence)
- 阶段二:知道自己不知道(Conscious incompetence)
- 阶段三:知道自己知道(Conscious competence)
- 阶段四:不知道自己知道(Unconscious competence)
治理思路
治理的目标是什么
如何量化目标
如何达成目标
优化措施
- Search 查询有数据缓存而 Scroll 没有:在Search API 中,ES 会执行查询并返回匹配的结果集。这些结果通常是直接从索引中检索的,并且在查询时可能会使用缓存来提高性能。一旦查询完成,ES 会将结果缓存在内存中,以便稍后进行排序、分页等操作。这样,在后续的请求中,如果只需要访问缓存中的数据,可以避免重新计算和访问磁盘,从而减少了 CPU 的消耗。相比之下,Scroll API 在处理流量时不会使用缓存。它的工作方式是创建一个游标(Cursor),并在服务器端维护一个快照,以便在后续的请求中能够继续从上一个请求的位置继续返回结果。这意味着 每次请求都需要重新计算和访问磁盘上的数据,并且不能利用缓存。这会导致更多的 CPU 计算和磁盘访问,从而增加了 CPU 的消耗。
- Search 是无状态查询,Scroll 需要上下文维护:Scroll API 需要维护上下文信息,以便在后续的请求中能够正确地返回结果。这个上下文信息可能包括游标位置、排序信息、过滤条件等。为了保持这些上下文的一致性和完整性,ES 需要在服务器端维护和更新相关的状态。
- 这不意味着 Scroll API 一定比 Search API 更耗 CPU。实际的 CPU 消耗还受到多个因素的影响,包括查询的复杂性、数据量的大小、硬件配置等,需要结合实际情况观测。
ES 查询链路治理
将 ES 不合规的 Scroll 流量全部迁走
ES 慢查询治理
- Terms 查询在每次查询的数量过大时都会导致慢查询,系统当时存在每次 Terms 查询 万个商品的场景,耗时在 1s+,商品写流量进来后,查询耗时翻好几倍,CPU 被打满。
- 对 Double 类型字段做 Term 查询,因为检索方式和数据结构不匹配,同样还是因为数据量过大,导致慢查询。
- 高区分度字段 Terms 聚合。
Range 查询优化
- Range 查询走普通查询,不通过 Filter 过滤器缓存。
- 优化 Range 查询,比如指定时间区间查询,提高分片维度请求缓存命中率,并降低缓存频繁构建和垃圾回收频率。
仅查询需要的字段
ES 写入链路治理
仅写入需要索引的字段
Nested 索引优化
消息乱序问题
- 通过 Client SDK 发送数据时,如果发送失败则会快速重试发送到其它 Queue,此时同一个 Key 的消息在不同的 Queue 中造成消息乱序到达 ES;
- RocketMQ 如果出现发生 Rebalance,可能会导致同一组消息同时给多个消费者消费,从而发生 ABA 覆盖写问题。
- 采用比价的 Version 乐观锁控制,采用 Script+Verison 写,但是由于 Script 的写入性能不高,而且比价目前的写入流量最高 2k+,未来随着商品量级增加会更多,所以未采用。
- 采用 ES 的 Version 版本号控制,写入时带上 Version 版本号,但是因为前面介绍过我们的一条报名记录会有多个写入入口,全局 Version 版本号的形式成本太高,也未采用。
- ✅ 采用批量聚合消费的方式。即 FaaS 单条消费改为批量消费,按照最大消息数或者聚合时间消费聚合,这样可以处理单条消息并发更新的 Case。采用该方式首先因为改动成本低,本身的 SDK 也能够支持,可以聚焦解决问题,少量 Case 依然使用对账 T+1 补偿的方式。
ES 资源隔离
治理效果
- ES 集群资源使用情况符合预期,不再出现 CPU 暴涨、CPU 被打满、持续慢查询情况,基本解决了非预期的 CPU 增长问题,系统性能保持稳定。
- ES 索引文档数从 40 亿缩减到 2 亿+,ES 写性能提升 20%+,写入 QPS 最高可支持 1w+,性能上可以超出业务需求满足业务使用。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云PAI大模型RAG对话系统最佳实践
去年4月至9月,阿里云人工智能平台 PAI 团队与大数据基础工程技术团队合作,构建了基于知识库检索增强的大模型答疑对话机器人,并在阿里云官方答疑链路、研发小蜜、钉钉大数据技术服务助手等多个线上场景上线,显著提升答疑效率。相关文档:【万字长文】基于阿里云PAI搭建知识库向量检索增强的大模型对话系统 上线几个月来,随着 RAG 技术日趋火热,我们保持对线上链路的迭代,不断加入学界业界最新的 RAG 优化技术(eg: advanced RAG),改进了包括知识入库、query 改写、多路检索、召回融合、结果重排序、prompt 工程等在内的多个 RAG 模块,线上提效显著。 目前本轮优化已上线阿里云官网最佳实践,并开源在 PAI-RAG 代码库中。随着 RAG 技术迅猛发展,我们在不断跟进最新优化技术,并迭代加入代码库与最佳实践中。 阿里云官网:阿里云大模型RAG对话系统最佳实践 开源代码库 本文为大模型RAG对话系统最佳实践,旨在指引AI开发人员如何有效地结合LLM大语言模型的推理能力和外部知识库检索增强技术,从而显著提升对话系统的性能,使其能更加灵活地返回用户查询的内容。适用于问答、摘要...
- 下一篇
80岁图灵奖得主再度出山,打造基于数据库的云原生操作系统 DBOS
数据库领域一共出了四位图灵奖获得者,按照先后顺序分别是: 开创数据库品类的 Charles Bachman 发明数据库关系模型的 Edgar F. Codd 实现第一个关系型数据库系统 System R,引入 ACID 的 Jim Gray 以及本文的主人公 Michael Stonebraker,也是唯一健在的一位 Stonebraker 教授之前在伯克利,现在在 MIT。他主要的贡献来自于两方面,一方面是在数据库理论上,引入对象概念,如今知名的 PostgreSQL 数据库的前身就是他发起的 Ingres 项目。Postgres 既是 Post-Ingres,后来加上了 SQL 层,才变成了今天的 PostgreSQL。另一方面是在工业界的实践,教授是一名连续创业者。最早基于 Postgres 工作创立了 Illustra,卖给了当年的数据库巨头 Informix。后来又先后创立了 Vertica 以及 VoltDB。 本来以为教授该颐养天年了,没想到以 80 岁高龄,再度出山。这次老爷子还跨界了,把手伸到了操作系统领域,要把操作系统建在数据库上。通常的认知里,数据库是建在操作系统...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19