在完全兼容开源Elasticsearch(ES)内核的所有特性基础上,阿里云ES在监控指标多样化、线程池、熔断策略优化、查询与写入性能优化等诸多方面,深度定制了AliES内核引擎。基于阿里云Elasticsearch团队在多种应用场景下所积累的丰富经验,提升集群稳定性、增强性能、优化成本和丰富监控运维功能。本文介绍AliES的内核版本及重点优化的特性。
ES 7.16.2版本
1.7.0内核版本发布说明
新增aliyun-timestream时序增强插件,支持TimeStream时序类型索引的增删改查,降低时序场景门槛。详细信息,请参见TimeStream时序增强引擎介绍。
支持使用PromQL查询数据。详细信息,请参见基于TimeStream对接Prometheus+Grafana实现可观测性。
ES 7.10.0版本
1.12.0内核版本发布说明
新增、优化特性
search:
增加同义词插件。
在保持原有均衡能力的情况下增加主分片均衡功能。
增加wildcard,prefix查询参数长度限制能力。
基于DocValue优化keyword类型terms、prefix等复杂查询,低命中率场景下查询性能提升80%。
基于DocValue优化数值类型term、terms查询,低命中率场景下查询性能提升80%。
基于lazyload策略优化BKD term/terms场景的查询性能,查询性能提升30%。
Openstore:异步执行deletefile操作。
Bug修复
优化存储层任务管理,解决偶发出现RPC通信卡住的问题。
优化数据复制流程,避免副本节点出现fail engine。
优化副本晋升流程,避免出现主/副本索引文件内容不一致的问题。
1.10.0内核版本发布说明
新增、优化特性
OpenStore:
OpenStore存储引擎支持冷热分离版本平滑升级智能混合存储版本,升级过程采用蓝绿变更,不影响在线服务。
OpenStore存储引擎任务调度优化,通过实时的网络流量控制任务并发和避免拥塞,物理复制和数据降级效率显著提升。
OpenStore存储性能提升:
混合存储写入链路优化,写入性能对齐ES原生索引。
优化元信息管理,减少磁盘的IOUtil毛刺,提升查询稳定性。
Store/Snapshot:
优化LuceneVerifyIndexOutput实现,提升索引恢复速度。更多信息,请参见ES pull 96975。
Cluster Coordination
持久化任务不再引用ClusterState,大规模集群中会导致master节点内存升高,为避免大规模集群选主超时,cluster.election.initial_timeout默认值从100 ms改成1 s。更多信息,请参见ES pull 90724。
Indexing Service稳定性增强:
增加unfollow开关,支持在异常时临时停止unfollow流程,加速异常问题解决。
unfollow提交follower master任务优化,避免follower集群索引unfollow时由于reopen等操作对master的压力。
写入重试逻辑优化,解决索引新建过程中由于写入重试导致的Indexing Service稳定性问题。
Search
增加端到端查询超时功能,有效控制查询整体耗时,支持在超时情况下返回部分结果。
访问日志增加部分字段。
Bug修复
OpenStore:
修复主备切换过程中并发refresh导致的分片分配失败问题。
修复元信息访问过程读写锁使用不当导致的查询线程ThreadLocalMap堆积问题。
Indexing Service:
修复跨集群物理复制过程存在不合理使用网络线程池导致的查询抖动问题。
Lucene:
修复Lucene Merge引用的DV update索引文件,被并发flush操作删除的问题。更多信息,请参见Lucene。
1.9.0内核版本发布说明
新增、优化特性
内核增强版并发查询框架重构和优化:
优化并发框架,降低查询耗时。
实现了内存复用,优化JVM内存熔断和GC开销问题,充分提高资源利用。
降低原文fetch并发中fetch阶段的耗时。例如,size为10000的场景,fetch阶段可以降低6~10倍耗时,整体耗时可以降低50%。
适配更多的聚合查询,包括PercentilesAggregation、PercentileRanksAggregation、SamplerAggregation、DiversifiedAggregation、SignificantTextAggregation、GeoDistanceAggregation、GeoHashGridAggregation、GeoTileGridAggregation、GeoBoundsAggregation、GeoCentroidAggregation、ScriptedMetricAggregation。
端到端的访问日志增加查询耗时、traceId等字段,可以使用traceId串联查询流程。
通过优化自定义原文索引结构和mapping解析,实现原文写入优化,使原文写入性能提升一倍。
OpenStore
OpenStore智能混合存储实例,对业务索引默认开启混合存储特性,增强产品易用性。
OpenStore智能混合存储实例,提高元数据存储可靠性。例如,本地盘坏盘时保证元数据不丢失。
OpenStore智能混合存储实例,消除大文件写入导致的IO Util毛刺。
优化Lucene层面termVectorsReader使用不当造成ES management线程ThreadLocalMap的堆积问题。
OpenStore存储实例查询性能提升:
默认对倒排链读取开启预读策略,倒排链查询性能提升30%。
进程重启后,加速其查询本地Page Cache的速度。
通过以下代码开启Cache,解决某些场景中主查询少,子查询多,而未对子查询开启缓存的问题。
PUT _cluster / settings { "persistent": { "search.query_cache_get_wait_lock_enable": "true", "search.query_cache_skip_factor": "200000000" } }
优化knn场景主副本分片点位不一致问题。
Bug修复
修复蓝绿变更时,当节点上面Shard迁移后, 执行
GET _cat/node
异常的问题。解决OpenStore智能混合存储实例断电重启时事务日志丢失,导致分片分配失败的问题。
解决OpenStore智能混合存储实例频繁切换主分片时索引文件被误删,影响分片分配失败的问题。
1.8.0内核版本发布说明
新增aliyun-timestream时序增强插件,支持TimeStream时序类型索引的增删改查,降低时序场景门槛,并支持使用PromQL查询数据以及按照InfluxDB的行协议写数据。详细信息请参见TimeStream时序增强引擎介绍和基于TimeStream对接Prometheus+Grafana实现可观测性和TimeStream集成InfluxDB写协议接口。
1.7.1内核版本发布说明
新增特性
OpenStore智能混合存储上线,突破传统冷热分离架构,大幅降低数据接入的复杂度及存储成本。您无须提前规划购买热数据存储空间,存储按实际用量付费;也无须手动配置冷热生命周期策略,系统会自动进行数据分层。
开启Indexing Service索引构建服务后,支持设置取消托管时长,提升云上写入托管的稳定性。
1.7.0内核版本发布说明
新增特性
Analyticsearch查询优化上线,基于日志检索插件实现查询性能大幅提升,具体说明如下:
日志检索场景,例如Kibana Discover查询加速,优化索引合并策略及Date_histogram执行计划策略,无条件或单条件查询性能提升6倍以上(日增量>1 TB数据量的场景下,分钟级查询可优化至5s内)。
优化并发查询,实现召回过程的并发,提高资源利用率,日志场景召回阶段平均耗时降低50%。
只读小segment在Force Merge前持续合并,相比合并前查询性能提升20%。
性能优化
协调节点和数据节点间写入请求传输使用轻量级压缩算法LZ4,节点网络带宽开销降低30%。
优化Force Merge任务的并发粒度至分片级别,降低Force Merge耗时。
支持配置原文大块压缩并优化ZSTD压缩算法参数,原文大小降低8%;通过优化Backports lucene postings pfor编码,索引大小降低3%。
当用户集群写入量较大,为缓解写入托管服务Indexing Service集群资源压力,可平滑迁移至更充足的资源空间,对用户集群无影响。
Bug修复
修复aliyun-codec插件中,source_reuse_doc_values特性不支持带
.
的字段名问题。修复开启Indexing Service索引构建服务的内核增强版集群,在执行force_merge取消托管时,遇到分片relocating状态长时间卡住的问题。
1.6.0内核版本发布说明
支持OpenStore冷热共享计算模式,提供冷热共享计算数据节点及查询性能优化,无须单独购买冷数据节点即可存储海量日志数据,详细信息请参见OpenStore智能存储引擎介绍。
新增cold-search插件,支持OpenStore冷热数据共享查询能力,满足冷热索引的CPU和内存隔离熔断要求,详细信息请参见使用冷热隔离插件(cold-search)。
在aliyun-codec插件中新增source复用docvalue特性,进一步降低索引大小及成本,详细信息请参见使用aliyun-codec插件。
更新aliyun-qos插件2.0版本,支持更细粒度的限流类型和限流参数设置,详细信息请参见使用集群限流插件(aliyun-qos)。
1.5.0内核版本发布说明
支持OpenStore存储,提供低成本存储能力,详细信息请参见OpenStore智能存储引擎介绍。
支持aliyun-codec插件,增强内核压缩性能,详细信息请参见使用aliyun-codec插件。
优化Indexing Service功能,并修复前端索引删除后,底层索引未删除的bug,详细信息请参见Indexing Service系列介绍。
修复search_as_you_type漏洞,详细信息请参见search_as_you_type。
1.4.0内核版本发布说明
更新aliyun-knn插件,优化写入性能,使写入性能相对于老版本有所提升;同时支持script查询,并集成了smind硬件优化后的指令,丰富了向量检索功能。
增强aliyun-qos分布式限流插件功能,提供了集群级别的限流能力,使您无需再关注内部节点的实际拓扑和负载情况,各节点之间能够自适应分配流量比例,易用性与稳定性相比单机版QoS有显著提升。
支持Indexing Service系列,提升租户集群稳定性。
1.3.0内核版本发布说明
提供慢查询隔离池,降低异常查询对集群稳定性的影响。
提供gig流控插件,实现机器异常秒级切流,降低坏节点导致查询抖动的概率。
说明在商业版7.10.0中,gig流控插件默认集成在aliyun-qos集群限流插件中(默认已安装),不需要单独安装。
支持通用物理复制功能,提高有副本索引的写入性能。
支持时序查询剪枝功能,提高含时序字段范围的查询性能。
支持查询access.log,包括请求时间、客户端来源和请求内容等,可用于问题排查和请求分析。
主节点调度性能提升10倍,支持调度更多分片数。
ES 6.7.0版本
1.3.0内核版本发布说明
在使用以上功能时,需要先将内核版本升级至1.3.0版本,支持升级的版本包括:通用商业版0.3.0、1.0.2、1.3.0,不支持1.0.1。
1.2.0内核版本发布说明
支持通用物理复制功能,提高有副本索引的写入性能。
支持时序查询剪枝功能,提高含时序字段范围的查询性能。
支持主键查询去重优化,带主键文档的写入性能提升10%。
支持堆外FST,单节点支持存储最大20 TB的索引数据。
1.0.2内核版本发布说明
支持查询access.log,包括请求时间、客户端来源、请求内容等,可用于问题排查和请求分析。
1.0.1内核版本发布说明
支持配置JVM熔断策略,JVM达到95%后会拒绝请求保护集群,参数设置如下:
indices.breaker.total.use_real_memory:默认为false。
indices.breaker.total.limit:默认为95%。
0.3.0内核版本发布说明
主节点调度性能提升10倍,支持调度更多分片数。
写入性能提升10%,降低translog落盘锁的开销。