ElasticSearch降本增效常见的方法 | 京东云技术团队

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-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 三种压缩算法的对比测试结果

目前在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 内存占用量降低了78%左右

表 3-2 segments.memory内存占用量

4 参考

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

作者:京东科技 杨松柏

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327094.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

x-cmd pkg | public-ip-cli - 公共 IP 地址查询工具

简介 public-ip-cli 是一个用 Javascript 编写的命令行工具,用于获取当前计算机或网络所使用的公共 IP 地址。 它可以让用户在命令行界面上查询 OpenDNS、Google DNS 和 HTTPS 服务的 DNS 记录以获取与互联网通信时所分配的公共 IP 地址。 首次用户 使用 x env us…

国科大-自然语言处理复习

自然语言处理复习 实体关系联合抽取流水线式端到端方法 检索式问答系统流水线方式信息检索(IR)阶段阅读理解(RC)阶段基于证据强度的重排基于证据覆盖的重排结合不同类型的聚合 端到端方式Retriever-Reader的联合学习基于预训练的R…

仿真机器人-深度学习CV和激光雷达感知(项目2)day01【项目介绍与环境搭建】

文章目录 前言项目介绍功能与技术简介硬件要求环境配置虚拟机运行项目demo 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎大家的关注,我的博客主要关注…

图像处理:孤立点的检测

图像处理-孤立点的检测 孤立点的检测在图像处理中通常涉及到检测图像中的突变或者边缘,而使用二阶导数是一种常见的方法。一阶导数可以帮助找到图像中的边缘,而二阶导数则有助于检测边缘上的峰值,这些峰值可能对应于孤立点或者特殊的图像结构…

Zookeeper使用详解

介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布…

谷粒商城-缓存使用分布式锁SpringCache(5天)

缓存使用 1.1.1 哪些数据适合放入缓存 即时性、 数据一致性要求不高的 访问量大且更新频率不高的数据(读多, 写少) 例如:电商类应用, 商品分类, 商品列表等适合缓存 本地缓存 使用Map进行本地缓存 本地缓存…

【Redis】AOF 源码

在上篇, 我们已经从使用 / 机制 / AOF 过程中涉及的辅助功能等方面简单了解了 Redis AOF。 这篇将从源码的形式, 进行深入的了解。 1 Redis 整个 AOF 主要功能 Redis 的 AOF 功能概括起来就 2 个功能 AOF 同步: 将客户端发送的变更命令, 保存到 AOF 文件中AOF 重写: 随着 Red…

MySQL数据库软件详解二

MySQL的配置文件 my.ini 概述:MySQL 的配置文件 参数名称说明port表示 MySQL 服务器的端口号basedir表示 MySQL 的安装路径datadir表示 MySQL 数据文件的存储位置,也是数据表的存放位置default-character-set表示服务器端默认的字符集default-storage…

系统性学习vue-组件及脚手架

书接上文 Vue组件及脚手架 初始化脚手架说明步骤 分析脚手架结构render函数修改默认配置ref属性props配置mixin 混入/混合定义混合局部混合全局混合 插件scoped样式安装less-loader 浏览器的本地存储 webStoragelocalStroage 本地存储sessionStorage 会话存储 组件自定义事件绑…

SQLServer 为角色开视图SELECT权限,报错提示需要开基础表权限

问题: 创建了个视图V,里面包含V库的a表,和T库的b表 为角色开启视图V的SELECT权限,提示T库的b表无SELECT权限,报错如下 解决方案: ①在T库建个视图TV,里面包含b表(注意是在b表的对…

【Qt 学习之路】关于C++ Vlc视频播放

文章目录 1、简介2、效果2.1、视频2.2、动态图 3、核心代码3.1、判断视频3.2、视频核心类调用3.3、视频核心类3.3.1、头文件3.3.2、源文件 1、简介 最近有童鞋咨询VLC相关的问题,公布一个 5年前 编写的 VLC示例 代码供参考学习。包括正常对视频各种常用的操作&…

微信小程序快速入门03

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、生命周期生…

【Java数据结构】04-图(Prim,Kruskal,Dijkstra,topo)

5 图 推荐辅助理解 【视频讲解】bilibili Dijkstra Prim 【手动可视化】Algorithm Visualizer (https://algorithm-visualizer.org/) 【手动可视化】Data Structure Visualizations (https://www.cs.usfca.edu/~galles/visualization/Algorithms.ht…

基于k8s Deployment的弹性扩缩容及滚动发布机制详解

k8s第一个重要设计思想:控制器模式。k8s里第一个控制器模式的完整实现:Deployment。它实现了k8s一大重要功能:Pod的“水平扩展/收缩”(horizontal scaling out/in)。该功能从PaaS时代开始就是一个平台级项目必备编排能…

cookie和session的工作过程和作用:弥补http无状态的不足

cookie是客户端浏览器保存服务端数据的一种机制。当通过浏览器去访问服务端时,服务端可以把状态数据以key-value的形式写入到cookie中,存储到浏览器。浏览器下次去服务服务端时,就可以把这些状态数据携带给服务器端,服务器端可以根…

OceanBase架构概览

了解一个系统或软件,比较好的一种方式是了解其架构,下图是官网上的架构图,基于V 4.2.1版本 OceanBase 使用通用服务器硬件,依赖本地存储,分布式部署在多个服务器上,每个服务器都是对等的,数据库…

如何画出优秀的系统架构图-架构师系列-学习总结

--- 后之视今,亦犹今之视昔! 目录 早期系统架构图 早期系统架构视图 41视图解读 41架构视图缺点 现代系统架构图的指导实践 业务架构 例子 使用场景 画图技巧 客户端架构、前端架构 例子 使用场景 画图技巧 系统架构 例子 定义 使用场…

Keepalived 双机热备

本章主要内容: Keepalived 双机热备基础知识学会构建双机热备系统学会构建LVSHA 高可用群集 简介 在这个高度信息化的IT时代,企业的生产系统,业务运营,销售和支持,以及日常管理等环节越来越依赖于计算机和服务&#…

class_1:qt的安装及基本使用方式

一、选择组件: 1、windows编译工具:MinGW 7.30 32-bit MinGW 7.30 64-bit 2、QT源代码:sources 3、QT的绘图模块:QT charts 4、QT虚拟键盘:QT Virtual Keyboard 5、QT Creational 4.12.2 GDB 二、新建QT项目 文…

【MATLAB】 HANTS滤波算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 HANTS滤波算法是一种时间序列谐波分析方法,它综合了平滑和滤波两种方法,能够充分利用遥感图像存在时间性和空间性的特点,将其空间上的分布规律和时间上的变化规律联系起来…