Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. 架构方案
  3. 正文
                           

【转载】大型系统架构重构10步法

2024-01-12 2890点热度 1人点赞 0条评论

笔者在一线互联网公司,经历过数次大型系统的重构项目,也多次担任技术负责人,经历的重构项目包含:日吞吐量数万亿的计算型系统、基础架构中间件系统、高并发高稳定性要求的C端系统、业务复杂性较高的B端系统等。

同时了解到大型重构项目风险高、难度大、易流产,因此总结了本文供大家参考学习交流。

任何系统在持续的演进迭代的历程中,都难免因各类因素导致迈向重构,比如:系统可塑性与业务需求无法匹配、扩展性无法支撑业务体量的膨胀、技术债务引发研发效率的严重下滑等。

笔者收集了20余个失败的重构案例并深度交流,普遍感受到重构是一个难度很大的事情,总结原因有4个:

1. 重构比从零建设更复杂。
  • 业务兼容、基础设施兼容、在线不影响服务前提下完成架构替换等,挑战性都非常高。
2. 深度!重构需要对系统有全面、深入的认识。
  • 深度是对问题剖析的是否准确,见过有所谓“架构师”绘制几张架构图就开干(个人对架构师这个职位是非常尊重的,身边很多优秀的架构师对系统的认识及演进决策拿捏的非常准确,另外很多项目的流产并不是架构师的责任,但确实不乏一些空谈架构不考虑落地的“架”存在)。
  • 对系统有深刻的认识是重构项目成功落地的必要条件,这里的“认识”包含 (1)困境与根因的因果关系、(2)技术如何支撑复杂的业务场景、(3)多方位的评估等等诸多因素。
3. 广度!重构需要对系统周边情况、业界优秀方案有较好的把握。
  • 对周边系统的了解程度往往能决定项目的下限(能否避免流产);
  • 对业界方案的把握往往能决定上限。

4. 重构周期较长,不可控因素较多。

  • 重构对技术负责人的综合能力要求是非常高的。因为领导重构并不是一项仅依靠技术能力的工作,同时要求对目标及进度管理、跨团队协作、工程规范等诸多方面也必须能较好把握。

下面是笔者总结的一套较完善的重构流程方法,可以针对大部分场景下的重构项目。包含应遵循的10个准则及各个准则的解释或分析,归纳如下:

1. 问题梳理,原因必根究。

  • 首先明确矛盾与问题,务必确定待解决问题的必要性;

  • 其次清晰的说清楚根因与待解决问题间的逻辑关联;

  • 最后确认覆盖全部问题。

2. 旧系统足够深度了解。

  • 首先完成所有业务(中间件或平台就是能力)的梳理;

  • 其次梳理业务与工程的关联(如业务架构图、数据流转图、数据表关联等);

  • 最后梳理重构期间需整合的新需求,思考与重构同步落地的计划。

注:如果1、2无法顺利完成,建议停止重构,不论出于人力、新接手或其他原因,重构成功率会非常低。

3. 目标导向、目标可量化。

  • 明确并量化目标,这是方案选型的基础,也是确保演进路径清晰的必要条件。

  • 如果目标无法量化(比如:具备理论无上限的水平扩展能力),应该做到可推导。

4. 业界调研、技术选型。

  • 业界调研尽量覆盖国内外大厂、公司内部的同类产品的情况(比如在不了解某领域业界最优能力是 T 的情况时,目标随意定为 T+,就很不现实。

  • 新业务线从头建设订单系统,可以参考内部成熟业务的相关方案,少走弯路),同时根据系统及团队情况确定选型。

5. 方案设计,充分认识方案的优缺点。

  • 首先,技术术方案多次review,方案多次review,多次review,review

  • 其次,判定重构是否对业务无损,有损需完成影响面评估,并对管理层达成一致;

  • 再次,对新方案的可支撑容量做评估(如有新组件引入等不确定因素,先对组件做压测,确保心中有底而不是贸然拍数据);

  • 最后是全方位的风险预估(如:第三方依赖可行性及排期评估、人力成本、异常定位成本、兼容性、安全、可用性、可靠性等)。

6. 提前规划系统切换方案。

  • 必须定制小流量方案;稳定性要求高的系统必须可回滚,无法回滚等于飞蛾扑火(笔者职业生涯至今所经历的重构项目,上线完全符合预期且不需优化的情况,都没达到 ...)。

7. 接口定义清晰,方案不过于复杂;测试驱动(视情况选择)。

  • 建议问题暴露周期长的系统使用测试驱动方式;

  • 基于脚本测试的,脚本高度复用可以大幅提效。

8. 方案调整趁早回归。

  • 很多时候调整方案不可避免,早回归整体效率更高。

9. 架构迁移监控先行、日志先行。

  • 重构改动范围大,很难不出BUG,好的监控体系下,系统可以比人更早发现问题,风险也更加可控;

  • 新架构发布时,日志往往是定位问题最便捷的工具。

10. 上线后再次做容量、扩展性等多方面预估。

  • 可能(或者说经常)发现做方案时的评估并不准确,可靠的数据对后续工程迭代及业务发展是至关重要的。

  • 1个月后后头做这个事情,效率大概率骤降!

总结简化为一个图,方便保存复习 大型系统架构重构10步法

大型系统架构重构10步法

 

 

 

本文仅供学习!所有权归属原作者。侵删!文章来源: Q的博客 -Q的博客 :http://mp.weixin.qq.com/s/mOrhQTdluLvIwQmhUSpaUA

更多文章:

  1. 7张架构图掌握后端服务重构技巧
  2. 系统设计 | 应用系统缓存
  3. 系统设计 | 如何表达技术架构?(规划篇)
  4. 大家一直在谈的领域驱动设计(DDD),我们在互联网业务系统是这么实践的
  5. 2.软件架构预述(译)
  6. 3.编程语言的演化(译)
  7. 系统设计 | 高精度计算
  8. 从MVC到DDD,该如何下手重构?
  9. 解决事件驱动架构中的数据一致性难题
  10. Commands与Events之间的区别
标签: 转载 架构 Java 后端 系统设计 系统架构 重构
最后更新:2024-01-11

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

广告
最新 热点 推荐
最新 热点 推荐
视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议 视频笔记:什么是微服务,为什么是微服务? 视频笔记:什么是AI 智能体? 视频笔记:什么是Flink?
基于 MySQL Binlog 实现可配置的异构数据同步马蜂窝消息总线——面向业务的消息服务设计视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性视频笔记:什么是Flink?视频笔记:什么是AI 智能体?视频笔记:什么是微服务,为什么是微服务?视频笔记:Google发布Agent2Agent协议
系统设计 | 如何表达迭代技术方案?(战术篇) 系统设计 | 业务编号生成 LangChain原理学习笔记 系统设计 | 领域模型中的拓展点设计 Spring 七种事务传播性介绍 用了@Autowired注入,竟然被警告 Spring事务无法生效的11个场景 干货 | Elasticsearch 数据建模指南

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (19) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

站点已运行 1474 天

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2

x

通知