全部产品
Search
文档中心

检索分析服务Elasticsearch版:内核版本发布记录

更新时间:Apr 09, 2024

在完全兼容开源Elasticsearch(ES)内核的所有特性基础上,阿里云ES在监控指标多样化、线程池、熔断策略优化、查询与写入性能优化等诸多方面,深度定制了AliES内核引擎。基于阿里云Elasticsearch团队在多种应用场景下所积累的丰富经验,提升集群稳定性、增强性能、优化成本和丰富监控运维功能。本文介绍AliES的内核版本及重点优化的特性。

7.16.2

内核版本

发布说明

1.7.0

新增aliyun-timestream时序增强插件,支持TimeStream时序类型索引的增删改查,降低时序场景门槛,并支持使用PromQL查询数据。详细信息请参见TimeStream时序增强引擎介绍基于TimeStream对接Prometheus+Grafana实现可观测性

7.10.0

内核版本

发布说明

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解析,实现原文写入优化,使原文写入性能提升一倍。

  • 通过以下代码开启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异常的问题。

1.8.0

新增aliyun-timestream时序增强插件,支持TimeStream时序类型索引的增删改查,降低时序场景门槛,并支持使用PromQL查询数据以及按照InfluxDB的行协议写数据。详细信息请参见TimeStream时序增强引擎介绍基于TimeStream对接Prometheus+Grafana实现可观测性TimeStream集成InfluxDB写协议接口

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%。

  • Bug修复

    • 修复aliyun-codec插件中,source_reuse_doc_values特性不支持带.的字段名问题。

1.6.0

1.5.0

1.4.0

  • 更新aliyun-knn插件,优化写入性能,使写入性能相对于老版本有所提升;同时支持script查询,并集成了smind硬件优化后的指令,丰富了向量检索功能。

  • 增强aliyun-qos分布式限流插件功能,提供了集群级别的限流能力,使您无需再关注内部节点的实际拓扑和负载情况,各节点之间能够自适应分配流量比例,易用性与稳定性相比单机版QoS有显著提升。

1.3.0

  • 提供慢查询隔离池,降低异常查询对集群稳定性的影响。

  • 提供gig流控插件,实现机器异常秒级切流,降低坏节点导致查询抖动的概率。

    说明

    在商业版7.10.0中,gig流控插件默认集成在aliyun-qos集群限流插件中(默认已安装),不需要单独安装。

  • 支持通用物理复制功能,提高有副本索引的写入性能。

  • 支持时序查询剪枝功能,提高含时序字段范围的查询性能。

  • 支持查询access.log,包括请求时间、客户端来源和请求内容等,可用于问题排查和请求分析。

  • 主节点调度性能提升10倍,支持调度更多分片数。

6.7.0

内核版本

发布说明

1.3.0

  • 提供慢查询隔离池,降低异常查询对集群稳定性的影响。

  • 提供gig流控插件,实现机器异常秒级切流,降低坏节点导致查询抖动的概率。

重要

在使用以上功能时,需要先将内核版本升级至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