阿里云Elasticsearch日志场景最佳实践及引擎内核优化

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文整理自阿里巴巴技术专家郭嘉梁(梁楹)在 阿里云Elasticsearch 自研引擎年度发布 的演讲。

摘要本文整理自阿里巴巴技术专家郭嘉梁(梁楹)在 阿里云Elasticsearch 自研引擎年度发布 的演讲。主要内容包括:

  1. 阿里云Elasticsearch 日志场景最佳实践
  2. 阿里云Elasticsearch 引擎内核优化
  3. 阿里云Elasticsearch 性能评测
  4. 阿里云Elasticsearch 产品演示


一、阿里云Elasticsearch 日志场景最佳实践

1. 阿里云Elasticsearch 日志场景概况 

阿里云Elasticsearch(简称ES)在线上拥有1W+的集群和6W+节点,为用户提供线上检索和分析服务,在这些集群中,日志集群占比35%,其平均CPU核数超过40个,数据量达到PB级别。日志集群具有数量多、单集群规模大的特点,覆盖包括游戏、医药、汽车等领域。

 

2. 日志场景集群特点

在进行引擎内核优化之前,首先需要了解日志场景集群的共性特点:

 

  • 写入吞吐高:在线头部用户的单日写入吞吐量可达数十TB级;
  • 查询秒级响应:日志场景集群通常会作为微服务的问题排查,或监控数据的大盘展示,因此查询端的响应是否及时,直接影响用户端的体验;
  • 存储数据量大:日志场景集群的单日写入量大,数据存储周期长;
  • 倾向访问近期数据


image.png

3. 日志场景自建集群的痛点:性价比低

  • 贵:写入吞吐高, 存储时间长,导致计算资源和存储资源成本高;
  • 慢:数据量大,导致扩容/宕机恢复慢, 数据迁移慢;
  • 差:冷/热查询没有隔离机制,导致稳定性差;
  • 难:索引多, 生命周期不同,导致冷/热数据迁移难管理;

 

4. 日志场景最佳实践大图

基于以上痛点,ES日志场景进行了诸多优化,主要包含以下五个方面:



image.png


  • 冷热查询共享计算资源:冷热数据查询隔离,在维持查询稳定性的基础上,将用户计算成本降低50%;
  • 低成本自研海量存储引擎:存储成本降低70%;
  • 计算存储分离:海量冷数据快速恢复、快速弹性;
  • 冷/热数据自动迁移:免运维;
  • 托管写入:引入 Indexing Service 写入托管服务,用户无需为索引构建消耗资源,写入性能提升10倍以上;



5. 日志场景最佳实践成果

ES 日志场景最佳实践,为用户提供了高性价比的服务,主要体现在四个方面:

 

  • 高稳定:
  • 通过 IndexingService 让写入性能提升10倍;
  • 针对自研海量存储引擎进行存储优化使查询秒级响应;

  • 低成本:
  • 自研海量存储引擎让存储成本降低70%;
  • 冷热共享计算资源技术让计算成本降低50%;


  • 高易用:
  • 冷热数据自动迁移,高级监控功能实现免运维,全观测;

  • 高可用:
  • 通过自研海量存储引擎共享存储,以及计算存储分离技术,使用户的海量冷数据可以做到快速弹性,快速恢复;


二、阿里云Elasticsearch 引擎内核优化


1. 共享冷/热计算资源

image.png

  • 计算成本降低50%:ES 提供冷热共享计算规格组,用户无需为冷数据单独购买 ECS 资源;
  • AJDK 租户隔离技术:将冷/热查询的线程池置于不同租户中,当冷查询的线程或 CPU 资源影响到热查询,会优先保证热查询返回;
  • 查询隔离等;


2. 查询性能优化

  • 冷存储(Lucene查询剖析)

自研海量存储引擎的单次IO访问延迟可达到100毫秒以上,使用Lucene原生查询框架的端到端查询,对于这种延迟是无法接受的。


Lucene查询模型分为四个步骤(见下图):


  • 根据用户的查询语句进行倒排链求交,获取文档ID列表;
  • 如用户有排序或聚合的需求,根据文档ID列表串行查询 DocValue 索引,获取文档ID对应的指定字段值;
  • 对指定字段值进行排序和聚合操作;
  • 如客户有召回原文的需求,则需要查询原文索引并返回原文;


image.png


其中第二步访问 DocValue 的随机查询,是导致查询延迟高的重点。假设用户召回100个文档ID,单次IO查询是100毫秒,那么100个文档的排序或聚合操作就有10秒的端到端查询延迟。


  • 冷存储

针对上述查询延迟问题,对Lucene的原生执行模式进行了如下改造:

  • 按行查询→按列查询(见下图):由多线程完成获取 DocValue 文档值;


image.png


  • AJDK 的 Wisp 协程技术:降低多线程间的切换开销;
  • 预读:采用块的预读策略,以加速倒排链的访问;
  • Codec 优化:采用大块压缩技术使单次IO可以返回多个文档值,从而降低总体IO次数。

 

  • 冷存储(智能缓存)

在查询模式基础上提供智能缓存机制,在自研海量存储引擎中加入 SmartCache,对多种不同类型的索引采用自适应的淘汰策略,可以适配多种查询场景。比如针对 DocValue 索引采用了 N-LRU 的淘汰策略,防止一次对历史数据的分析型查询直接将 DocValue 的 Cache 刷满,导致淘汰一些有效数据。


image.png

3. 写入性能优化

使用 Indexing Service 中心化索引构建集群。

  • 写入性能提升10倍:用户集群在收到写入请求后,将写入请求转发至 Indexing Service 集群,整个索引构建过程是在中心化集群完成,因此用户集群无需为索引构建消耗计算资源;
  • 后端双集群互备保障高可用;
  • 写入托管, 按量计费,进一步降低用户的使用成本。

image.png

4. 计算存储分离

冷数据采用自研海量存储引擎的存储介质,属于共享存储,用户的写入只在主分片进行构建,所有副本节点都是加载共享存储中的数据,真正做到一写多读,以及计算和存储解耦。由于数据只存储一份,在节点扩容或节点宕机时,无需进行节点间的数据拷贝,彻底消除海量数据迁移的开销。


image.png

三、阿里云Elasticsearch 性能评测


1. 自研海量存储引擎查询性能评测 

a.  自研海量存储引擎成本

自研海量存储引擎的存储单价是0.15元/GB/月,对比高效云盘的0.35元/GB/月,降低了60%;对比SSD的1元/GB/月,降低80%以上;

image.png

b.  自研海量存储引擎查询延迟

优化后的自研海量存储引擎,对比高效云盘在查询延迟方面有显著降低。

image.png

在自研海量存储引擎与高效云盘的查询延迟对比图中,查询数据级是1.5TB索引,在24个16C64GB节点进行测试,单位是毫秒,针对两种查询语句分别进行测试,一种是只有对时间字段的简单查询,一种是对指定字段有AGG聚合分析的分析型查询。测试结果表明,自研海量存储引擎的查询性能更好,查询延迟降低了30%左右。


综上对比高效云盘,自研海量存储引擎的成本降低了60%,而总体查询性能提升了30%,自研海量存储引擎为用户提供了高性价比的存储介质选择。


2. IndexingService 写入性能评测

针对开启 Indexing Service 的集群和通用商业版集群进行写入 TPS 对比,对三种不同规格组(2C8GB,4C16GB,8C32GB)进行对比。对比结果显示:无论在哪个规格组,Indexing Service 的写入性能比原生 ES 写入性能提高了7-10倍。


image.png


四、阿里云Elasticsearch 产品演示

1. 进入阿里云Elasticsearch 产品控制台

https://elasticsearch.console.aliyun.com/


image.png


2. 创建 Elasticsearch 实例

image.png

3. 进入阿里云Elasticsearch 购买页面

其中有两种类型的集群供选择:通用商业版和日志增强版。日志增强版提供上面提到的针对日志场景的内核优化,如果用户需要存储日志数据,并希望享受阿里云提供的自研能力,可以选择日志增强版进行创建。


image.png

4. 进行集群配置

用户可以选择实例所在区域和可用区。在实例规格栏可以看到提供的冷热共享资源规格组和自研海量存储引擎存储。

image.png

5. 进入集群网络资源配置,选择专有网络和虚拟交换机。

image.png

6. 设置集群实例名称、登录名称及密码。


image.png

7. 进入订单确认页面,注意要勾选服务协议。

image.png

8. 通过控制台的 Kibana 访问 ES 实例。

image.png

9. Kibana 可视化控制默认公网无法访问,因此需要先配置公网的白名单入口

image.png

配置公网访问的白名单IP:

image.png

10. 进入 Kibana 登录页面,输入集群的用户名和密码后进入 Kibana 控制台。

image.png

image.png

11. 在 Kibana 开发工具中进行 ES 集群 API 访问,如访问集群元数据,创建索引,创建文档并插入数据,搜索数据等。


image.png

访问集群元数据:

image.png

创建索引:

image.png

创建文档并插入数据:

image.png

搜索数据:

image.png

12. 高级监控和报警功能。

用户在高级监控页面可以看到集群层面和节点层面的监控信息,同时可以根据集群或节点的使用水位,配置相应的报警规则。

image.png


13. 日志数据查询。

为方便集群问题排查,系统提供了集群的日志展示,包括主日志,Searching 慢日志,Indexing 慢日志,GC 日志和 ES 访问日志。

image.png

用户在搜索框输入自定义查询语句和指定时间范围,即可进行日志数据查询。

image.png

以上是 Elasticsearch 控制台中的案例体验 Demo。欢迎大家到阿里云Elasticsearch 平台进行实例体验。

image.png

END


阿里云 ES 团队积极参与社区建设,与 Elasticsearch 社区和国内团队紧密合作,基于 Elasticsearch 在云原生的实践,推出了包括开发者报告、Elasticsearch 全观测、技术解析等电子书,对 ES 感兴趣的朋友可以多多关注。同时,在 ES 社区也会有丰富的线上线下活动,欢迎大家参与。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
95 4
|
15天前
|
自然语言处理 搜索推荐 数据库
高性能分布式搜索引擎Elasticsearch详解
高性能分布式搜索引擎Elasticsearch详解
47 4
高性能分布式搜索引擎Elasticsearch详解
|
10天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
2月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
15天前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
25天前
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
1月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
132 3
|
2月前
|
JSON Java fastjson
Java日志通关(五) - 最佳实践
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第五篇。
|
2月前
|
消息中间件 监控 Kafka
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
【8月更文挑战第13天】Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
90 3
|
2月前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
38 0

相关产品

  • 检索分析服务 Elasticsearch版
  • 下一篇
    无影云桌面