架构重构的技巧

1 代码重构

定义

对软件代码做任何改动以增加可读性或者简化结构而不影响输出结果。

目的

增加可读性、增加可维护性、可扩展性

3 关键点

  • 不影响输出
  • 不修正错误
  • 不增加新的功能性

代码重构时,发现有个功能实现逻辑不合理,可直接修改吗?

当然不可!

2 架构重构

定义

通过整系统结构(4R)来修复系统质量问题而不影响整体系统能力。

目的

修复质量问题(性能、可用性、可扩展…)

关键点

  • 修复质量(架构,而非代码层面的质量)问题,提升架构质量
  • 不影响整体系统功能
  • 架构本质没有发生变化

把某个子系统的实现方式从硬编码改为规则引擎,是代码重构还是架构重构?

属于架构重构,架构设计方案了,实现系统可扩展性。

3 代码重构 V.S 架构重构

4 架构重构技巧

4.0 手段

架构重构是否可以修改 4R 中的 Rank?

不能!修改 rank 就不是重构,而是演进了。拆微服务不属于改 rank。外部系统协作方式都得修改了。比如将淘宝的支付方式支付宝拆出来,成为支付宝公司了。

4.1 先局部优化后架构重构

局部优化

定义:对部分业务或者功能进行优化,不影响系统架构。

常见手段:

  • 数据库添加索引,优化索引
  • 某个数据缓存更新策略采用后台更新
  • 增加负载均衡服务数量
  • 优化代码里面并发的逻辑
  • 修改Innodb buffer pool 配置,分配更多内存
  • 服务间的某个接口增加1个参数

架构重构

定义:优化系统架构,整体提升质量,架构重构会影响架构的4R定义。

常见手段:

  • 引入消息队列(增加 Role )
  • 去掉 ZooKeeper,改为内置 Raft 算法实现(删除 Role)
  • 将 Memcached 改为 Redis( 改变 Role)
  • 按照稳定性拆分微服务( 拆分 Role )
  • 将粒度太细的微服务合并(合并 Role)
  • 将服务间的通信方式由 HTTP 改为 gRPC(修改 Relation )
  • SDK从读本地配置文件改为从管理系统读取配置(修改Rule )

4.2 有的放矢

案例

  • 开发效率很慢,P业务和M系统互相影响
  • 线上问题很多,尤其是数据类问题
  • M系统性能很低

有的放矢:

重构只解决第1个问题(开发效率很慢,P业务和M系统互相影响)。其他问题咋办,架构师你不解决了吗?架构重构后了,各个业务部门再解决各自的问题,如 P业务后台优化自己的问题,M 系统优化自己的性能问题,因为这些问题本身靠重构是解决不了的,而是要靠重构拆分之后,各自再继续优化。

4.3 合纵连横

合纵

说服业务方和老板

  1. 以数据说话

    把“可扩展性”转换为“版本开发速度很慢然后给出对应的项目数据(平时注意搜集数据)。

  2. 以案例说话(其实更有效,给人的冲击力更明显)
    若没有数据,就举极端案例,如某个小功能,开发测试只要5天,但是等了1个月才上线。

连横

说服其它团队。

  1. 换位思考
    思考对其它团队的好处,才能让人配合。

  2. 合作双赢
    汇报和总结的时候,把其它团队也带上。

案例

合纵:告诉PM和项目经理极端案例,设计2周、开发2天、一个月才上线。

连横:P业务线上问题大大减少,P业务不会被其它业务影响

4.4 运筹帷幄

① 问题分类

将问题分类,一段时间集中处理类问题。
避免对照 Excel表格,一条条解决。

② 问题排序

分类后排序,按照优先级顺序来落地。

避免见缝插针式的安排重构任务,不要搭业务的顺风车重构:

  • 避免背锅
  • 效果不明显
  • 无法安排工作量大的重构

③ 逐一攻破

每类问题里面先易后难。

把容易的问题解决掉,增强信心。

④ 案例

Before:

  • 1个100多行的Excel问题表格,一个一个的解决
  • 专挑软柿子捏
  • 见缝插针

After:

  1. 分类:性能、组件、架构、代码
  2. 分阶段: 优化-> 架构重构 -> 架构演进
  3. 专项落地: 明确时间、目标、版本

5 架构重构FAQ

架构重构是否可以引入新技术?

可以,但尽量少,架构重构要求快准

业务不给时间重构怎么办 ?

会哭的孩了有奶吃。收集数据和案例,事实说话。

其它团队不配合怎么办 ?

学会利用上级力量。上级都不支持,说明你做的这个没意义,所以领导也不在乎。那就别做了。

业务进度很紧,人力不够怎么办 ?

收集需要重构的证据,技术汇报的时候有理有据

6 测试

6.1 判断

  1. 代码重构、架构重构、架构演进都不需要去修复问题 ×
  2. 微服务拆分既可以是架构重构的手段,也可以是架构演进的手段 √
  3. 架构重构应该搭业务版本的便车,可以避免对业务版本有影响 ×
  4. 架构重构是为修复问题,因此应该将系统遗留的问题都在架构重构的时候修复 ×
  5. 架构重构应该分门别类,按照优先级逐步落地 √

6.2 思考

架构重构的时候是否可以顺手将代码重构也做了 ? 因为反正都安排版本了。No!

局部优化不属于代码/架构重构。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十年程序老狗手写分布式服务架构:原理、设计与实战

IT 技术日新月异地发展,我们自然不能躺在历史的温床上停歇,必须不断地学习。分布式、微服务几乎是现在的技术人员必须要了解的架构方向,从理论上来讲确实解耦了很多结构,但另一方面,又会带来更多衍生的复杂度及难点 如…

光度立体法检测原理讲解

光度立体法检测 图像辐照度 决定场景表面片辐射的因素有两个: 1.在场景表面片的照明 投在某一特定表面片上的照明量取决于该表面片在场景中相对于光源的分布位置 2.表面片反射的入射照明部分 在某一特定方向上被表面片反射的入射照明部分取决于表面材料的光学特性 反射类…

前端实现html转pdf

优秀文章: 前端实现 HTML 转 PDF 并导出 - 掘金 (juejin.cn)https://juejin.cn/post/7012049739482923039 安装 npm install html2canvas jspdf --save main.js导入: import htmlToPdf from ./utils/htmlToPdf Vue.use(htmlToPdf) html2Canvas.js文…

html+css实现的登录界面

一、界面效果 二、代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title><style>body {background-color: #f1f1f1;}.login-box {width: 400px;margin: 50px auto;padding: 2…

【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

前言 人脸检测的目标是找出图像中所有的人脸对应的位置&#xff0c;算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式&#xff0c;下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。 程序流程 代码 impo…

ESP32设备驱动-MLX90615红外测温仪驱动

MLX90615红外测温仪驱动 文章目录 MLX90615红外测温仪驱动1、MLX90615介绍2、硬件准备3、软件准备4、驱动实现1、MLX90615介绍 MLX90615 是一款用于非接触式温度测量的微型红外温度计。 IR 敏感热电堆探测器芯片和信号调节 ASIC 都集成在同一个微型 TO-46 罐中。 红外测温仪出…

快速尝鲜Oracle 23c免费开发者版,惊喜多多

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

分布式一致性协议

1 两阶段提交协议(2PC) 1.1 两阶段提交协议 两阶段提交协议&#xff0c;简称 2PC(2 Prepare Commit)&#xff0c;是比较常用的解决分布式事务问题的方式&#xff0c;要么所 有参与进程都提交事务&#xff0c;要么都取消事务&#xff0c;即实现 ACID 中的原子性(A)的常用手段。…

ctfshow web入门 爆破 21-28

web21 刚进去就要求我们登录&#xff0c;这里题目给了我们一个字典&#xff0c;就是这个字典为什么他那么多数字中 就一个字母的密码还不明显吗。 这里我们使用burp拦包&#xff0c;这里没有发现登录的账号密码&#xff0c;但是有一串可疑的字符串&#xff0c;尝试base64解密 这…

Java设计模式 07-装饰者模式

装饰者模式 套娃模式&#xff0c;直接new放构造器里面套 把抽象类聚合到它的子类里 该子类(装饰者)构造抽象类的实现(被装饰者) 一、星巴克咖啡订单项目&#xff08;咖啡馆&#xff09; 1)咖啡种类/单品咖啡&#xff1a;Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式…

【Spring】2—IOC容器

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

教你如何搭建物业-后勤管理系统,demo可分享

1、简介 1.1、案例简介 本文将介绍&#xff0c;如何搭建物业-后勤管理。 1.2、应用场景 该应用包含疫情上报、绿化、安保等管理功能。 2、设置方法 2.1、表单搭建 1&#xff09;新建表单【返区登记】&#xff0c;字段设置如下&#xff1a; 名称类型名称类型姓名单行文本…

静态路由的原理和配置(理论详细实验全面)

第五章&#xff1a;静态路由 目录 第五章&#xff1a;静态路由 5.1路由器的工作原理 5.1.1路由器根据路由表转发数据 5.1.2 路由信息获取的方式 5.2路由选路原则 5.2.1最长匹配原则 5.2.2路由优先级 5.2.3路由度量值 5.3静态路由 5.3.1静态路由实验 5.3.2缺省路由实…

初学对象存储OSS---学习笔记

文章目录前言一、OSS是什么&#xff1f;下面以一个小故事介绍OSS的作用&#xff1a;二、怎么使用OSS1.进入 -----> [阿里云官网](https://www.aliyun.com/)2.点击进入OSS控制台3.获取accessKeyId 和 accessKeySecret4.拿到了accessKeyId 和 accessKeySecret &#xff0c;就可…

CTP_将C++封装为Python可调用接口

目录 写在前面&#xff1a; 前置准备&#xff1a; step 1 与上期所原始代码对比分析源码 td源码 1 配置属性-》常规-》配置类型 要为 “动态库(.dll)” 2 VC目录 -》包含目录 3 VC目录 -》 库目录 4 链接器-》常规-》附加库目录 5 链接器-》输入-》附加依赖项 vnctp.h 的功…

CTF杂项提纲

CTF的杂项是涉及编码&#xff0c;图片隐写&#xff0c;音频隐写&#xff0c;压缩包分析的方向&#xff0c;本文对MISC的知识点做了一个简单列举 常见编码 ASCII 0-9,48-57 A-Z 65-90 a-z 97-122 URL url编码又叫百分号编码&#xff0c;是统一资源定位的编码方式 base16/…

leetcode每日一题:数组篇(1/2)

&#x1f61a;一个不甘平凡的普通人&#xff0c;日更算法学习和打卡&#xff0c;期待您的关注和认可&#xff0c;陪您一起学习打卡&#xff01;&#xff01;&#xff01;&#x1f618;&#x1f618;&#x1f618; &#x1f917;专栏&#xff1a;每日算法学习 &#x1f4ac;个人…

cmake 常用方法自我总结

目录 1. 编译一个库依赖另一个库 2. 把某一个CMakeLists.txt中变量设为整个工程中任意CMakeLists.txt都可以访问 3. 枚举目录下所有匹配文件 4. 拷贝文件 5. 解决方案下分Header Files&#xff0c;Source Files目录 6. 依赖头文件&#xff08;附加依赖项&#xff09; 7.…

通过阿里云函数计算解决ChatGPT API的调用问题

ChatGPT系列文章 与其被ChatGPT取代&#xff0c;不如征服ChatGPT&#xff0c;做它的主人&#xff01; 文章目录ChatGPT系列文章前言命令行部署准备工作两行命令实现部署应用中心部署使用代理访问API总结前言 自2022年11月30日 OpenAI 发布 ChatGPT 以来&#xff0c;虽然时有唱…

算法训练第四十九天 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II

动态规划part10121.买卖股票的最佳时机题目描述思路暴力贪心动态规划122.买卖股票的最佳时机II题目描述思路121.买卖股票的最佳时机 题目链接&#xff1a;121.买卖股票的最佳时机 参考&#xff1a;https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9…
最新文章