有奖捉虫:行业应用 & 管理与支持文档专题 HOT
在完全兼容开源内核的基础上,腾讯云 Elasticsearch Service(ES)基于多场景大规模的丰富应用经验,围绕集群性能增强、稳定性提升、成本优化等方向,对 ES 内核进行了持续的深度研究和优化,并始终与开源社区保持着密切的交流。本文为您介绍腾讯云 ES 的关键内核优化工作。
如果您感兴趣,欢迎访问我们的内核优化专栏 Elasticsearch 实验室 来获得更多内核特性优化的背景和深度技术剖析,这里记录了我们的最新研究成果。
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
?


http://www.vxiaotou.com