向左偏移的云应用容器监控方法

news2024/11/13 2:58:25

向左偏移是一种在软件开发生命周期的早期强调测试、监控和自动化的软件开发和操作方法。向左偏移方法的目标是通过尽早发现问题并迅速解决,从而预防问题的发生。

当您尽早发现可扩展性问题或错误时,解决它将更加迅速和经济高效。将低效的代码移动到云容器可能会产生高昂的成本,因为它可能会激活自动扩展并增加您的月账单。此外,在您能够识别、隔离并修复问题之前,您将处于紧急状态。

【squids.cn】 目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等

问题描述

我想向您展示一个案例,在这个案例中,我们成功地避免了一个可能在生产环境中引发重大问题的应用程序潜在问题。

我正在审查最近应用更改后的UAT基础设施的性能报告。它是一个使用MariaDB作为后端的Spring Boot微服务,在Apache反向代理和AWS应用负载均衡器后面运行。新功能已成功集成,并且所有UAT测试用例都已通过。然而,我注意到MariaDB性能仪表板中的性能图表与部署前的模式有所偏离。

以下是事件的时间线。

8月6日14:13,应用程序与包含嵌入式Tomcat的新Spring Boot jar文件一起重新启动。

图片

应用在迁移后重启 

在14:52,MariaDB的查询处理速度从0.1增加到88次查询/秒,然后增加到301次查询/秒。

图片

查询速率增加

此外,系统CPU的使用率从1%提高到6%。

图片

CPU使用率上升

最后,JVM在G1 Young Generation垃圾收集上花费的时间从0%增加到0.1%,并保持在该水平。

图片

JVM上的GC时间增加

该应用程序在其UAT阶段异常地发出300个查询/秒,这远远超出了其设计的范围。新功能导致数据库连接增加,这就是查询增加如此剧烈的原因。然而,监控仪表板显示,在部署新版本之前,有问题的措施是正常的。

解决方案 

这是一个使用JPA查询MariaDB的Spring Boot应用程序。应用程序旨在在最小负载下在两个容器上运行,但预期可以扩展到十个。

图片

Web - app - db拓扑结构

如果单个容器每秒可以生成300个查询,那么如果所有十个容器都在运行,它可以每秒处理3000个查询吗?数据库是否有足够的连接来满足应用程序其他部分的需求?

我们别无选择,只能回到开发者的桌面上检查Git中的更改。

新的更改将从一个表中取出几条记录并处理它们。这是我们在服务类中观察到的。

List findAll = this.xRepository.findAll();

不,使用Spring的CrudRepository中的findAll()方法而不进行分页是不高效的。分页有助于通过限制抓取的数据量来减少从数据库检索数据所需的时间。这是我们的初级RDBMS教育教给我们的。此外,分页有助于保持低内存使用量,以防止由于数据过载而导致应用程序崩溃,以及减少Java虚拟机的垃圾收集工作量,这在上述问题陈述中提到。

此测试仅使用一个容器中的2,000条记录进行。如果这段代码要移到生产中,在最多10个容器中有大约200,000条记录,那么那天它可能会给团队带来很大的压力和担忧。

应用程序通过向方法添加WHERE子句进行了重建。

List findAll = this.xRepository.findAllByY(Y);

正常功能得到了恢复。每秒的查询数量从300减少到30,投入垃圾收集的努力恢复到原来的水平。此外,系统的CPU使用率也降低了。

图片

查询速率恢复正常 

学习和总结 

任何在网站可靠性工程(SRE)中工作的人都会对这一发现给予高度重视。我们能够在不必提高为Severity 1标志的情况下对其采取行动。如果这个有缺陷的包在生产中部署,它可能会触发客户的自动缩放阈值,即使没有额外的用户负载,也可能导致启动新的容器。

从这个故事中,我们有三个主要的启示。

首先,从一开始就启用可观察性解决方案是最佳实践,因为它可以提供一个事件历史,该历史可以用来识别潜在的问题。没有这个历史,我可能不会认真对待0.1%的垃圾收集百分比和6%的CPU消耗,代码可能已经发布到生产中,带来灾难性的后果。扩展监控解决方案的范围到UAT服务器帮助团队识别潜在的根本原因,并在它们发生之前预防问题。

其次,性能相关的测试用例应该存在于测试过程中,并且这些应该由在可观察性方面有经验的人进行审查。这将确保代码的功能被测试,以及其性能。

第三,云原生的性能跟踪技术很适合接收关于高利用率、可用性等的警报。为了实现可观察性,您可能需要具备适当的工具和专业知识。编码愉快!

作者:Pandian Ramaiah

更多技术干货请关注公众号 “云原生数据库”

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Jsmooth打包JavaFx程序为EXE文件

配置IDEA 第一步: 第二步: MANIFEST.MF的文件路径,必须在resources文件夹中,如果没有,就创建一个。 第三步:配置项目所需jar包的相对路径 最后: 点击确定后,编译Jar 配置Jsmooth …

Docker从认识到实践再到底层原理(四-1)|Docker镜像仓库|超详细详解

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

k8s node环境部署(三)

1、添加node1、node2环境 前面配置master环境的截图最后一段 复制下来 分别在node主机执行 kubeadm join 192.168.37.132:6443 --token p5omh3.cqjqt8ymrwkdn2fc \ --discovery-token-ca-cert-hash sha256:608a1cbadd060cfdeac2fae84c19609061b750ab51bf9a19887ff7ea…

恒运资本:消费电子概念再爆发,冠石科技三连板,捷荣技术9日大涨127%

消费电子概念8日盘中再度走高,截至发稿,利和兴涨近15%,日久光电、冠石科技、捷荣技能、华映科技、东睦股份等涨停,大富科技涨超7%。 值得注意的是,冠石科技已接连3日涨停,公司昨日晚间发布危险提示称&…

数字钥匙关键技术:UWB(超宽带)实现原理一文讲透

在之前的文章《一文讲透超宽带(UWB)前世今生》中,我们从起源、定义、标准、发展、应用等角度概述了UWB技术。根据UWB的特性,其基础功能分为:数据传输、雷达成像、测距定位。接下来我们将概述其数据传输和雷达成像功能&…

YOLOV7改进-对小目标有效的BiFormer注意力机制

如果要在sppcspc后面加一个注意力模块BiFormer 1、 普通加 1、models-common.py搜这个模块 2、直接加 3、全部复制下来,models新建文件 4、common导入进来 5、填上一层的输出通道数 2、模块里加 难点:在配置文件找到对应的这一块 yolov7x中 1、…

GE IS220PDIAH1A 336A4940CSP1 控制主板模块

GE IS220PDIAH1A 336A4940CSP1 是一款控制主板模块,通常用于工业自动化和控制系统中。以下是可能与这种控制主板模块相关的一些产品功能: 信号处理: GE IS220PDIAH1A 336A4940CSP1控制主板模块通常负责信号处理,可以接收、放大、滤…

机器学习算法基础--线性回归算法

目录 1.算法求解步骤 2.算法核心代码 3.算法效果展示 1.算法求解步骤 线性回归算法流程: #1.数据导入与处理 #2.创建线性回归模型并拟合数据 #3.计算回归直线的斜率和截距 #4.预测 x5 时的y值 #5.进行进一步预测 #5.进行进一步预测 2.算法核心代码 #机器学习算法基础第一…

数据结构与算法:练习与实践的重要性

文章目录 为什么练习与实践很重要?1. 熟练应用2. 问题解决能力3. 代码效率4. 面试准备 如何练习与实践?1. 在线评测平台2. 自主设计数据结构3. 解决不同类型的问题 持续学习与实践 🎉欢迎来到数据结构学习专栏~数据结构与算法:练习…

MySQL使用CASE WHEN统计SQL语句代替子查询SQL统计,CASE WHEN常用写法,根据不同的条件对数据进行分类、分组和聚合

MySQL中,写一个CASE WHEN的统计SQL语句,代替子查询SQL统计语句 假设我们有一个名为"orders"的表,其中包含订单信息,包括订单号(order_id)、订单金额(order_amount)等列。我们想要统计每个订单级别的订单数量&#xff0c…

深度学习:基于循环神经网络RNN实现自然语言生成

目录 1 循环神经网络介绍 1.1 什么是循环神经网络 1.2 RNN的网络结构 1.3 RNN的工作原理 ​编辑 1.4 RNN的应用场景 2 基于RNN实现语句生成 2.1 句子生成介绍 2.2 基于pytorch实现语句生成 2.3 完整代码 2.4 该模型的局限 3 总结 1 循环神经网络介绍 1.1 什么是循环…

Anaconda - 操作系统安装程序 简要介绍

Anaconda 简要介绍 1. Anaconda 简介2. Anaconda 体系结构3. Anaconda 开发模型4. Anaconda 启动概述5. Anaconda 源码1. 接口2. 自定义组件3. 硬盘分区:使用python-blivet包4. Bootloader5. 各个步骤的配置:6. 安装软件包:7. 安装控制&#…

华为强势回归,苹果iPhone15ProMax独占潜望式镜头,预计销量受损

9月8日消息,据集邦咨询发布的产业洞察报告显示,苹果即将发布的iPhone 15 Pro Max将会独占潜望式镜头,该机型的占比预计将会达到40%左右。报告同时预估,今年iPhone 15系列手机的出货量将达到8000万,相比去年同期增长6%以…

无需公网IP教你如何外网远程访问管家婆ERP进销存

文章目录 前言 1.管家婆服务2. 内网穿透2.1 安装cpolar内网穿透2.2 设置远程访问 3. 固定访问地址4. 配置固定公网访问地址 前言 管家婆辉煌系列产品是中小企业进销存、财务管理一体化的典范软件,历经十余年市场的洗礼,深受广大中小企业的欢迎&#xff…

冠达管理:不要误读“房贷利率降低”

最近,人人都知道房贷利率降了,但如果细问“怎么降的、哪些城市降了、将产生何种影响”,恐怕不少人都是水中望月。正因此,部分房地产中介、营销机构利用购房者的信息不对称劣势,刻意夸张房贷利率下降关于楼市价格的影响…

16 除自身以外数组的乘积

除自身以外数组的乘积 题解1 前缀积*后缀积题解2 空间优化 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数…

YAPI的搭建和使用

https://www.cnblogs.com/yehuisir/p/12315137.html 1、#进入数据库 mongo 2、#进入admin库 use admin 3、#添加一个用户root(此步骤可不执行) db.createUser({user:"root",pwd:"123456abc.COM",roles:["root"]}) …

【合作 】联通、壳牌、联想、国金证券等众多企业签约 Eolink !

联通、壳牌、联想、华润置地、中国铁塔等多家知名企业签约 Eolink,携手落地 API 全生命周期管理,感谢广大企业对 Eolink 的信任和选择! Eolink 致力于为企业提供最全面的 API 研发管理解决方案,提供高效、可靠的工具以及服务&…

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中,我们经常需要与后端服务器进行数据交互。其中,PUT 请求是一种常用的方法,用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求,我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…

解析进程复制:父子进程内存地址的神秘之处

当涉及到进程复制时,有时会出现一个令人困惑的现象:在父进程和子进程中,某些变量的内存地址似乎是相同的,尽管它们实际上是独立的进程。下面我将简单解释这个现象以及背后的原因。 进程复制:父子进程的神秘关系 在多…