阿里云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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3天前
|
缓存 监控 安全
Elasticsearch扩展和优化
【11月更文挑战第4天】
18 6
|
10天前
|
存储 SQL 监控
|
10天前
|
自然语言处理 监控 数据可视化
|
10天前
|
运维 监控 安全
|
13天前
|
存储 数据采集 监控
开源日志分析Elasticsearch
【10月更文挑战第22天】
42 5
|
7天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
20 5
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
109 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。

相关产品

  • 检索分析服务 Elasticsearch版