当前位置: 首页 > news >正文

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

前言

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

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

灰度发布概述

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

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

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

  • 监控应用程序的性能和稳定性:通过监控应用程序的指标,例如响应时间、错误率、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 运行情况等数据做关联分析,提高问题定位和根因溯源的效率。

相关文章:

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

前言 随着云计算的发展、云原生时代的来临,企业数字化转型进程不断深入,应用开发也越来越多地基于微服务化模式,快速迭代的能力使得应用开发更高效、更灵活。同时,也不得不面临应用版本快速升级所带来的的巨大挑战。 传统的发布方…...

vscode开发油猴插件环境配置指南

文章目录 一、环境配置1.1油猴插件开始编写代码1.2油猴插件配置1.2.1浏览器插件权限1.2.2插件自身权限 2. 油猴脚本API学习2.1 头文件2.2 油猴API 一、环境配置 1.1油猴插件开始编写代码 在vscode 中写入如下代码‘ // UserScript // name cds_test // namespace …...

网站不收录没排名降权怎么处理-紧急措施可恢复网站

网站降权对于SEO人员来说是非常致命的打击,因为网站一旦被搜索引擎降权,排名会严重地下降,网站的流量也会大幅下降,直接影响到收益。而且处理不好的话会导致恢复的时间周期无限拉长,所以网站被降权后我们要第一时间采取…...

C++vector模拟实现

vector模拟实现 1.构造函数2.拷贝构造3.析构赋值运算符重载4.iterator5.modifiers5.1push_back5.2pop_back5.3empty5.4insert5.5erase5.6swap 6.Capacity6.1size6.2capacity6.3reserve6.4resize6.5empty 7.Element access7.1operator[]7.2at 8.在谈reserve vector官方库实现的是…...

《DATASET DISTILLATION》

这篇文章提出了数据浓缩的办法,在前面已有的知识浓缩(压缩模型)的经验上,提出了不压缩模型,转而压缩数据集的办法,在压缩数据集上训练模型得到的效果尽可能地接近原始数据集的效果。 摘要 模型蒸馏的目的是…...

GDPU 数据结构 天码行空1

1. 病历信息管理 实现病历查询功能。具体要求如下: 定义一个结构体描述病人病历信息(病历号,姓名,症状);完成功能如下: 输入功能:输入5个病人的信息; 查询功能:输入姓名,在5个病历中进行查找,如果找到则显示该人的信息&#xff0c…...

【C++】红黑树的模拟实现

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…...

【多线程】Thread 类 详解

Thread 类 详解 一. 创建线程1. 继承 Thread 类2. 实现 Runnable 接口3. 其他变形4. 多线程的优势-增加运行速度 二. Thread 类1. 构造方法2. 常见属性3. 启动线程-start()4. 中断线程-interrupt()5. 线程等待-join()6. 线程休眠-sleep()7. 获取当前线程引用 三. 线程的状态1. …...

LINUX 网络管理

目录 一、NetworkManager的特点 二、配置网络 1、使用ip命令临时配置 1)查看网卡在网络层的配置信息 2)查看网卡在数据链路层的配置信息 3)添加或者删除临时的网卡 4)禁用和启动指定网卡 2、修改配置文件 3、nmcli命令行…...

refresh rate

1920 x 1080 显卡刷新率 60...

使用 NGINX Unit 实施应用隔离

原文作者:Artem Konev - Senior Technical Writer 原文链接:使用 NGINX Unit 实施应用隔离 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn NGINX Unit 特性集的最新动态之一是支持应用隔离,该特…...

2023/09/12 qtc++

实现一个图形类(Shape) ,包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle) ,继承自图形类,包含私有属性:半径 公共成员函数:特殊成员函数…...

全科医学科常用评估量表汇总,建议收藏!

根据全科医学科医生的量表使用情况,笔者整理了10个常用的全科医学科量表,可在线评测直接出结果,可转发使用,可生成二维码使用,可创建项目进行数据管理,有需要的小伙伴赶紧收藏! 日常生活能力量表…...

了解消息中间件的基础知识

为什么要使用消息中间件? 解耦:消息中间件可以使不同的应用程序通过解耦的方式进行通信,减少系统间的依赖关系提供异步通信:消息中间件可以实现异步消息传递,提高系统的响应性能。流量削峰:消息中间件可以…...

【linux】Linux wps字体缺失、加粗乱码解决

解决wps字体缺失问题 1、下载字体包 git clone https://github.com/iamdh4/ttf-wps-fonts.git2、创建单独放置字体的目录 mkdir /usr/share/fonts/wps-fonts3、复制字体到系统目录下 cp ttf-wps-fonts/* /usr/share/fonts/wps-fonts4、修改字体权限 chmod 644 /usr/share/f…...

每日两题 103二叉树的锯齿形层序遍历(数组) 513找树左下角的值(队列)

103 题目 103 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1: 输入:root [3,9,…...

ROS2报错:ImportError: cannot import name ‘Log‘ from ‘rosgraph_msgs.msg‘

在使用ros2的bag命令查看数据集信息时报错 Traceback (most recent call last):File "/opt/ros/noetic/bin/rosbag", line 34, in <module>import rosbagFile "/opt/ros/noetic/lib/python3/dist-packages/rosbag/__init__.py", line 33, in <mo…...

【Vue】Vue中的代码分为哪几种类型?

在 Vue 中的代码可以分为以下几种类型&#xff1a; 1.模板代码 模板代码是 Vue 中用来生成 HTML 的一种语法&#xff0c;可以通过 Vue 的模板语法和指令来动态渲染页面。模板代码一般写在 Vue 组件的 template 标签中。 2.JavaScript 代码 JavaScript 代码是 Vue 组件中用来…...

es6中includes用法

js中的includes用法 1.数组 includes 可以判断一个数组中是否包含某一个元素&#xff0c;并返回true 或者false [a,b,c].includes(a) true [a,b,c].includes(1) false includes可以包含两个参数&#xff0c;第二个参数表示判断的起始位置 起始位置第一个数字是0。 2.字符串 …...

QT中QRadioButton实现分组C++

通过对QRadioButton组件进行分组可解决QRadioButton组件的互斥性 实现如下。 假设已设计好UI并且有UI代码情况&#xff1a; 头文件引用&#xff1a; #include <QButtonGroup> 分组功能 &#xff0c;cpp文件代码实现&#xff1a; Your_Project::Your_Project(QWidge…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...