可观测性在灰度发布中的应用

news2024/11/24 19:43:05

前言

随着云计算的发展、云原生时代的来临,企业数字化转型进程不断深入,应用开发也越来越多地基于微服务化模式,快速迭代的能力使得应用开发更高效、更灵活。同时,也不得不面临应用版本快速升级所带来的的巨大挑战。
传统的发布方式是通过新版本全量替换旧版本,这种模式存在停机时间较长的问题,业务端的压力愈发明显。同时,在新版本发布时,如果直接将应用程序从当前版本全量升级到新版本,风险存在的可能性和严重性也不容忽视。传统发布方式存在如下一些典型的弊端:

  • 影响用户体验:如果新版本存在功能或性能问题,那么,所有新版本服务实例都会存在同样问题,从而影响所有用户的使用。
  • 影响服务可用性:全量发布一般需要做停机升级(要么同时都为新版本,要么同时都为老版本),导致业务中断,影响服务可用性。
    所以,尽可能降低发布对业务造成的影响就变得越来越重要,“业务无感知”的灰度发布策略就大众的视野中。

灰度发布概述

灰度发布,是一种软件部署策略。常规做法是将新版本的应用程序投入生产环境,保留当前版本,并将一小部分流量重定向到新版本中。在此过程中,所有发送到新版本的请求都将被监测,确认新版本可用后,将逐渐将越来越多的流量引导到新版本中。
通过灰度发布,有助于识别可能存在的潜在错误、性能问题或其他问题,以便在全面部署之前及时解决这些问题,从而极大地减少对更广大用户的使用影响,提高用户体验和满意度,加速迭代速度。
可观测性对于灰度发布的成功非常重要,能够为团队提供实时的服务运行状态的数据支持,从而更好地观测和分析新版本的性能、稳定性和用户反馈等指标,更快地发现和解决问题,提高发布的成功率和用户体验。

可观测性在灰度发布的使用价值

在灰度发布过程中,需要对发布的新版本具备评估分析能力,包括对新版本的性能、稳定性和用户反馈等指标进行分析。可观测性可以帮助团队更好地观测和分析这些指标,从而更快地发现和解决问题。具体来说,可观测性可以帮助团队实现以下目标:

  • 监控应用程序的性能和稳定性:通过监控应用程序的指标,例如响应时间、错误率、CPU 使用率等,可以及时发现性能和稳定性问题,并采取相应的措施。
  • 实现快速故障排除:通过可观测性工具,可以快速定位和解决问题,减少对用户的影响。
  • 支持数据驱动的决策:通过可观测性工具,可以收集和分析大量的数据,为团队提供数据支持,支持数据驱动的决策。
    因此,可观测性对于灰度发布的成功非常重要,能够帮助团队更好地监控和分析新版本的性能、稳定性和用户反馈等指标,从而更快地发现和解决问题,提高发布的成功率和用户体验。

可观测性在灰度发布中的应用

要评估灰度发布中不同版本的性能及故障,需要收集和分析运行数据。通过观测云的 one agent 数据采集和标签化能力,能够快速、方便地采集不同服务版本中的运行数据,从而加以分析后,对新版本做出评估。

4.1 测试环境应用部署说明

测试环境中的所有服务是部署在 K8s 中。部署结构如下图所示:
 


前端 Web 页面请求通过 Gateway 网关访问后端的AuthSystem服务,前端 Web 是 Vue 开发的,后端服务是 Java 开发。

4.2 服务版本发布说明

测试将通过对System服务进行灰度发布。发布示意图说明如下:
 


 

4.3 服务链路的接入和数据标签化

4.3.1 服务链路的接入配置说明

在接入 Java 应用 APM 时,需要使用到dd-java-agent.jar包。在 Kubernetes 的环境中,为了不侵入应用的镜像,常用的方式是在部署应用的 yaml 中使用 initContainers,利用相同 Pod 中的容器共享存储的方式来使用dd-java-agent.jar
观测云提供 DataKit Operator 的方式向特殊 Pod 提供注入 dd-lib 文件和 environment ,这种方式可以更方便、更快捷地接入应用链路。

4.3.2 标签化说明

标签可以帮助对数据进行分类和组织,通过对服务运行的监控数据打标签,我们可以更好地了解数据的来源、类型、状态等信息,从而更好地进行数据分析。这里,我们就是通过对System服务发布的不同版本打上对应的标签,来实现后续对不同版本运行情况进行观测和分析。
该文中的测试环境中,在服务对应 pod 部署的 yaml 文件中,原始运行服务的版本通过-Ddd.tag参数,打上版本为 version:v1.0的标签。如下图所示:

对新发布的服务版本通过-Ddd.tag参数,打上版本为v2.0 的标签。如下图所示:

通过上述的标签配置,服务对应的所有链路中都会带有对应的版本信息。对应效果如下图所示:

在服务运行的过程中,可以通过对不同版本进行分组来做实时对比观测和分析。

4.4 对服务灰度发布的观测和分析

通过对比新旧两个版本的 QPS、服务执行耗时、服务错误率等指标数据进行实时监测,可以帮助快速发现问题和异常。

4.4.1 看板感知能力

首先,可以通过观测云的「场景」功能,配置针对相关服务灰度发布的观测看板。如下图所示:

通过看板,我们能够实时感知两个服务版本在运行过程中的状态,包括对应的请求数据量、服务错误率、以及服务的响应时间等关键指标。

4.4.2 服务运行状态分析

4.4.2.1 请求数量分析

通过「服务请求数」图表,我们能够清晰知道不同服务版本上的请求量。同时,当新版本做全量切换后,也可以通过该视图来观测全部请求流量是否路由到了正确的服务版本上。

4.4.2.2 服务性能分析

从上图的性能指标中(P75、P90 和 P99),能够直观看到System服务的新版本v2.0比起v1.0存在明显的响应时间长的问题。为了进一步分析该问题,我们可以通过在对应图表上做进一步的下钻,去查看链路的执行详细情况。如下图所示:
 


当跳转到「链路」详情页后,可以看到在对应时间段链路的耗时信息。这里也可以通过「持续时间」排序来找到耗时比较长的链路。如下图所示:

点开其中「执行时间」较长的链路,打开服务执行的「火焰图」详情,如下图所示:

从「火焰图」中,能清晰地看到v2.0版本中的SysRoleController.list这个调用消耗了比较长的时间为 6.04 秒。虽然,该方法调用了 MySQL,但是,从图中可以看到 MySQL 本身执行比较快。所以,问题点并不在数据库侧,需要对代码做进一步分析。

这里将不再做进一步的分析。因为为了模拟性能问题,在v2.0的相关代码中简单加了 5s 的 sleep,整体执行时间也和上面的火焰图对得上。

4.4.2.3 服务错误率分析

通过看板中的「服务错误率」图表,可以感知同一服务的不同版本在运行过程的错误发生情况。对错误率较高的服务版本,同样可以通过图表的下钻能力去查看对应错误的链路情况。如下图所示:

通过链路的详情页面,可以查看更进一步的执行错误信息。如下图所示:

不仅如此,也可以在链路详情中关联应用日志、主机资源使用、网络和 JVM 运行情况等数据做关联分析,提高问题定位和根因溯源的效率。

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

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

相关文章

【数据结构与算法系列3】有序数组的平方 (C++ Python)

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 …

Spring框架的未来:Spring 6的新特性预览

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Matlab图像处理-自适应阈值

自适应阈值 在许多的情况下,背景的灰度值并不是常数,物体和背景的对比度在图像中也有变化。这时,一个在图像中某一区域效果良好的阈值在其它区域却可能效果很差。在这种情况下,把灰度阈值取成一个随图像中位置缓慢变化的函数值是…

深度优先搜索遍历与广度优先搜索遍历

目录 一.深度优先搜索遍历 1.深度优先遍历的方法 2.采用邻接矩阵表示图的深度优先搜索遍历 3.非连通图的遍历 二.广度优先搜索遍历 1.广度优先搜索遍历的方法 2.非连通图的广度遍历 3.广度优先搜索遍历的实现 4.按广度优先非递归遍历连通图 一.深度优先搜索遍历 1.深…

D. Matrix Cascade

Problem - D - Codeforces 思路:这个题就是要维护每个位置被修改了几次,但是一直没想到一个好的方法,一直在关注这个点对下面的点产生的影响,但是其实我们可以维护这个点能够由那几个点影响,其实就是一个以x,y为下顶点…

如何把glb格式模型gltf格式模型导入3dmax和C4D,U3D,UE4这些主流软件中

咱有时候去glbxz.com添加链接描述 官网下载免费glb格式模型,gltf模型下载时候是没有通用格式,例如fbx,obj,这个时候3dmax和C4D直接打开导入是不行的,也可以制作glb模型,扣扣:424081801 这个时候…

扫地僧万能HTML模板站群【搜狗站群单站模式内页收录】配置教程

浅测【搜狗内页收录较好】可自行进行测试对比 [测试的域名有搜狗蜘蛛,但是不收录] [一换程序嘎嘎乱叫] [测试的为内页收录,非泛站] [泛站容易被端,搜狗不建议泛站] 第一步配置SEO设置如图: 站群模式:单站 泛站…

网络延迟简介:为什么它重要,如何测量

1、什么是延迟呢? 延迟其实就是我们在网页浏览或者使用应用时,从我们点击请求到服务器返回结果给我们之间的时间差。就像你在跟朋友打电话,你说完话后,朋友听到并回应你所说话的时间差一样。 我们的最终目标是创建一个系统,让这个时间差变得尽可能短,也就是实现零延迟。…

使用Mybatis实现基本的增删改查------数据输出

需要和批量注入一起使用 当sql返回的实体类在java中没有的时候,可以使用map接值 开启自动事务提交openSession(true),事务在最后会进行自动提交 //3.获取Sqlsession对象[自动开启JDBC]//会自动开启事务,不会自动提交事务.但是提交事务需要sqlsession.commit()方法//openSession…

【C++】day2学习成果:引用、结构体等等。。。

1.封装一个结构体,结构体中包含一个私有数组,用来存放学生的成绩,包含一个私有变量,用来记录学生个数, 提供一个公有成员函数,void setNum(int num)用于设置学生个数 提供一个公有成员函数:void…

Python进阶语法之推导式

目录 目录 前言 思维导图 1.普通写法 1.1代码解读 1.2,结果展示 2.列表推导式 2.1,重要 2.2,列表推导式初步写法 2.2.1,代码解读 2.2.2,结果展示 2.3,列表表达式之条件判断式 2.3.1,代码解读 2.3.2,结果展示 2.4,进行两层for循环 2.4.1,代码解读 2.4.2,结…

【PowerQuery】Excel 的自动刷新功能-最低一分钟刷新

在Excel集成了PowerQuery之后,它提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接…

Python绘图——生存曲线

今天我们将一起学习如何利用Python中____lifelines包_____建模和分析生存数据并用plot_绘制生存曲线,以及更改其样式如标题字号大小,坐标轴及图例设置等,使用Python即可绘制出SCI论文图!___” lifelines包 lifelines 是一个 Pyt…

猫头虎的技术笔记:Spring Boot启动报错解决方案

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

算法竞赛个人注意事项

浅浅记录一下自己在算法竞赛中的注意事项。 数据类 注意看数大小,数学库中的函数尽量加上 * 1.0,转成double,防止整型溢出。,int型相乘如果可能溢出,乘 * 1LL。 数据范围大于1e6,注意用快读。 浮点数输…

桉木建筑模板与其他常见建筑模板材料相比有什么优势?

桉木建筑模板与其他常见建筑模板材料相比具有以下优势: 1. 强度和稳定性:桉木具有较高的密度和硬度,使其具备出色的抗弯和抗压能力。相比于其他常见建筑模板材料如胶合板或钢模板,桉木建筑模板能够更好地承受施工期间的荷载和压力…

类和对象的基本概念

目录 c和c中结构体的区别 类的封装 c语言中的行为和属性封装存在的问题 c中对事物的封装——类的封装 尽量将成员变量设置为private 代码示例 c和c中结构体的区别 c语言中struct只有变量,不能存放函数,也就是数据(属性)和行为&#xf…

学信息系统项目管理师第4版系列06_项目管理概论

1. 项目基础 1.1. 项目是为创造独特的产品、服务或成果而进行的临时性工作 1.1.1. 独特的产品、服务或成果 1.1.2. 临时性工作 1.1.2.1. 项目有明确的起点和终点 1.1.2.2. 不一定意味着项目的持续时间短 1.1.2.3. 临时性是项目的特点,不是项目目标的特点 1.1…

什么是 DNS 隧道以及如何检测和防止攻击

什么是 DNS 隧道? DNS 隧道是一种DNS 攻击技术,涉及在 DNS 查询和响应中对其他协议或程序的信息进行编码。DNS 隧道通常具有可以锁定目标 DNS 服务器的数据有效负载,允许攻击者管理应用程序和远程服务器。 DNS 隧道往往依赖于受感染系统的…

记一起小意外事件引起的批量重命名文件名

一、事件描述 某次,因某业务系统迁移,一线人员对业务目录误操作,执行打包命令过程中导致Tomcat下的web应用程序无法使用,检查后发现项目下所有文件名都加了gz格式;询问一线,发现是对项目目录执行了:gzip -r ./tomcat导致程序文件找不到;报错如下: 二、事件处理 1、查看…