1.微服务灰度发布落地实践(方案设计)

前言

微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响现有用户的情况下,逐步将新版本的服务部署到生产环境的策略。通过灰度发布,你可以先将新版本的服务暴露给一小部分用户或特定的流量,观察其表现,确保没有问题后再逐步扩大流量,最终完全替换旧版本。
: 该灰度方案的实现主要基于java 去实现

灰度发布的优点

  1. 降低风险:通过只对一部分用户或流量进行更新,可以减少新版本引入的问题对所有用户的影响。
  2. 快速回滚:如果新版本出现问题,可以迅速将流量切换回旧版本,避免影响更多用户。
  3. 渐进式验证:可以在小范围内验证新版本的功能和性能,确保其稳定性和兼容性。
  4. 用户体验优化:可以通过灰度发布收集用户反馈,逐步优化新功能,而不必一次性全面推广。
  5. 避免熬夜发版

设计概要

在这里插入图片描述

系统架构图

在这里插入图片描述

流量控制

客户端

对于请求流量识别控制,可以据实际需求,设计,下面列举,几种常用的

  1. 用户
  2. 设备ID
  3. 客户端版本
  4. 客户端标签

服务端

流量管理服务端,主要作用,灰度信息管理及控制:

  1. 管理: 用户、 设备ID、 客户端版本,客户端标签,等维度信息;
  2. 灰度信息推送到网关: 让网关依据这些信息,请求识别为正常流量还上灰度流量,
    如果正常流量,将路由到正常实例;如果是灰度流量,将路由到灰度实例;
    注:为了简化设计同时满足核心需求,不做过度设计,实现仅给流量打上灰度标签或无(正常流量)

路由路径

  1. 网关->ribbon->cloud服务->ribbon->cloud服务
  2. 网关->ribbon->cloud服务->thread–>ribbon->dubbo服务
  3. 网关->ribbon->cloud服务->mq服务->cloud服务
  4. 网关->dubbo->dubbo服务->thread->dubbo服务
  5. 网关->dubbo->dubbo服务->mq服务->dubbo服务
    上面大概列举基本请求,所可能经过的路径,要实现灰度路由,经过这些路径的组件,必须实现灰度标签
    的传递,及据灰度标签选择路由

应用客户端实现

因为需要对应用实例状态的控制以及服务实例之间的灰度标签传递和路由,所以需要修改相关客户端代码的实现。

  1. sdk 方式
    如果采用该方法可能面临的问题:
    1.业务应用推广难大,需要对所有应用依赖升级打包
    2.跨线程标签续传可能需求修改来务业务代码,代价太大了
    3 消息队列收发,可能要调整业务代
  2. agent 方式
    该方式可以很好解决sdk方式的三个问题,但开发会复杂些;
  3. 综合分析,采用 agent 方式更为合适些

核心组件分析

1.网关

网关作为后端流量的统一入囗,在灰度布实现中,充当着什么重要的角色;

  1. 担任着灰度信息管理,
  2. 入口流量的灰度识别
  3. 请求路由(确认是路由到正常服务实例或是灰度实例)

2. spring-cloud

如果微服务实现的是spring-cloud,灰度路由的控制需要实现以下几点

  1. eureka client 自动生成实例id作为元数据,上报到注册中心,用作实例与管理标识管理
  2. 灰度标签的续传,如a服务调用b服务,把标签通过http请求头传递到b服务
  3. 拦截feign调用或 RestTemplate 把灰度请求添加到http 请求头里
  4. ribbon 的rule 拦截,依赖灰度标签做路由选择

3. dubbo

如果微服务实现的是dubbo,处理跟spring-cloud类似,灰度路由的控制需要实现以下几点

  1. 灰度标签的续传,如a服务调用b服务,把标签通过rpc attachment续给续传
  2. 拦截dubbo 路由接口,依赖灰度标签做路由选择

4. nocas

如果注册中心使用的是nacos,同步也要自动上报实例id,到nacos注册中心

5. thread

在服务路由选择时,需要依赖灰度标签,所以需要把灰度标签由一引服务传递到另一个服务,或一个线程传到另一个线程;
像经过spring-cloud或dubbo这些框架上面已实现跨服务标签续传,但是如果业务代码内出现跨线程操作后,则会出现标签断传;
处理该问题可以分别对以下接口或类进行,标签续传增强处理:

  1. 拦截Runnable或Callable,接口增强实现标签续传;
  2. 拦截ThreadPoolExecutor, 但是当业务使用Callable或Runnable 时,使用的是lambda表达式时,
    可以通过拦截ThreadPoolExecutor,增强实现标签续传

6. message queue

一般现在的后端服务,难免会用到消息队列;如果用到自然也要对消息队列,消费路由处理;
但是消息的消费无法像微服务之间调用,可据路由规则选择提供方;
既然无法像服务之间调用处理去理路由,只有另求其他办法,据消息中间件具体的特性,也可以实现同样的消息
1.kakfa,rocketmq 可以把topic,分成正常消费组和灰度消费组,各自只接口符合自身状态的消息,其它状成的消息丢掉
2.rabbit 可以分正常virtualhost和灰度virthualHost,收发消息
… 未完,后续介绍具体的实现

硬广

最后,不要脸给大家安利一款mysql监控软件: 安装方便,消耗低,可视化,傻瓜式操作,可以监控慢日志详情、cpu、内存、连接数、tps 等信息
体验演示
下载地址

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

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

相关文章

Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶

1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…

华为管理变革之道:奋斗文化与活力

目录 企业文化是什么? 为什么活下去是华为的文化? 活下来,是华为公司的最低纲领,也是华为公司的最高纲领! 资源终会枯竭,唯有文化才能生生不息 企业文化之一:以客户为中心 企业文化之二&a…

强化数据治理能力,夯实数字政府建设基石!

当下,数字政府建设已成为推动国家治理体系和治理能力现代化的关键路径。数据作为数字化时代的关键生产要素,直接影响着数字政府建设的能效,关系着政府决策的科学性、公共服务的精准性以及社会治理的有效性。因此,通过数据治理来全…

NFC 碰一碰发视频源码搭建技术详解,支持OEM

一、引言 NFC(Near Field Communication)近场通信技术以其便捷性和安全性在现代移动应用中得到了广泛应用。结合视频播放功能,实现 NFC 碰一碰发视频的应用场景,能够为用户带来全新的交互体验,例如在商场的产品推广、景…

【论文阅读】AllMatch: Exploiting All Unlabeled Data for Semi-Supervised Learning

一、引言 在当今的机器学习领域,半监督学习(SSL)作为一种重要的学习范式,受到了广泛的关注。它旨在利用有限的标记数据和大量的未标记数据来提升模型的性能,从而在数据标记成本较高而未标记数据丰富的情况下发挥重要作…

光谱相机与普通相机的区别

一、成像目的 普通相机:主要目的是记录物体的外观形态,生成人眼可见的、直观的二维图像,重点在于还原物体的形状、颜色和纹理等视觉特征,以供人们进行观赏、记录场景或人物等用途。例如,拍摄旅游风景照片、人物肖像等…

基于单片机的蓄电池内阻检测系统设计(论文+源码)

1 系统的功能及方案设计 在本次设计中,考虑到整体设计难度。在此选择了上述的方法一来作为本次蓄电池内阻检测的方案。其系统整个框图如下图1所示。其主要的核心控制模块由LCD显示模块,负载电路模块,AD模数转换模块,继电器控制模…

Git核心概念

版本控制 什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。 为什么要版本控制 有了它你就可以将某个文件回溯到之前的状态,甚至将整…

Kotlin 协程基础知识总结二 —— 启动与取消

协程启动与取消的主要内容: 启动协程:启动构建器、启动模式、作用域构建器、Job 生命周期取消协程:协程的取消、CPU 密集型任务取消、协程取消的副作用、超时任务 1、协程构建器 (P20)launch 与 aysnc 两种协程构建…

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关,除了反向代理后端服务外,还可对接口进行预处理。 比如本文提及的一个小功能,根据http header某个字段的值,等于多少的时候,返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…

群落生态学研究进展▌Hmsc包对于群落生态学假说的解读、Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用

HMSC(Hierarchical Species Distribution Models)是一种用于预测物种分布的统计模型。它在群落生态学中的应用广泛,可以帮助科学家研究物种在不同环境条件下的分布规律,以及预测物种在未来环境变化下的潜在分布范围。 举例来说&a…

MacroSan 2500_24A配置

双控制器电源同时按下,切记/切记/切记 默认信息 默认地址:192.168.0.210 输入ODSP授权后设置密码## 配置端口 物理资源–>设备–>网口–>eth-1:0:0或eth-2:0:0 创建存储池 存储资源–>存储池 介质类型:混合(支持机械及SSD)全闪(仅支持SSD) RAID类型:CRAID-P(基于磁…

SQL-leetcode-180. 连续出现的数字

180. 连续出现的数字 表:Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中,id 是该表的主键。 id 是一个自增列。 找出所有至少连续出现三次的数字。 返回的…

ISDP010_基于DDD架构实现收银用例主成功场景

信息系统开发实践 | 系列文章传送门 ISDP001_课程概述 ISDP002_Maven上_创建Maven项目 ISDP003_Maven下_Maven项目依赖配置 ISDP004_创建SpringBoot3项目 ISDP005_Spring组件与自动装配 ISDP006_逻辑架构设计 ISDP007_Springboot日志配置与单元测试 ISDP008_SpringB…

ElementPlus 自定义封装 el-date-picker 的快捷功能

文章目录 需求分析 需求 分析 我们看到官网上给出的案例如下,但是不太满足我们用户想要的快捷功能,因为不太多,因此需要我们自己封装一些,方法如下 外部自定义该组件的快捷内容 export const getPickerOptions () > {cons…

怎么模仿磁盘 IO 慢的情况?并用于MySQL进行测试

今天给大家分享一篇在测试环境或者是自己想检验自己MySQL性能的文章 实验环境: Rocky Linux 8 镜像:Rocky-8.6-x86_64-dvd.iso 1. 创建一个大文件作为虚拟磁盘 [rootlocalhost ~] dd if/dev/zero of/tmp/slowdisk.img bs1M count100 记录了1000 的读入…

C++--------继承

一、继承的基本概念 继承是 C 中的一个重要特性&#xff0c;它允许一个类&#xff08;派生类或子类&#xff09;继承另一个类&#xff08;基类或父类&#xff09;的属性和方法。这样可以实现代码的重用和建立类之间的层次关系。 #include <iostream>// 基类 class Base…

Ubuntu24.04安装NVIDIA驱动及工具包

Ubuntu24.04安装NVIDIA驱动及工具包 安装nvidia显卡驱动安装cuda驱动安装cuDNN安装Anaconda 安装nvidia显卡驱动 NVIDIA 驱动程序&#xff08;NVIDIA Driver&#xff09;是专为 NVIDIA 图形处理单元&#xff08;GPU&#xff09;设计的软件&#xff0c;它充当操作系统与硬件之间…

探秘“香水的 ChatGPT”:AI 开启嗅觉奇幻之旅!

你没有看错&#xff0c;AI也能闻到味道了&#xff01;这是一家名为Osmo公司公布的信息&#xff0c;他们成功创造出了由AI生成的李子味道&#xff0c;快跟着小编一探究竟吧~ 【图片来源于网络&#xff0c;侵删】 Osmo公司的这项技术&#xff0c;通过分析香味的化学成分和人类嗅…

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…