架构设计-灰度发布系统架构设计

news2025/2/6 7:44:46

灰度发布的定义

互联网产品需要快速迭代开发上线,又要保证质量,保证刚上线的系统,一旦出现问题可以很快控制影响面,就需要设计一套灰度发布系统。

灰度发布系统的作用,可以根据配置,将用户的流量导到新上线的系统上,来快速验证新的功能,而一旦出现问题,也可以马上的修复,简单的说,就是一套A/B Test系统。

灰度发布允许带着bug上线,只要bug不是致命的,当然这个bug是不知道的情况下,如果知道就要很快的改掉

简单灰度发布系统的设计

灰度简单架构如上图所示,其中的必要组件如下:

1、策略的配置平台,存放灰度的策略

2、灰度功能的执行程序

3、注册中心,注册的服务携带ip/Port/name/version

有了上面三个组件,才算一个完整的灰度平台

灰度的策略

灰度必须要有灰度策略,灰度策略常见的方式有以下几种

1、基于Request Header进行流量切分

2、基于Cookie进行流量切分

3、基于请求参数进行流量切分

举例:根据请求中携带的用户uid进行取模,灰度的范围是百分之一,那么uid取模的范围就是100,模是0访问新版服务,模是1~99的访问老版服务。

灰度发布策略分为两类,单策略和组合策略

单策略:比如按照用户的uid、token、ip进行取模

组合策略:多个服务同时灰度,比如有A/B/C三个服务,需要同时对A和C进行灰度,但是B不需要灰度,这个时候就需要一个tag字段,具体实现在下文详述

灰度发布具体的执行控制

在上面的简单灰度发布系统架构中了解到,灰度发布服务分为上游和下游服务,上游服务是具体的执行灰度策略的程序,这个服务可以是nginx,也可以是微服务架构中的网关层/业务逻辑层,下面就来分析一下不同的上游服务,如何落地

Nginx

如果上游服务是nginx,那么就需要nginx通过Lua扩展nginx实现灰度策略的配置和转发,因为nginx本身并不具备灰度策略的执行

通过lua扩展实现了灰度策略的执行,但是问题又来了,nginx本身并不具备接收配置管理平台的灰度策略,这个时候应该怎么办呢?

解决方案:本地部署Agent(需要自己开发),接收服务配置管理平台下发的灰度策略,更新nginx配置,优雅重启Nginx服务

网关层/业务逻辑层/数据访问层

只需要集成配置管理平台客户端SDK,接收服务配置管理平台下发的灰度策略,在通过集成的SDK进行灰度策略的执行即可

灰度发布复杂场景

下面举例两个稍微复杂的灰度发布场景,灰度策略假设都按照uid取模灰度百分之一的用户,看一下如何实现。

场景1:调用链上同时灰度多个服务

功能升级涉及到多个服务变动,网关层和数据访问层灰度,业务逻辑层不变,这个时候应该如何进行灰度?

解决方案:

经过新版本网关层的请求,全部打上tag T,在业务逻辑层根据tag T进行转发, 标记Tag T的请求全部转发到新版数据访问层服务上,没有tag T的请求全部转发到老版数据访问层上。

场景2:涉及数据的灰度服务

涉及到数据的灰度服务,一定会使用到数据库,使用到数据库就会涉及到使用数据库前后的表字段不一致,老版本是A/B/C三个字段,新版本是A/B/C/D四个字段。这时新版的灰度,就不能往老版的数据库进行修改了,这个时候就需要把数据copy一份出来做这个事情了

数据库其实并没有灰度的概念,这个时候只能把数据重新拷贝一份出来进行读和写,因为这时写必须是全量的(双写),不能说90%的数据写入到老版本,10%的数据写入到新版本,因为这个时候可以发现两个数据库的数据都不是全量的。

离线全量复制数据的过程中一定会有数据丢失,这个时候就需要业务逻辑层写一份数据到MQ中,等数据同步完成之后,新版的数据访问层再将MQ的数据写入到新版本的DB中,实现数据的一致性,这个也是引入MQ的主要目的。

灰度过程中需要对两个数据库的数据进行对比,观察数据是否一致。这样不管是灰度失败,放弃新版DB,还是灰度成功切换到新版DB,数据都不会产生丢失。

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

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

相关文章

vue webpack打包配置生成的源映射文件不包含源代码内容、加密混淆压缩

前言:此案例使用的是vue-cli5 一、webpack源码泄露造成的安全问题 我们在打包后部署到服务器上时,能直接在webpack文件下看到我们项目源码,代码检测出来是不安全的。如下两种配置解决方案: 1、直接在项目的vue.config.js文件中加…

微信预约怎么做_体验便捷的服务

在这个快节奏的时代,时间显得格外珍贵。无论是工作还是生活,我们都渴望能够用最短的时间完成更多的事情。在这样的背景下,微信预约应运而生,成为我们追求高效、便捷生活的新宠。今天,就让我们一起探讨微信预约的魅力&a…

40.原子累加器

java8之后,新增了专门用于计数的类,LongAccumulator,LongAdder的性能高于AtomicLong。 LongAdder 性能 > AtomicLong 性能 性能高的原因:如果都往一个共享变量上面进行累加,那么比较重试的次数肯定就多;如果分成几…

欧拉函数(模板题)

给定 n 个正整数 ai,请你求出每个数的欧拉函数。 欧拉函数的定义 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个正整数 ai。 输出格式 输出共 n 行,每行输出一个正整数 ai 的欧拉函数。 数据范围 1≤n≤100, 1≤ai≤2109 输…

云仓酒庄培训人数破大世界基尼斯纪录,社会影响力持续发酵

近日,云仓酒庄举办的《综合品酒师》培训活动圆满落幕,其参与人数之众,规模之大,成功刷新了大世界基尼斯纪录,引发了社会各界的广泛关注与热烈讨论。这一事件不仅彰显了云仓酒庄在酒类培训领域的专业化与系统化&#xf…

探索C# 11与.NET 7:入门指南与跨平台开发

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

为什么那么多人喜欢Python?学习Python能为我们带来哪些优势?

Python是现在最火的编程语言,没有之一。那么,相对于其他语言,为什么那么多人喜欢Python?学习Python能为我们带来哪些优势?今天,小编就来和大家探讨一下! 1、如果想成为一名程序员的话&#xff…

博将资本荣获杭州市清廉民营企业建设示范单位

2024年3月25日,杭州召开全市清廉民营企业建设现场推进会,引导广大民营企业家努力把清廉民企建设成效转化企业发展的强劲动力,形成杭州民营经济领域风清气正的良好生态。省纪委、省委统战部、省工商联相关领导,市直16家相关单位分管…

如何下载省,市,区县行政区Shp数据

摘要:一般非专业的GIS应用通常会用到省市等行政区区划边界空间数据做分析,本文简单介绍了如何在互联网上下载省,市,区县的shp格式空间边界数据,并介绍了一个好用的在线数据转换工具,并且开源。 目录 一、下…

10. Spring MVC 程序开发

本文源码位置: Spring-MVC 1. Spring MVC 概要 摘自Spring官方: Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes …

安卓手机怎么连接电脑?这三个方法即刻解决!

随着智能手机的普及,我们越来越依赖手机进行工作和娱乐。然而,有时候我们需要将手机上的数据或文件传输到电脑上,或者需要在电脑上进行某些操作。那么,安卓手机怎么连接电脑呢?这篇文章将为你介绍三种简单的方法&#…

0.5W 3KVDC 隔离 单输出 DC/DC 电源模块 ——TPR-W5 系列

TPR-W5系列是一款需要隔离和电压转换的产品,工业级环境温度,温度范围从–40℃到105℃,用于PCB安装的国际标准结构。此系列产品小巧,效率高,低输出纹波及提供3000V以上的直流电压隔离,用于需要隔离的场合&am…

Linux下SPI设备驱动实验:创建SPI节点及SPI设备子节点

一. 简介 SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动。主机控制器驱动一般由半导体厂商写好,我们来编写SPI设备驱动代码。 前一篇文章分析了 IMX6U系列芯片的 SPI中片选信号的处理,文章如下: I.MX6ULL SPI 主机控…

排序算法。

冒泡排序: 基本&#xff1a; private static void sort(int[] a){for (int i 0; i < a.length-1; i) {for (int j 0; j < a.length-i-1; j) {if (a[j]>a[j1]){swap(a,j,j1);}}}} private static void swap(int[] a,int i,int j){int tempa[i];a[i]a[j];a[j]temp;} …

Solaris系统参数未配置导致rac节点重启异常

Solaris系统参数未配置导致rac节点重启异常&#xff0c;检查alert日志发现很多参数异常告警&#xff1a; 配置Solaris内核参数 在两个节点上配置同样的Solaris内核参数。 为grid用户和oracle用户创建projects&#xff0c;配置共享内存参数&#xff1a; # /usr/sbin/ndd /dev/t…

适当睡眠有助于缓解抑郁

适当睡眠&#x1f634;&#x1f62a;&#x1f971;&#x1f4a4;&#x1f6cc;&#x1f3fc;有助于缓解抑郁&#x1f917; 睡眠与抑郁之间存在密切的关系。一方面&#xff0c;良好的睡眠可以促进身体和大脑的恢复与修复&#xff0c;有助于缓解抑郁症状并提高生活质量。另一方面…

9个高质量的Python学习网站:

我这边整理出来了9个高质量的Python学习网站,分享给大家,用起来&#xff01; Python 官方文档&#xff1a; Python 的官方文档包含了详细的教程、参考和库文档&#xff0c;是学习 Python 编程语言的权威指南之一 https://docs.python.org/zh-cn/3/ Real Python&#xff1a;…

IO——标准IO

1.1概念 标准IO&#xff1a;是在C库中定义的一组专门用于输入输出的函数。 1.2特点 &#xff08;1&#xff09;通过缓冲机制减少系统调用&#xff0c;提高效率 &#xff08;2&#xff09;围绕流操作&#xff0c;用FILE*描述 &#xff08;3&#xff09;标准IO默认打开三个流&a…

HTML常见标签的使用

文章目录 1. **文档结构标签**2. **文本内容标签**3. **图像标签**4. **链接标签**5. **列表标签**6. **表格标签**7. **表单标签**8. **其他常用标签**9. **注释标签** 案例展示 网页结构层主要通过HTML&#xff08;HyperText Markup Language&#xff09;标签来构建&#xff…

它山之石可以攻玉,大师摄影作品鉴赏

一、资料描述 本套大师摄影作品&#xff0c;大小685.08M&#xff0c;共有19个文件。 二、资料目录 Bill.Brandt.(比尔布兰德).rar Bourk White(伯克怀特).rar Bresson(布列松).rar Edward Weston(爱德华韦斯顿).rar Herb Ritts(赫伯瑞茨).rar Richard Avedon(阿威顿).r…