数栈优化案例:物流客户Elasticsearch集群性能优化

数栈优化案例:物流客户Elasticsearch集群性能优化本文整理自:袋鼠云技术荟 | 某物流客户Elasticsearch集群性能优化案例 数栈是云原生—站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,Flink…

数栈优化案例:物流客户Elasticsearch集群性能优化

本文整理自:袋鼠云技术荟 | 某物流客户Elasticsearch集群性能优化案例

数栈是云原生—站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变化的数据,是全域、异构、批流一体的数据同步引擎。大家喜欢的话请给我们点个star!star!star!

github开源项目:https://github.com/DTStack/flinkx

gitee开源项目:https://gitee.com/dtstack_dev_0/flinkx

 

一、客户背景

客户使用ES来进行数据存储、快速查询业务订单记录,但是经常会出现业务高峰期ES集群的cpu负载、内存使用均较高,查询延迟大,导致前端业务访问出现大量超时的情况,极大影响其客户使用体验。

部分监控如下图:

数栈优化案例:物流客户Elasticsearch集群性能优化

1、 集群架构如下:

数栈优化案例:物流客户Elasticsearch集群性能优化

集群节点配置:8数据节点(16C64G);3主节点(8C32G)

 

2、 集群存在问题分析

  • 业务层面

    与客户业务人员沟通,业务处理中有几个聚合查询会占用较多的内存,且这类查询对准确性要求较高,需精确统计所有匹配结果。

  • 架构层面

      存在4-5T的单个较大索引,该索引字段多达2000+,分片大小普遍60G+,最高达到130G+,是制约查询性能的一个较大瓶颈,另外集群在业务高峰期还会出现经常的fullgc,这是出现访问超时的直接原因。 

 如图:

数栈优化案例:物流客户Elasticsearch集群性能优化

 

二、Elasticsearch集群优化

与客户开发人员沟通了解集群在业务上存在的问题,结合我们在ES这块的服务经验,从语句参数、索引、架构等多个角度给客户提出调优建议。

1、语句、参数调优

客户已提供4个慢查询语句,语句中聚合查询使用”execution_hint”: “map”,该执行策略会把命中的记录都捞回内存中,一旦查询结果较大就会占用大量内存。建议使用terminator_after,此方法可以控制查询结果数量,另外将不参与聚合、排序的字段设置为doc_values:false, 节省磁盘空间提升索引速度。

2、 集群架构优化:

数栈优化案例:物流客户Elasticsearch集群性能优化

在原有集群基础上添加协调节点或者扩容数据节点:

  • 添加协调节点:优点是可以减轻数据节点压力,变更较为容易,缓解fullgc频繁出现的问题;
  • 扩容数据节点:优点是可以减轻当前数据节点压力,也可以减小分片大小;但是增加索引分片需要重新创建索引,重新导入数据,且当前节点存储压力不大,同时增加数据节点对存储空间有一定的浪费。

结合客户业务特性,我们推荐客户使用添加协调节点的方式对集群架构进行优化。

3、 集群索引优化:

可以对集群进行索引拆分和使用别名两方面进行优化调整。

  • 拆分索引:对索引字段进行拆分并确认大小,可以解决当前索引分片过大的问题,提升查询性能。
  • 使用别名:根据日期定期创建新的索引(建议按月创建索引),根据业务对统一查询的索引创建统一别名,该方法可以彻底解决当前索引分片过大问题,优化查询性能。

 

三、集群优化效果

集群优化后整体性能有明显提升:

数栈优化案例:物流客户Elasticsearch集群性能优化

a. ES集群负载、内存较为平稳,业务高峰期不会有较大波动;

b. ES集群FullGC出现频次极大降低,降低对业务的影响;

c. ES聚合查询延迟减小,业务数据查询性能提升,速度达到百毫秒级别

 

四、写在最后

袋鼠云通过数据集成优化、任务调度优化、代码优化、全链路数据质量保障、故障紧急处理、大数据平台运维,为客户提供大数据系统运维保障服务。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6268.html

(0)
上一篇 2023-04-13
下一篇 2023-04-13

相关推荐

  • 学习Oracle的历程 (一)

    学习Oracle的历程 (一)一 . Oracle 简介 功能强大、性能卓越 Oracle数据库思想的诞生是在IBM公司。 上世纪60年代-70年代–IBM的一款数据库IMS,98%+ 二. Oracle 10g 安装包 链接…

    2023-03-03
    143
  • Python编程异常:’return’出现在函数外部的解决方案

    Python编程异常:’return’出现在函数外部的解决方案在Python编程过程中,我们在编写函数时常常会遇到一个问题,即“return”出现在函数外部的异常。该异常是由于程序的控制流程异常所引起,导致程序无法正常执行。

    2023-12-31
    137
  • 荣耀平板ⅴ7pro_荣耀平板5值得买吗

    荣耀平板ⅴ7pro_荣耀平板5值得买吗  上个月荣耀发布一款新品平板电脑——荣耀平板V6,现在距离官方给出公布售价的时间只有几天。我对这款平板电脑可以说是蠢蠢欲动,就希望它的售价不要太高。这款平板电脑可以说是集好用与好玩于一身,对我这种…

    2023-03-09
    155
  • Mongodb使用总结[亲测有效]

    Mongodb使用总结[亲测有效]Mongodb使用总结 基于内存操作,便于与网站交互 数据库-集合-文档(存储多种数据类型),我们的操作都是基于单文档进行操作,并且通过冗余字段进行操作 嵌入式数组文档减少了对昂贵连接的需求 Douc

    2023-06-01
    172
  • 数据库管理与高可用第四章备份与恢复

    数据库管理与高可用第四章备份与恢复数据库管理与高可用第四章备份与恢复1.MySQL的完全备份mysqldump命令备份数据库◆备份单个库语法:mysqldump-u用户名-p[密码][选项][库名]>/备份路径/备份文件名例如:my…

    2023-04-05
    159
  • 如何安装numpy

    如何安装numpybNumpy/b是Python中一个重要的科学计算库,它提供了许多高效的数学函数和数组类型,用于处理大型、复杂的数据集。为了能够使用Numpy,我们需要先将它安装到我们的计算机上。接下来,我们将探讨如何安装Numpy。

    2024-09-01
    23
  • Python中-inf的用法

    Python中-inf的用法在Python中,-inf是一个特殊的值,表示负无穷大。这个值在某些场景中非常有用,如在算法中使用它来表示最小值或无限小的数。本文将从多个方面详细阐述Python中-inf的用法。

    2024-05-04
    61
  • 使用Jupyter进行Python编程

    使用Jupyter进行Python编程随着数据分析和机器学习的火热,Python作为一种优秀的编程语言,也越来越受到数据科学家的青睐。而Jupyter,则是Python编程中必不可少的利器。其灵活的交互式界面、方便的数据可视化和便捷的代码编辑功能,使得它成为Python编码的不二之选。本文将从多个方面详细介绍如何使用Jupyter进行Python编程。

    2024-06-15
    49

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注