系统灰度随笔记

系统灰度随笔记

这段时间系统重构,负责重构的其中一个模块需要与四个上游系统对接进行切换,虽然自己在这个过程中也设计了一套灰度方案来承接,将灰度的主动权控制在下游,但是很难同时应对四个上游系统,因为每个上游系统灰度的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.mzph.cn/news/83557.shtml

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

相关文章

Redis的介绍以及简单使用

Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它以键值对的形式将数据存在内存中,并提供灵活、高性能的数据访问方式。Redis具有高速读写能力和丰富的数据结构支持,可以广泛应用于缓存、消息队列、实…

vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs

vue vue的由来 vue教程和M-V-VM架构思想 vue的初步简单使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 ->…

ATLAS 200通过PCIE 接入RK3588-EP模式

ATLAS 200 作为算理模块,可以作为主/协处理器接入RK3588,有两种模式:RC 模式和EP模式 RC模式:rk3588 和 ATLAS 200 可分别独立处理自身业务数据,不存在业务互相依赖,二者可通过网络等方式进行通信,ATLAS …

【SpringCloud微服务全家桶学习笔记-服务注册zookeeper/consul】

SpringCloud微服务全家桶学习笔记 Eureka服务注册 gitee码云仓库 9.其他服务注册框架 (1)zookeeper安装与使用 zookeeper需安装在虚拟机上,建议使用CentOS,安装地址如下: zookeeper镜像源 选择第一个进入后下载ta…

Unity实战(11):项目非启动状态下使用代码批量替换材质

目录 前言 配置环境 一、场景准备 二、代码演示 三、效果呈现 四、关于Resources.Load()的说明 前言 本文内容为unity在编辑状态(非启动状态)下使用代码批量替换材质,该方法也适用于其他在编辑状态下对物体的操作需求。 配置环境 win1…

ros2与web通信实例

ros2与web通信实例 最近需要进行ros2与web端进行通信操作,目标是ros2发送的消息web端能够显示在界面,并且前端能够发布数据,最终实例如下: 然而网上查的的资料如古月居的: 利用Websocket实现ROS与Web的交互 https:/…

子网掩码的作用

1.子网掩码的作用 子网掩码是用来给ip划分网络位和主机位的。 子网掩码是为了给ip确定谁是网络地址、谁是主机地址的。子网掩码的二进制位是1的对应的是网络地址,子网掩码的二进制位是0的对应的是主机地址。

Ribbon负载均衡器

两种: 1.1 集中式负载均衡,服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡? 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识:不想让别人调自己,只想用别人的…

使用Arduino简单测试HC-08蓝牙模块

目录 模块简介模块测试接线代码测试现象 总结 模块简介 HC-08 蓝牙串口通信模块是新一代的基于 Bluetooth Specification V4.0 BLE 蓝牙协议的数传模块。无线工作频段为 2.4GHz ISM,调制方式是 GFSK。模块最大发射功率为4dBm,接收灵度-93dBm&#xff0c…

51单片机光照强度检测自动路灯开关仿真( proteus仿真+程序+报告+讲解视频)

51单片机光照强度检测自动路灯开关仿真( proteus仿真程序报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0052 讲解视频 基于51单片机的光照检测自动路灯控制仿真设计( proteus仿…

如何搭建游戏平台?

搭建游戏平台是一个复杂的任务,涉及多个方面的工作。下面是一些关键步骤和注意事项,以帮助您搭建游戏平台: 平台开发:开发游戏平台的关键部分,包括网站或应用程序的开发、数据库设计、用户界面设计、游戏上传和管理工具…

加速新药问世,药企如何利用云+网的优势?

随着计算能力的不断提高和人工智能技术的迅速发展,药物研发领域正迎来一场革命。云端强大的智能算法正成为药物研发企业的得力助手,推动着药物的精确设计和固相筛选。这使得药物设计、固相筛选以及药物制剂开发的时间大幅缩短,有望加速新药物…

MyBatis之增删查改功能

文章目录 一、创建各种类二、MyBatis的各种功能 1、查询<select>2、增加<insert>3、修改<update>4、删除<delete>三、总结 前言 在MyBatis项目中编写代码实现对MySql数据库的增删查改 一、创建各种类 1、在Java包的mapper文件下创建一个接口 我创建…

vmware NAT模式配置方式

VMware在NAT模式下宿主机与多台虚拟机互相访问&#xff0c;可连接外网 虚拟机的网络连接类型的选择&#xff0c;网络连接类型一共有桥接、NAT、仅主机和不联网四种。 桥接&#xff1a;选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系&#xff0c;相当于连接在同一交换机…

滚雪球学Java(25):动态代理

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

SpringBoot配置加载优先级

1.SpringBoot配置文件 SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。 以设置应用端口为例: properties文件示例(application.properties)&#xff1a; server.port80 Y…

pytorch学习2

分类问题 手写数字数据集 其中&#xff0c;每个数字图片大小是28 x 28&#xff0c;矩阵中每个元素的大小为[0&#xff0c;1]区间的灰度值&#xff0c;将二维矩阵拉平(flat)为一维784&#xff0c;数据量不变&#xff0c;这样能忽略上下位置相关性&#xff0c;甚至左右位置相关性…

编译opencv-3.4.5 [交叉编译]

在unbuntu20.04环境下编译opencv3.4.5&#xff0c; cmake 版本&#xff1a;3.27.4 gcc 版本&#xff1a;11.4.0 g版本&#xff1a;11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 &#xff08;1&#xff09; Built target libprotobuf make: *** [Makefile:163…

Linux开发工具之编辑器-vim

vim简单来说就是一款文本编辑器&#xff0c;用于写代码&#xff0c;更是一款多模式编辑器 vim的基本概念 vim有许多种模式&#xff0c;但是铁三角是以下三种模式&#xff1a;命令模式&#xff0c;插入模式&#xff0c;底行模式 1 正常/普通/命令模式&#xff08;默认打开&…

mySQL 安装

一、windows安装包下载 mysql官网提供了两种安装方式&#xff0c;一个是zip安装&#xff0c;另一个是msi安装&#xff0c;这里简绍第一种安装方式&#xff0c;第二种简单&#xff0c;不再简绍 官网下载&#xff0c;根据自己需要选择版本&#xff1a;MySQL :: MySQL Community…