Elasticsearch在db_ranking 的排名不断上升,其在存储领域已经蔚然成风且占有非常重要的地位。

随着Elasticsearch越来越受欢迎,企业花费在ES建设上的成本自然也不少。那如何减少ES的成本呢?今天我们就特地来聊聊ES降本增效的常见方法:

  • 弹性伸缩

  • 分级存储

  • 其他:(1)数据压缩(2)off heap

1 弹性伸缩

所谓弹性伸缩翻译成大白话就是随时快速瘦身与增肥,并且是头痛医头,按需动态调整资源。当计算能力不足的时候我们可以快速扩充出计算资源;当存储资源不足时,能够快速扩容磁盘,。

1-1 计算存储分离

ES使用计算存储分离架构之后,解决了资源预留而造成资源浪费的问题。在早期大家认为的计算存储分离的实现方式为:使用云盘代替本地盘,这种实现方式可以提高数据的可靠性、可以快速弹扩磁盘资源和计算资源,但是es自身弹性需求是无法解决,即秒级shard搬迁和replica扩容

那么如何解决es自身的弹性呢?本文该部分将给出答案。

共享存储版ES

本文该部分将介绍我们京东云-中间件搜索团队,研发的共享存储版本ES;计算存储分离架构如图1-2所示

图 1-2 计算存储分离架构(共享)

如图1-2所示,我们只存储一份数据,primary shard负责读写,replica只负责读;当我们需要扩容replica的时候无需进行数据搬迁,直接跳过原生es的peer recover两阶段,秒级完成replica的弹扩

当主分片发生relocating时,可以直接跳过原生es的peer recover第一阶段(该阶段最为耗时),同时也不需要原生es的第二阶段发送translog。

共享版本的计算存储分离ES,相对于原生的ES和普通版本的计算存储分离,具有如下突出的优势

  • 数据只保存一份,存储成本倍数级降低

  • 存储容量按需自动拓展,几乎无空间浪费

  • 按实际用量计费,无需容量规划

性能测试

  • 数据集为esrally提供的http_logs

  • 共享版ES7.10.2: 3个data节点(16C64GB)

  • 原生ES7.10.2: 3个data节点(16C64GB)

表 1-1 1副本性能测试对比

refreh 原生本地ssd盘(doc/s) 原生云盘(doc/s) 共享存储(doc/s) 性能对比(本地盘)
默认 107159 97240.9 148965 39%
5s 111394 97933 125957 13%
15s 111837 96842.9 141363 26%

我们的初步性能测试结果如表1-1所示;副本数越多,共享版本的es越具有优势;

从表1-1所示我们可以看出性能似乎提升的不是特别理想,目前我们正从两个方面进行优化提升:

  • 底层依赖的云海存储,目前正在有计划地进行着性能提升

  • 源码侧,我们也在正在优化ing

在研发es计算存储分离的过程中,我们攻克了很多的问题,后续将输出更加详细的文章进行介绍,比如:主写副只读的具体实现replica的访问近实时问题ES的主分片切换脏写问题等等。

1-2 外部构建Segment

对于有大量写入的场景,通常不会持续的高流量写入,而只有1-2个小时写入流量洪峰;在写入过程中最耗费时间的过程并不是写磁盘而是构建segment,既然构建segment如此耗时,那么我们是否可以将该部分功能单独出来,形成一个可快速扩展的资源(避免去直接改动es源码而引入其他问题)。

目前业界已经有比较好的案例外部构建Segment,相对于共享存储版的es实现起来更简单;它的核心解决方案使用了spark或者map reduce这种批处理引擎进行批量计算处理,然后将构建好的segment搬运到对应的索引shard即可。

外部构建segment的功能也在我们的规划中。

2 分级存储

ES实现降本增效的另外一个方向:分级存储,该解决方案主要是针对数据量大查询少且对查询耗时不太敏感的业务。分级存储,比较成熟的解决方案有es冷热架构和可搜索快照。

2-1 冷热架构

冷热架构适用场景:时序型数据或者同一集群中同时存在这两个索引(一个热数据,另外一个冷数据)

es冷热架构架构,该功能已经在京东云上线有一段时间了,欢迎大家根据自己的业务形态进行试用,冷数据节点开启如图2-1所示

图 2-1 冷数据节点开启

建议如果索引表是按天/小时,这种周期存储的数据,且数据查询具有冷热性,建议开启冷节点;开启冷节点后你可能会获得如下的收益:

  • 开启冷节点后可以降低你的存储成本,因为存放冷节点的索引我们可以选择减少副本数、冷节点的存储介质更便宜

  • 集群可以存放更多的数据

  • 冷数据forcemerge,提升冷数据的查询性能

  • 冷数据从热节点迁移走之后,减少热节点的资源占用,从而使热查询更快

冷热架构的核心技术为
shard-allocation-filtering;

冷热架构实现原理:

es的hot节点增加如下配置

node.attr.box_type: hot

es的warm节点增加如下配置

node.attr.box_type: warm

热数据索引setting增加如下配置,即可限制shard分配在hot节点

"index.routing.allocation.require.box_type": "hot"

当数据查询减弱,我们通过如下配置,即可使数据由hot节点迁移到warm节点

"index.routing.allocation.require.box_type": "warm"

2-2 可搜索快照

可搜索快照是在冷热架构的基础上更进一步的分级存储,在之前我们将数据快照之后是无法对快照的数据进行搜索,如果要对快照的数据进行搜索,则需将快照数据先restore(restore的过程可能会比较长)之后才能被搜索。

在引入可搜索快照之后,我们可以直接搜索快照中的数据,大大降低了没必要的资源使用.

3 其他

3-1 数据压缩

除了从资源的角度进行降低存储成本之外,基于数据自身的特性,使用优秀的压缩算法也是一种必不可少的搜索;针对时序数据facebook开源了一个非常优秀的压缩算法zstd,目前已经在业界被大量使用。

表 3-1 三种压缩算法的对比测试结果

压缩算法 加载时间(1 Shard) 加载时间(5 Shards) Fields(*fdt)文件大小 索引总大小
LZ4 1143769ms 420447ms 4.15 GB 6.3 GB
Deflate 1270408ms 448738ms 2.56 GB 4.7 GB
Zstandard(16K Chunk) 1109414ms 415256ms 2.93 GB 5.1 GB
Zstandard(32K Chunk) 1088959ms 406661ms 2.67 GB 4.8 GB

目前在lucene的代码库中也有开源爱好者提交了custom codec providing Zstandard compression/decompression (zstd pr)

3-2 off heap

es单个节点存储数据量受到jvm堆内存的限制,为了使单个节点能够存储更多的数据,因此我们需要减少堆内存中的数据。

ES 堆中常驻内存中占据比重最大是 FST,即 tip(terms index) 文件占据的空间,1TB 索引大约占用2GB 或者更多的内存,因此为了节点稳定运行,业界通常认为一个节点 open 的索引不超过5TB。现在,从 ES 7.3版本开始,将 tip 文件修改为通过mmap的方式加载,这使 FST占据的内存从堆内转移到了堆外(即off Heap技术 )由操作系统的 pagecache 管理[6]。

使用esrally官方数据集geonames写入索引1TB,使用 _cat/segments API 查看 segments.memory内存占用量,对比 offheap 后的内存占用效果,如表3-2所示;JVM 内存占用量降低了表 3-2 segments.memory内存占用量

store.type segments.memory
niofs 4.7GB
hybrids 1.06GB

4 参考

[1] Indexing Service
[2] ES-Fastloader
[3] 大规模测试新的 Elasticsearch 冷层可搜索快照
[4] Introducing Elasticsearch searchable snapshots
[5] 7.7 版本中的新改进:显著降低 Elasticsearch 堆内存使用量
[6] Elasticsearch 7.3 的 offheap 原理

作者:京东科技 杨松柏

来源:京东云开发者社区 转载请注明来源

ElasticSearch降本增效常见的方法 | 京东云技术团队的更多相关文章

  1. 京东云开发者|ElasticSearch降本增效常见的方法

    Elasticsearch在db_ranking 的排名又(双叒叕)上升了一位,如图1-1所示;由此可见es在存储领域已经蔚然成风且占有非常重要的地位. 随着Elasticsearch越来越受欢迎,企 ...

  2. springboot升级过程中踩坑定位分析记录 | 京东云技术团队

    作者:京东零售 李文龙 1.背景 " 俗话说:为了修复一个小bug而引入了一个更大bug " 因所负责的系统使用的spring框架版本5.1.5.RELEASE在线上出过一个偶发的 ...

  3. ElasticSearch集成SpringBoot与常见使用方法

    目录 一.导包 二.核对导入的ES版本 修改导入版本 三.写配置类 四.开始测试 索引操作 1.创建索引 2.查看索引是否存在 3.删除索引 文档操作 1.添加文档 2.查看文档是否存在 3.修改文档 ...

  4. 京东云开发者|京东云RDS数据迁移常见场景攻略

    云时代已经来临,云上很多场景下都需要数据的迁移.备份和流转,各大云厂商也大都提供了自己的迁移工具.本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案. 场景一:数据迁移上云 数据迁移 ...

  5. 从单个系统到云翼一体化支撑,京东云DevOps推进中的一波三折

    作者:王利莹 采访嘉宾:京东云DevOps团队负责人 郑永宽 今年,IDC 特别针对中国地区发布了<IDC MarketScape:中国 DevOps 云市场2019,厂商评估>研究报告, ...

  6. 京东云携手Mellanox,设计最先进SDN硬件加速功能并开源

    京东云携手Mellanox,设计最先进SDN硬件加速功能并开源 最新技术播报 京东云开发者社区  导语新一代 SDN.NFV 和云原生计算技术正在推动应用实例的极限,这些实例可以在虚拟化和容器化的服务 ...

  7. CRM帮助初创企业降本增效的四个方法

    对大部分初创公司来说,只有少数企业能够实现盈利,大部分只能维持盈亏平衡甚至是亏损.这是因为初创企业很难在短时间之内找到稳定的赢利点,而企业面临的风险和投入又是无法预知的.初创企业想要快速盈利,只能降低 ...

  8. kubernetes 降本增效标准指南|理解弹性,应用弹性

    弹性伸缩在云计算领域的简述 弹性伸缩又称自动伸缩,是云计算场景下一种常见的方法,弹性伸缩可以根据服务器上的负载.按一定的规则.进行弹性的扩缩容服务器. 弹性伸缩在不同场景下的含义: 对于服务运行在自建 ...

  9. kubernetes 降本增效标准指南| 资源利用率提升工具大全

    背景 公有云的发展为业务的稳定性.可拓展性.便利性带来了极大帮助.这种用租代替买.并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果.但实际上业务上云并不意味着成本一定较少,还需适配云上 ...

  10. Oracle之常见问题诊断方法

    Oracle认证:常见问题诊断方法如下: 1.TNS-12154 Error 或ORA-12154 特征:SQL*NET没有找到连接串或别名 原因1:(1)没有找到TNSNAMES.ORA文件,该文件 ...

随机推荐

  1. 带你探索CPU调度的奥秘

    摘要:本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘. 本文分享自华为云社区<探索CPU的调度原理>,作者:元闰子. 前言 软件工程师们总习 ...

  2. 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:GaussDB(D ...

  3. PPT 稳妥选用字体

    字体怎么选 商务报告PPT字体怎么选 广告宣传PPT字体怎么选 发布会PPT字体怎么选 教学课件PPT字体怎么选--小学以下 教学课件PPT字体怎么选--中学以上 印刷阅读PPT字体怎么选--数据公司 ...

  4. MAC zsh:no matches found

    jimmy@MacBook-Pro bin % wsdl2java http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asm ...

  5. Spring Boot Admin 离线实例

    一直处于离线状态 spring.boot.admin.client.instance.prefer-ip Use the ip-address rather then the hostname in ...

  6. Selenium八大元素定位(元素定位,元素等待)

    Selenium WebDriver查找页面元素及元素操作 元素常用方法定位方法 通过id定位元素:find_element_by_id('id_value') 通过name定位元素:find_ele ...

  7. 【Vue】大总结

    目录 vue大回顾 模板语法处理xss攻击 Vue单页面组件 ts泛型 sass\less\css的区别 ...toRef() defineEmits 练习 根据分数显示颜色 vue大回顾 1 前端发 ...

  8. Python Type Hints 从入门到实践

    Python 想必大家都已经很熟悉了,甚至关于它有用或者无用的论点大家可能也已经看腻了.但是无论如何,它作为一个将加入高考科目的语言还是有它独到之处的,今天我们就再展开聊聊 Python. Pytho ...

  9. WCF 动态调用 动态代理

    关键词:WCF动态调用.动态调用WCF.WCF使用动态代理精简代码架构.使用反射执行WCF接口 代码地址: https://gitee.com/s0611163/DynamicWCF https:// ...

  10. Codeforces Round #629 (Div. 3) & 19级暑假第六场训练赛

    A:Codeforces 1328A Divisibility Problem 整除+模 Input 5 10 4 13 9 100 13 123 456 92 46 Output 2 5 4 333 ...