首页 > 其他分享 >系统重构新旧流量平滑迁移方案

系统重构新旧流量平滑迁移方案

时间:2024-08-15 19:25:24浏览次数:15  
标签:重构 同步 平滑 系统 订单 新旧 切流 数据 收单

背景

旧交易系统存活时间比较久,随着组织架构的不断调整,旧交易新系统在各个团队轮转,技术和代码腐化严重,针对于新业务支持能力很差。

经过内部慎重决策,在旧交易系统基础上,针对技术和业务上进行重构,期望新架构在技术和业务上有一个良好的扩展性。

作为交易系统最为重要的就是稳定性,所以,如何让前置流量从旧系统平滑迁移至新系统,成为了我们现在主要解决的问题。

系统定位:B端交易系统
系统角色:分销商、平台主体、系统商

架构图

在这里插入图片描述

问题点

  1. 系统的稳定性:如果新系统交易链路出现异常怎么办?容错性?可监控?可灰度?可回滚?
  2. 订单一致性:新旧数据如何处理?是否需要迁移?留痕?冷库备份?

技术方案

同步收单

目的

同步收单主要考虑两点:

  1. 为了后续流量平滑迁移做准备
  2. 检查交易履约链路能力

关注点

同时需要注意的点:

  1. 新系统上线同步收单之前,一定要经过严格的QA测试,尽可能规避线上的一些问题
  2. 关于新交易系统依赖的域内服务和域外服务一定要保证幂等性
    1. 支付:避免一笔订单重复支付(如果支付平台服务能力支持幂等性,自己针对业务逻辑处理好就可以,比如,发现已经支付过了,等同于支付成功处理)
    2. 扣库存:避免一笔订单重复扣库存
    3. as so on
    4. 针对上述这些外部服务能力,可以做开关(配置中心)把控,正式切流之后将开关放开。
  3. 考虑到新旧架构订单号不一样,所以在履约能力处须mock掉订单号,以分销商ID和分销商订单号作为唯一标识(直连服务需提供元数据能力,即给你传一个元数据,需要给我原封不动传递回来)

域能力

在这里插入图片描述

增量数据核对

  1. 同步收单之后,务必要做好监控措施,针对交易履约能力的问题点及时发现和处理。

  2. 针对已经收单的增量订单,做好数据核对,可以及时发现系统问题。

    1. 量级不大,在本地库表写个定时任务写代码(连接双库客户端)比对就可以。
    2. 量级大,将双份数据同步到离线数仓,写sql比对也可以
    3. 如果考虑到实时性,可以在从库做sql比对
  3. 旁路验证策略:在旧系统每个交易节点读取数据的时候,发送一个旁路验证事件,去查一遍新库,做一下数据比对,如果不一样,及时告警,及时处理。

切流放量

方案

切流之前务必将一些开关和mock的接口放开。

经过同步收单后,系统收单能力基本趋向正常,这时候要逐步切流。
切流阶段:

  1. 5%:主要针对各个交易环节,成单率作为核心监控点,一周时间为期限
  2. 20%:主要观察业务指标和系统水位,一周为期限。
  3. 50%:此时,流量已经达到一半,要对系统整体稳定性做出考量,该扩容就扩容,该限流就限流。
  4. 100%:持续观察业务指标和系统水位,一周为期限。

设计

流量比率由【直连网关系统】统一由调度策略组件配置分发。

履约回调之时,通过新旧订单标识将流量召回,也由直连网关统一调度。

在这里插入图片描述

订单同步

此时,订单数据存在两份,一个是旧系统的订单,还有一个是新系统的订单。

针对于订单数据是否需要同步的问题就要从业务的维度去做考量。

我们交易系统定位是B端交易,所以暂不涉及订单的实时查询,直接将新旧数据库同步到买家库和卖家库即可,当前,进行订单数据双写的时候我们新系统的增量数据是脏数据,在同步到买家库和卖家库之前清除脏数据即可。

在这里插入图片描述

如果是C端订单,用户可能需要实时的查看订单列表,此时,我们的方案就有一点问题。

  1. 首先我们的订单号要保持一致,不能在同步双写的时候,写入两个系统的订单号不一致,这样后期订单数据同步的时候,数据就混乱了(当然也可以通过其他方式去避免,比如选取不同的唯一标识);
  2. 其次,在切流之前要将旧系统的存量数据同步到新系统的数据库中(这里要注意分库分表策略);
  3. 进而,进行存量数据核对;

在这里插入图片描述

系统下线

当新系统完成切流之后,需要观察一星期以上,方可将旧系统下线,主要是考虑到新系统的稳定性,可随时将流量切回旧系统。

在这里插入图片描述

标签:重构,同步,平滑,系统,订单,新旧,切流,数据,收单
From: https://blog.csdn.net/CSDN_SAVIOR/article/details/141201666

相关文章

  • Python教程:异常捕捉与代码重构
    异常pYthon使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让python不知所错的错误时,他都会创建一个异常对象。当你编写了处理改异常的代码,该程序将继续运行;如果你未对异常进行处理,程序停止,并显示一个traceback,其中包含有关异常的报告。异常是使用try-except代......
  • 设计原则与思想:规范与重构 理论一 - 三 什么情况下要重构?到底重构什么?又该如何重构?有
    理论一:什么情况下要重构?到底重构什么?又该如何重构?重构的目的:为什么要重构(why)?对于项目来言,重构可以保持代码质量持续处于一个可控状态,不至于腐化到无可救药的地步。对于个人而言,重构非常锻炼一个人的代码能力,并且是一件非常有成就感的事情。它是我们学习的经典设计思想......
  • 「重构:改善既有代码的设计」实战篇
    背景在软件开发的世界里,代码重构是提升项目质量、适应业务变化的关键步骤。最近,我重新翻阅了《重构:改善既有代码的设计第二版》,这本书不仅重新点燃了我对重构的热情,还深化了我的理解:重构不仅仅是代码层面的整理,它更是一种软件开发的哲学,强调持续改进和适应变化的重要性。 书......
  • Qt/C++最新地图组件发布/历时半年重构/同时支持各种地图内核/包括百度高德腾讯天地图
    一、前言说明最近花了半年时间,专门重构了整个地图组件,之前写的比较粗糙,有点为了完成功能而做的,没有考虑太多拓展性和易用性。这套地图自检这几年大量的实际项目和用户使用下来,反馈了不少很好的建议和意见,经过这几年的整理,刚好趁着近期经济下行严重,抽出时间把整个地图组件重构一下......
  • 查找分层股东关系:在 python 中重构嵌套 if
    我想找到公司之间的股东关系。在下面的示例中,“人员1”直接拥有“公司1”50%的股份,那么需要检查“公司1”是否也拥有其他公司的股份。“公司1”拥有“公司2”50%的股份,“公司3”拥有20%的股份。这意味着“人员1”间接拥有“公司2”和“公司3”的部分股份。此......
  • 代码优化:使用C语言重构单片机汇编启动代码
    目录前言实现思路单片机启动流程汇编语言分析开发环境代码分析总结前言在近期的工作需求中,我需要对实时操作系统(RTOS)的底层代码进行一些必要的调整。为此,我重新深入研究了ARM架构的相关知识点。在这一过程中,我回顾了之前一直让我感到困惑的一个技术问题:在几乎所有的......
  • OpenCV||超详细的图像平滑
    消除噪声的工作称为图像平滑平滑处理算法:基于二维离散卷积的高斯平滑、均值平滑;基于统计学方法的中值平滑;具备保持边缘作用的双边滤波、导向滤波。平滑滤波算法:线性平滑、非线性平滑、自适应平滑一、线性滤波1.1归一化方框滤波器概述:归一化方框滤波器,也被称为均值滤波......
  • 时间序列分析——指数平滑和ARIMA模型
    个人学习笔记,课程为数学建模清风付费课程目录一、时间序列分析1.1时间序列数据1.2时间序列的基本概念1.3区分时期和时点时间序列1.4时间序列分解1.4.1长期趋势:T1.4.2季节趋势:S1.4.3循环变动:C1.4.4不规则变动:I1.5叠加模型和乘积模型1.6Spss处理时间序列中的缺失值1......
  • 如何在Python中平滑相邻的多边形?
    我正在寻找一种平滑多边形的方法,以便相邻/接触的多边形保持接触。单个多边形可以轻松平滑,例如使用PAEK或Bezier插值(https://pro.arcgis.com/en/pro-app/latest/tool-reference/cartography/smooth-polygon.htm),这自然会改变它们的边界边缘。但是如何平滑所有多边形......
  • Nginx反向代理,负载均衡,平滑升级
    一、反向代理反向代理:⽤户直接访问反向代理服务器就可以获得⽬标服务器(后端服务器)的资源。1、修改配置在配置⽂件中添加⼀⾏反向代理块指令[root@server2~]#vim/usr/local/nginx/conf/nginx.conf......省略部分内容......server{listen80;server_namelocalhos......