设想这样的场景:对一个运行中的系统,需要重构某一个功能模块,或需要整体进行系统重构,且涉及上下游调用比较多。
如何在保障业务正常运行的情况下,进行功能模块的上线运行?
如何保障重构后的数据库中的数据和原系统/功能模型一模一样 或 完美兼容?
如何保障用户体验前后一致?
…
准备阶段
需求分析(功能梳理)
对现有的系统进行业务流程层面的理解,尽量梳理每一个流程的细节、当时这样设计的原因,最好能产出业务流程图。
对现有的代码模块有一个整体的了解,评估一下现有系统的Server个数、Class个数、涉及的数据库表个数、涉及的业务流程个数等等,越细越好,最好能产出一份Server服务的全量统计表格
此阶段主要是为了粗估工作量
功能模块拆解(详细分析)
针对不同的业务流程,使用数据流图(的思想),梳理不同数据的流转逻辑、不同服务的关键入参、关键出参,关键实体对象的字段变化逻辑,关键实体对象的状态机等
针对现有的代码,最好能做到通读一遍,对所有的类、服务、逻辑,做到心中有数
新功能、优化功能链路设计
针对重构过程中提出的新流程、新方法、新技术,在系统架构图中,标识出来,用于和老系统进行区分
针对旧的功能链路,确保功能前后一致
实施阶段
功能开发
根据新系统的概要设计、详细设计,进行编码、自测
切流逻辑开发
切流开关
by 业务场景、by 用户、by 来源系统、by 时间等,进行切流,当符合灰度的时候,才走新链路;否则,仍走旧链路
切流日志
通过日志系统,将新链路中的流量入口信息,进行打印,并通过日志监控系统,进行监控,观察日志。
若出现大量的报错、异常情况,可以及时切回旧链路,及时止血
补偿逻辑开发
针对可能出现的异常情况,提供补偿逻辑,如重推、重试、作废、状态订正等,减少异常情况发生后补救的成本
切流上线阶段
上下游、用户通知
在切流前,对必要的参与者、上下游调用方、前台用户,进行通知,告知可能出现的风险、反馈途径、紧急话术、补救措施等