在完全兼容开源内核的基础上,腾讯云 Elasticsearch Service(ES)基于多场景大规模的丰富应用经验,围绕集群性能增强、稳定性提升、成本优化等方向,对 ES 内核进行了持续的深度研究和优化,并始终与开源社区保持着密切的交流。本文为您介绍腾讯云 ES 的关键内核优化工作。
2024年10月发布的重点优化特性:
优化分类 | 优化策略 | 支持版本 |
功能优化 | RRF 支持展示多路得分。 | 8.11.3、8.13.3 |
| 在线 reindex 功能,支持秒级完成分片数的倍数调整,无需业务干预。 | 7.14.2 |
性能优化 | 自研无共享、自闭环读写分离架构,隔离资源的同时提升写入性能 3 - 5倍。 | 7.14.2 |
| 自研多级并行查询框架(query + fetch),支持所有查询场景,查询性能提升 3 - 5倍。 | 7.10.1、7.14.2 |
| 基于 BKD 索引的排序性能优化,排序性能提升 5 - 10倍。 | 7.10.1、7.14.2 |
| terms number/date 类型字段的查询逻辑优化,查询性能提升 3 - 10倍。 | 7.10.1、7.14.2 |
| 缓存读写锁优化,低基数/缓存利用率较高的场景性能普遍提升 50% - 200%。 | 7.10.1、7.14.2 |
| 节点间数据透传序列化优化,减少冗余开销,提升查询性能30%。 | 7.10.1、7.14.2 |
| 基于 BKD 索引覆盖的时序聚合优化,时序聚合性能提升10倍。 | 7.14.2 |
稳定性优化 | 自研根据关键词进行查询 DSL 拦截与改写优化,帮助用户拒绝不合理的大查询,保障集群稳定性。 | 7.14.2 |
| 支持基于 QPS、CPU 使用率的限流策略。 | 7.14.2 |
2023年6月发布的重点优化特性:
优化分类 | 优化策略 | 支持版本 |
性能优化 | 自治索引支持时序查询裁剪优化,提升查询性能 3 - 5倍。 | 7.14.2、7.10.1 |
| 引入独立 Merge 策略,用于闲时自动合并 deleted 文档数较多的 segment,通过降低索引 deleted 数量规模可以降低存储成本、提升查询性能。 | 7.14.2、7.10.1 |
功能优化 | 引入自治索引,支持索引、分片自动化托管,降低用户索引、分片使用调优的成本。 | 7.14.2 |
| 支持独立开启 IP 溯源日志。 | 7.14.2、7.10.1、6.8.2 |
稳定性优化 | 优化特定场景的写入异常问题,支持写入异常时请求提前终止,减少内存堆积。 | 7.14.2、7.10.1、6.8.2 |
| 优化多可用区的查询负载不均问题。 | 7.14.2、7.10.1、6.8.2 |
成本优化 | ZSTD 压缩算法支持调整细粒度 Chunk Size,进一步提升压缩率,降低存储成本。 | 7.14.2 |
2022年4月发布的重点优化特性:
优化分类 | 优化策略 | 支持版本 |
性能优化 | 时序索引查询裁剪优化,时间范围检索从大范围遍历优化为边界定点裁剪,高基维时序范围搜索性能提升10倍+。 | 7.14.2 |
| DSL 查询结果支持列式返回,大幅降低重复 key 冗余,网络带宽占用减少35%,性能提升20%。 | 7.14.2 |
| 节点间数据透传序列化优化,减少冗余的序列化开销,提升查询性能30%。 | 7.14.2 |
| X-Pack 鉴权性能优化,通过特殊权限处理、缓存、延迟加载等机制消除 CPU 热点,提升查询性能30%+。 | 7.10.1、7.14.2 |
| 查询支持细粒度 block 级别采样优化,提升 Top-k、avg、min、max、histogram 等算子预估查询性能10倍+。 | 7.14.2 |
功能优化 | 查询 preference 参数优化,支持 _shards 和 custom_string 组合使用固定主副分片,确保评分场景查询结果稳定。 | 7.14.2 |
| Keyword 字段超长内容截断优化,超长内容支持不报异常截断写入。 | 7.14.2 |
| 查询超时底层细粒度控制优化,避免大查询被主动取消或超时(查询需携带 timeout 参数)后继续占用集群资源。 | 7.10.1、 7.14.2 |
稳定性优化 | 修复查询流程中内存限流特定场景内存泄露问题、进一步优化内存限流策略,避免聚合场景打爆内存,提升集群稳定性。 | 7.14.2 |
| 修复节点脱离集群后长时间反复加入、移出问题,提升集群稳定性。 | 7.10.1、7.14.2 |
| 优化节点、索引维度分片均衡策略,提升节点、索引层面的分片均衡能力,消除负载热点。 | 7.10.1、7.14.2 |
| 优化多盘场景分片搬迁均衡策略,提升多盘场景分片搬迁性能。 | 6.8.2、7.10.1、7.14.2 |
| 优化分片启动、分片失败任务优先级,避免索引长时间不可用。 | 6.8.2、7.10.1、7.14.2 |
| 集群扩展性优化,大幅提升分片数量、节点扩展能力,元数据变更、集群重启性能倍数级提升。 | 7.14.2 |
安全优化 | 修复 Log4j 安全漏洞。 | 全版本 |
2021年2月发布的重点优化特性:
优化维度 | 优化分类 | 优化策略 | 支持版本 |
性能优化 | 写入性能优化 | 分片定向路由优化,解决单索引多分片场景写入流程长尾分片问题,写入吞吐提升10%+,CPU 下降20%+。 | 6.8.2、7.5.1、7.10.1 |
| 查询性能优化 | 对查询结果进行裁剪,代替 filter_path,查询性能提升10%+。 | 6.8.2、7.5.1、7.10.1 |
稳定性优化 | 内存优化 | 大幅降低高并发写入、大查询导致节点卡死、集群雪崩问题,整体可用性提升至 99.99%。 基于内存资源的 Netty 网络层高并发写入限流。快速回收查询、写入异常的请求所消耗内存,避免异常请求导致内存堆积。优化自研单个请求熔断器,避免单个大查询占用资源过多。 基于 GC 负债管理及时自动重启内存彻底打满的节点。Lucene 文件类型内存映射模型可配置,根据不同的业务场景优化系统内存使用。 | 6.8.2、7.5.1、7.10.1 |
| JDK、GC 优化 | 引入腾讯自研优化的 KONA JDK11,修复已知 JDK bug,提升 FGC 串行回收能力。 切换 G1 垃圾回收器,提升 GC 效率,减少 Old GC 导致的毛刺。 | 6.8.2、7.5.1、7.10.1 |
| 元数据性能优化 | mapping 更新任务优先级优化,解决高并发 mapping 更新任务堵塞导致大量请求堆积打挂节点问题。元数据异步落盘优化,提升元数据同步性能,避免索引创建、mapping 更新频繁超时。 | 6.8.2、7.5.1、7.10.1 |
成本优化 | 存储优化 | 引入 zstd 压缩算法,压缩比提升30% - 50%,压缩性能提升30%。 | 6.8.2、7.5.1、7.10.1 |
| | | |
截至2020年7月腾讯云 ES 团队自启动内核研究至今的重点优化特性:
优化维度 | 优化分类 | 优化策略 | 支持版本 |
性能优化 | 写入性能优化 | Translog 锁机制优化,总体写入性能提升20%。写入去重优化,segment 文件裁剪优化,带主键写入性能提升50%+。 | 7.5.1、7.10.1 |
| 查询性能优化 | 聚合性能优化,查询高效剪枝,排序场景 composite 聚合性能提升3 - 7倍。 查询缓存优化,取消开销高、命中率低的数据缓存,实际场景查询毛刺从750ms降至50ms。 合并策略优化,自研基于时序、大小相似性分层合并策略、冷分片自动合并策略,搜索场景查询性能提升40%+。 查询 Fetch 阶段顺序抓取优化,提升缓存命中率,查询结果集较大场景,性能提升10%+。 | 6.4.3、6.8.2、7.5.1、7.10.1 |
稳定性优化 | 可用性优化 | 接入层曲线平滑限流。 协调节点汇聚子查询结果反序列化膨胀预估、内存检查。 大聚合查询结果集流式检查,内存达到阈值熔断请求。 自研单个请求熔断器(Single Request Circuit Breaker),避免单个大查询占用资源过多,避免单个大查询占用资源过多影响其它查询。 大幅降低高并发写入、大查询导致节点卡死、集群雪崩问题,整体可用性提升至99.99%。 | 6.4.3、6.8.2、7.5.1、7.10.1 |
| 均衡策略优化 | 引入基于索引、节点打散的均衡策略,优化集群新增节点导致分片严重不均问题。 优化多盘(多数据目录)之间分片不均问题。 提升集群扩容场景、多盘场景新建索引分片均衡性,减少人工运维成本。 | 5.6.4、6.4.3、6.8.2、7.5.1、7.10.1 |
| 滚动重启速度优化 | 优化节点重启分片复用本地数据逻辑。 精准控制预定延时时间内的分片拷贝恢复。大集群单节点重启时间从10多分钟降至1分钟。 | 6.4.3、6.8.2、7.5.1、7.10.1 |
| 在线切主 | 自研在线切主功能,用户通过 API 指定偏好 master,实现秒级在线切换,典型使用场景: 人工运维时发现当前 master 高负载,在线切换 master 至规格更高、负载低的节点。 滚动重启时,master 节点放到最后重启,重启之前先将 master 角色快速切到别的节点再重启,服务影响从分钟级缩短到秒级。 | 6.4.3、6.8.2、7.5.1、7.10.1 |
成本优化 | 内存优化 | 自研堆外 cache,实现 FST Off-Heap 优化。 堆外 cache 保障 FST 回收策略可控。 精准淘汰策略提高 cache 命中率。 零拷贝加多级 cache 保障访问性能。 大幅降低堆内存开销,GC 时长下降10%+,单节点磁盘管理规模可达50TB,读写性能基本不受影响。 | 6.8.2、7.5.1、7.10.1 |
| 存储优化 | 自研 ID 字段行存裁剪,时序场景存储开销降低20%+。 | 5.6.4、6.4.3、6.8.2、7.5.1、7.10.1 |