系统灰度随笔记

news2024/11/27 15:48:36

系统灰度随笔记

这段时间系统重构,负责重构的其中一个模块需要与四个上游系统对接进行切换,虽然自己在这个过程中也设计了一套灰度方案来承接,将灰度的主动权控制在下游,但是很难同时应对四个上游系统,因为每个上游系统灰度的key是不同的,在技术实现难度上比较大。同时跨部门对接沟通成本非常大,每个部门的排期也都非常紧张,是需要硬技能和软技能的同时结合才能完成的。因此来谈谈怎样设计一个可靠的灰度方案。

如果设计可靠的灰度方案

1.灰度的基本概念

1.1基本灰度方案

一个较大的业务或系统改动,往往会影响整个产品的用户体验或操作流程。为了控制影响面,可以选取一批特定用户、流程、单据等,只允许这一部分用户或数据按照变更后的新逻辑在系统中流转,而另一部分用户仍然执行变更前的老逻辑。这一步是线上系统灰度方案的起点。按这个逻辑进行数据切分之后,我们主要关注灰度的数据,是否按照新逻辑,产生了预期的结果,因此灰度线上验证工作非常重要

1.2 灰度解决什么问题

比如说系统在重构之后,新旧系统数据的一致性怎么保证,如何不影响旧系统的运转逻辑,毕竟全量切换之后,如果新系统出了问题,那将是灾难性的问题。安全生产规则中所谓的“无灰度,不发布”就是这个思想,通过灰度尽可能的减少问题的影响面。如果通过灰度过程发现一个线上问题,那么去掉灰度的保护,可能就会产生一个严重的故障。

2.灰度设计要解决的基本问题

2.1 灰度维度的选取

生产系统中常见的灰度的规则,有用户id尾号、业务单据id尾号、白名单、黑名单、时间戳等。
采用用户id尾号或业务单据id尾号作为灰度key,是更常见的灰度区分方式。但如何选取这类灰度key,需要注意几个要点。
1.灰度key的数据最好是均匀的,比如与客服系统对接,现在各大电商公司,下单之后还需应对非常多的客服问题,当某个系统与客服系统对接时,在灰度切换时,可以选择用某个客服工号来进行灰度,只灰度这个客服对应的单据。每个客服对应的单量一般来说是比较均匀的,数据量相差不大。在与杉杉系统对接切换,杉杉奥莱有很多家门店,我们可以按门店的维度来进行灰度切换,在与海淘对接切换,我们按照供应商ID来实现灰度方案,每个系统都可以按照自己业务的维度来实现灰度。

2.系统中使用灰度key的选取逻辑要简化,灰度key作为判别是走新逻辑还是旧逻辑,这个条件判断一般会在系统中反复出现、多次执行。除此之外,简化key的计算逻辑也会带来业务语义上的简化,便于整个业务链上的技术同学与非技术同学快速理解,也便于遇到问题时快速定位与排查,更有利于系统的长期维护。

2.2 简化灰度逻辑

灰度逻辑仅仅是将一个用户或单据非此即彼的区分开,因此灰度逻辑不仅没有必要做的太过复杂,而且还应当尽量简化,如果业务上有条件,最好能用一个字段或一个变量搞定。
首先,比如说电商公司,很多家集团公司,有很多业务是根据公司维度去做灰度的,我们就可以通过一个字段来配置。比如通过一个字段来配置灰度开关,有利于完成灰度进度的调整,例如灰度快进,灰度暂停等,如果设置了多个灰度变量,在调整灰度变量时,可能会导致灰度覆盖不全,灰度数据不一致等复杂问题。我之前在设计灰度方案的时候,想同时兼容上游灰度情况,通过3个变量来进行灰度,同时需要配置上游来源系统,每个来源系统又会有一些重叠的情况,比如杉杉是按公司ID来灰度,账单是按供应商ID来灰度,如果每个系统都想按照自己的业务维度来灰度,那么我在下游做灰度兼容时就会异常的复杂,比如同时调整公司维度和供应商维度,那么可能会导致一部分用户数据被跳过,或者导致调整后的灰度范围远远超过预期,这些问题在实际生产中是发生较为频繁的,因此我们需要简化灰度逻辑。

2.3 灰度过程保持数据一致性

灰度数据一致性的问题是系统设计的核心问题。比如最近重构的费控系统,对接客服切换,老系统的业务还在继续发生,新的系统已经上线,外部系统在切换过程中将一小部分数据命中新系统,其他的业务数据继续流向老系统,当用户在某个时刻命中了新系统,如果在另外一个时刻新系统逻辑问题或者灰度回退等情况,导致了没有命中灰度,这时就造成了数据不一致问题。
因此我们必须制定灰度的规则

1.以灰度命中数据作为标准,上游系统下发了数据给新系统,新系统做完逻辑操作之后,更新表,上游应从新系统拿回结果,而不应该从旧系统去拿回结果。
在这里插入图片描述

2.加速推进灰度速度,保持新旧系统数据的一致,比如一个上游下发数据到新旧系统做付款,但是由于业务原因,这笔付款一直在旧系统没有付款,比如说要等到1年后才会去做付款,那正常情况我们是应该等到这笔在旧系统付款完,但是这会将整体灰度的时间拉的很长,在面对这种情况,我们可以加速灰度的进程。比如我们可以这部分旧数据进行打标,统计这部分的数据量,在新系统较为稳定的情况下,我们后续全量切到新系统之后,可以将这部分未付款数据初始化到新系统中,在新系统中继续进行付款。因此需要通过另一个维度来标识。

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

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

相关文章

Python语言学习实战-内置函数reduce()的使用(附源码和实现效果)

实现功能 reduce()是一个内置函数,它用于对一个可迭代对象中的元素进行累积操作。它接受一个函数和一个可迭代对象作为参数,并返回一个单个的累积结果。reduce()函数的语法如下: reduce(function, iterable[, initializer])其中,…

SpringMVC之JSON返回及异常处理

目录 JSON处理 导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试 目录 JSON处理 导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试 Jackson 定义 用法 常用注解 统一异常处理 为什么要全局异常处理? 异常处理思路 SpringMVC异常分类 综…

java基础-基础知识点

文章目录 jdk目录结构函数式接口wait、notify、notifyAll 并发编程Threadsleep、yield、joindaemon (守护线程) 锁[synchronized ](https://blog.csdn.net/EnjoyFight/article/details/127457876)线程池 jdk目录结构 jdk1.8 jdk20 函数式接口 http…

PyTorch之张量的相关操作大全 ->(个人学习记录笔记)

文章目录 Torch1. 张量的创建1.1 直接创建1.1.1 torch.tensor1.1.2 torch.from_numpy(ndarray) 1.2 依据数值创建1.2.1 torch.zeros1.2.2 torch.zeros_like1.2.3 torch.ones1.2.4 torch.ones_like1.2.5 torch.full1.2.6 torch.full_like1.2.7 torch.arange1.2.8 torch.linspace…

快速安装Redis以及配置Redis集群

Redis集群 本章是基于CentOS7下的Redis集群教程,包括: 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖: yum install -y gcc tcl#docker安装redis #1、docker pull redis#2、docker run --name my…

如何搭建一款BI系统

一、BI系统介绍 1.1 什么是BI系统 BI的英文全拼是Business Intelligence,商业智能,简称BI。我们经常能听到企业说“上BI”、“建设BI系统”、“构建BI决策平台”等内容。那么BI到底是什么呢? (1) 最初起源于固定报表 在几十年前&#xff…

【网络编程】深入理解TCP协议一(三次握手四次挥手、标记位、确认应答机制、超时重传机制)

TCP协议 1.三次握手四次挥手2.TCP协议段格式3.标记位介绍4.确认应答机制5.超时重传机制 1.三次握手四次挥手 当客户端发起连接请求时,SYN需要被设置位1,告诉服务器客户端希望建立一个链接服务器收到响应之后会回复 SYNACK,表示确认了客户端地…

Hum Brain Mapp:皮质脑-心轴的微状态

摘要 脑电图(EEG)微状态是具有准稳态头皮地形的大脑状态。这种状态是否会延伸到身体层面(即外周自主神经系统)目前尚不清楚。假设微状态作为一种中枢自主神经网络的功能状态会延伸到脑-心轴水平。因此,本研究结合了EEG和心跳动力学序列来估计起源于皮层的定向信息传…

第35章_瑞萨MCU零基础入门系列教程之ADXL345三轴传感器驱动实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

虹科案例 | Zuellig Pharma和ELPRO通过符合GDP标准的温度监测和高效的温度数据管理为未来发展奠定基础

在本案例研究中,您将了解Zuellig Pharma 实施了温度监测解决方案,以一致的数据结构获取各国和各种运输方式的数据; 通过将温度数据上传到其数据库管理系统,显著提高了其效率; 并建立了为未来管理决策提供数据增值使用的基础。 项目合作伙伴 …

《AI新时代:大一新生如何快速入门IT专业?》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

《使用AADL的模型基工程》读书笔记(一)

1. 什么是模型基工程? 模型基工程(Model-Based Engineering,MBE)旨在建立和分析系统模型,这样就能够预测和了解该系统的能力和工作质量属性 (如性能、可靠性或信息安全性)。在系统集成和验收试验之前,很难发现一些系统级的问题&a…

【数据结构】——排序算法的相关习题

目录 一、选择题题型一 (插入排序)1、直接插入排序2、折半插入排序3、希尔排序 题型二(交换排序)1、冒泡排序2、快速排序 题型三(选择排序)1、简单选择排序~2、堆排序 ~题型四(归并排序&#xf…

测试平台项目部署二(手动部署改成Dockerfile)

测试平台项目部署二(手动部署改成Dockerfile) 一、Dockerfile制作1、entrypoint.sh制作2、构建镜像3、启动容器二、遇到的问题1、pip install --no-cache-dir -r requirements.txt安装第三方库时,报Installing build dependencies: started2、安装第三方库文件比较慢,考虑更…

可以在图片上编辑文字的软件推荐?来试试这几款

在图片上编辑文字的优势之一是可以更好地传达信息。有时候,图片本身可能不足以清楚地说明重点,但是添加文字可以强调或澄清要点。此外,对于社交媒体等视觉重要的平台,图像上的文字可以更好地吸引用户的注意力和交流。那么有哪些可…

TypeScript类型兼容:结构化类型

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 1. 鸭子类型:定义和示例 2. 鸭子类型的优点 2.1 代码的灵活性 2.2 代码的复用 2.3 与 JavaScript 的…

ACM模板二:树、图、并查集、DancingLink

目录 〇,全文说明、宏定义代码 一,二叉树 二,树状数组、线段树 三,多叉树 四,并查集、DancingLink、无向图、最小生成树 五,有向图、单源最短路径、连通分量、拓扑排序 六,网格图、回路链…

关于 Resolution(分辨率、解析力)各单位的意义及相互之间的换算

1、问题背景 最近在调试的项目,有关于对解析力的要求,用 imatest 软件测试 MTF50 的值,如下图所示,可以看到他有不同的单位表示,LW/PH、Cycles/pixel 。另外关于解析力的单位还有LP/mm、L/mm、Cycles/mm、LP/PH&#…

学生护眼灯用白炽灯还是led?专业的学生护眼灯推荐

现在的护眼灯逐渐成为了孩子们学习路上必不可少的一盏灯具,它比普通的台灯光线更加均匀舒适,而且更加护眼。因此也成为了家长们呵护孩子视力健康的一大“帮手”,不过护眼台灯的种类也有很多,最近就有家长问孩子使用的护眼灯是白炽…

用GPT干的18件事,能够真正提高学习生产力,建议收藏

用GPT干的18件事,能够真正提高学习生产力,建议收藏。 语法更正 文本翻译 语言转换 代码解释 修复代码错误 作为百科全书 信息提取 好友聊天 创意生成器 采访问题 论文大纲 故事创作 问题类比 创建 SQL 需求 情感分析 将产品描述转变为广告 关键字提取 闲…