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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 分享人:郭嘉梁(梁楹),阿里巴巴技术专家

 

导读:全文将围绕以下四点展开:


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

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

三、阿里云Elasticsearch性能评测

四、阿里云Elasticsearch产品演示

 

 

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

 

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

 

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

 

2. 日志场景集群特点

 

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

 

a. 写入吞吐高:在线头部用户的单日写入吞吐量可达数十TB级;

b. 查询秒级响应:日志场景集群通常会作为微服务的问题排查,或监控数据的大盘展示,因此查询端的响应是否及时,直接影响用户端的体验;

c. 存储数据量大:日志场景集群的单日写入量大,数据存储周期长;

d. 倾向访问近期数据;图片1.png

 

 

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

 

a. 贵:写入吞吐高, 存储时间长,导致计算资源和存储资源成本高;

b. 慢:数据量大,导致扩容/宕机恢复慢, 数据迁移慢;

c. 差:冷/热查询没有隔离机制,导致稳定性差;

d. 难:索引多, 生命周期不同,导致冷/热数据迁移难管理;

 

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

 

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

 图片2.png

 

a. 冷热查询共享计算资源:冷热数据查询隔离,在维持查询稳定性的基础上,将用户计算成本降低50%;

b. 低成本自研海量存储引擎:存储成本降低70%;

c. 计算存储分离:海量冷数据快速恢复、快速弹性;

d. 冷/热数据自动迁移:免运维;

e. 托管写入:引入Indexing Service写入托管服务,用户无需为索引构建消耗资源,写入性能提升10倍以上;

 

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

 

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

 

a. 高稳定:

ž 通过Indexing Service让写入性能提升10倍;

ž 针对自研海量存储引擎进行存储优化使查询秒级响应;

b. 低成本:

ž 自研海量存储引擎让存储成本降低70%;

ž 冷热共享计算资源技术让计算成本降低50%;

c. 高易用:

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

d. 高可用:

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

 

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

 

1. 共享冷/热计算资源

 图片3.png

 

a. 计算成本降低50%:ES提供冷热共享计算规格组,用户无需为冷数据单独购买ECS资源;

b. AJDK租户隔离技术:将冷/热查询的线程池置于不同租户中,当冷查询的线程或CPU资源影响到热查询,会优先保证热查询返回;

c. 查询隔离等;

 

2. 查询性能优化

 

a. 冷存储(Lucene查询剖析)

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

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

Ÿ 根据用户的查询语句进行倒排链求交,获取文档ID列表;

Ÿ 如用户有排序或聚合的需求,根据文档ID列表串行查询DocValue索引,获取文档ID对应的指定字段值;

Ÿ 对指定字段值进行排序和聚合操作;

Ÿ 如客户有召回原文的需求,则需要查询原文索引并返回原文;

 图片4.png

 

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

 

b. 冷存储

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

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

 

Ÿ AJDK的Wisp协程技术:降低多线程间的切换开销;

Ÿ 预读:采用块的预读策略,以加速倒排链的访问;

Ÿ Codec优化:采用大块压缩技术使单次IO可以返回多个文档值,从而降低总体IO次数。

 

c. 冷存储(智能缓存)

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

 图片6.png

 

3. 写入性能优化

 

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

l 写入性能提升10倍:用户集群在收到写入请求后,将写入请求转发至Indexing Service集群,整个索引构建过程是在中心化集群完成,因此用户集群无需为索引构建消耗计算资源;

l 后端双集群互备保障高可用;

l 写入托管, 按量计费,进一步降低用户的使用成本。

 图片7.png

 

4. 计算存储分离

 

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

 图片8.png

 

三、阿里云Elasticsearch性能评测

 

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

 

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

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

 

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

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

自研海量存储引擎与高效云盘查询延迟对比图

 

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

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

 

2. Indexing Service写入性能评测

 

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

 

四、阿里云Elasticsearch产品演示

 

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

https://elasticsearch.console.aliyun.com/图片12.png

 

2. 创建Elasticsearch实例。图片13.png

 

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

 

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

 

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

 图片15.png

 

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

 图片16.png

 

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

 

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

 图片18.png

 

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

 图片19.png

 

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

 图片20.png

 

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

 图片21.png

 

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

 图片22.png

 图片23.png

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

 图片24.png

访问集群元数据:

图片25.png

创建索引:

图片26.png

创建文档并插入数据:

图片27.png

搜索数据:

图片28.png

 

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

 图片29.png

 

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

 图片30.png

 

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

 图片31.png

 

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

 图片32.png


群二维码.JPG

扫码加入钉钉群答疑,免费领取大佬分享资料~

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
6天前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
|
2月前
|
存储 人工智能 自然语言处理
Elasticsearch Inference API增加对阿里云AI的支持
本文将介绍如何在 Elasticsearch 中设置和使用阿里云的文本生成、重排序、稀疏向量和稠密向量服务,提升搜索相关性。
90 14
Elasticsearch Inference API增加对阿里云AI的支持
|
1月前
|
存储 SQL 监控
|
1月前
|
自然语言处理 监控 数据可视化
|
1月前
|
运维 监控 安全
|
1月前
|
存储 监控 安全
|
1月前
|
JSON 监控 JavaScript
Node.js-API 限流与日志优化
Node.js-API 限流与日志优化
|
1月前
|
存储 数据采集 监控
开源日志分析Elasticsearch
【10月更文挑战第22天】
50 5
|
2月前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
61 1

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版