
文章插图
时序数据可视化面板
3.3 搜索服务场景 搜索服务典型场景有像京东、拼多多、蘑菇街中的商品搜索;应用商店中的应用 App 搜索;论坛、在线文档等站内搜索 。这类场景用户关注高性能、低延迟、高可靠、搜索质量等 。如单个服务最大需达到 10w+ QPS , 请求平均响应时间在 20ms 以内 , 查询毛刺低于 100ms , 高可用如搜索场景通常要求 4 个 9 的可用性 , 支持单机房故障容灾等 。目前云上 Elasticsearch 服务已支持多可用区容灾 , 故障分钟级恢复能力 。通过 ES 高效倒排索引 , 以及自定义打分、排序能力与丰富的分词插件 , 实现全文检索需求 。在开源全文检索领域 , ES 在 DB-Engines 搜索引擎类别持续多年排名第一 。

文章插图
DB-Engines搜索引擎排名
4.腾讯 Elasticserch 服务公司内外部均有大量的日志实时分析、时序数据分析、全文检索需求场景 。目前我们已联合 Elastic 公司在腾讯云上提供了内核增强版 ES 云服务简称 CES , 其中内核增强包括 Xpack 商业套件和内核优化 。在服务公司内部以及公有云客户过程中 , 也遇到了较多问题和挑战 , 比如超大规模集群 , 千万级数据写入 , 以及云上用户丰富的使用场景等 。下面主要介绍我们在内核层面 , 从可用性 , 性能 , 成本等方面进行的优化措施 。
4.1 可用性优化

文章插图
可用性 问题表现在三个方面 , 第一 , ES 内核 系统健壮性不足 , 这也是分布式系统共性难题 。例如异常查询、压力过载集群容易出现雪崩 。集群可扩展性不足 , 比如集群分片数超 10w 会出现明显的元数据管理瓶颈 。以及集群扩容、节点异常后加回集群 , 存在节点、多硬盘之间数据不均问题 。第二 , 容灾方面 需保障机房网络故障时可快速恢复服务 , 自然灾害下防止数据丢失 , 误操作后快速恢复数据等可靠性、数据安全性问题 。另外也包括在运营过程中也发现的一些 ES 系统缺陷 , 比如说 Master 节点堵塞、分布式死锁、滚动重启缓慢等 。

文章插图
针对上面的问题 , 在 系统健壮性 方面 , 我们通过服务限流 , 容忍机器网络故障、异常查询等导致的服务不稳定问题 。通过优化集群元数据管理逻辑 , 提升集群扩展能力一个数量级 , 支持千亿节点集群、百万级分片数 。集群均衡方面 , 通过优化节点、多硬盘间的分片均衡 , 保证大规模集群的压力均衡 。
容灾方案 方面 , 我们通过扩展 ES 的插件机制实现数据备份和回档 , 可把 ES 的数据备份到 COS , 保障数据安全性;通过管控系统建设支持跨可用区容灾 , 用户可以按需部署多个可用区 , 以容忍单机房故障 。采用垃圾桶机制 , 保证用户在欠费、误操作等场景下 , 集群数据可快速恢复 。系统缺陷方面 , 我们修复了滚动重启、Master 阻塞、分布式死锁等一系列 Bug 。其中滚动重启优化 , 可加速节点重启速度 5+倍 。Master 堵塞问题 , 我们在 ES 6.x 版本和官方一起做了优化 。
4.2 性能优化性能 问题 , 比如以日志、监控为代表的时序场景 , 对写入性能要求非常高 , 写入并发可达 1000w/s 。然而我们发现在带主键写入时 , ES 性能会衰减 1+倍 。压测场景下发现 CPU 存在无法充分利用的情况 。通常搜索服务对查询性要求非常高 , 一般要求 20w QPS, 平均响应时间小于 20ms , 并且需尽量避免 GC、以及执行计划不优等造成的查询毛刺问题 。

文章插图
为了解决这些问题 。写入方面 , 针对主键去重场景 , 我们通过利用段文件上记录的最大最小值进行查询裁剪 , 加速主键去重的过程 , 写入性能提升 45% , 具体可参考Lucene-8980 。对于压测场景下 CPU 不能充分利用的问题 , 通过优化 ES 刷新 Translog 时锁粒度 , 避免资源抢占 , 提升性能提升 20% , 具体可参考ES-45765 /47790 。我们也正在尝试通过向量化执行优化写入性能 , 通过减少分支跳转、指令 Miss , 预期写入性能可提升 1 倍 。
推荐阅读
- PyCharm 快速上手指南!你还在等什么
- 酱香茶叶蛋的做法,快速茶叶蛋的做法是什么
- 万字干货,Python语法大合集,一篇文章带你入门
- 快速了解安吉白茶,福鼎白茶和安吉白茶有什么区别
- 韩国茶文化的发展介绍,茶文化引领信阳茶叶产业快速发展
- 耳机|只要199!一加耳机双发:充电10分钟 听歌20小时
- 河南开封茶产业,茶文化引领信阳茶叶产业快速发展
- 如何让百度快速收录我们的网站
- 很简单茶叶蛋的做法,快速茶叶蛋的做法是什么
- 简单、快速解决系统分区C盘空间不足的3种方法
