架构演进的方式

news2024/10/21 6:27:14

架构演进过程中,常用的三种模式是拆迁者模式绞杀者模式修缮者模式。它们代表了三种不同的演进路径,适用于不同的业务环境和技术场景。下面详细解释每种模式的内容、使用场景,并对比它们的差异。

1. 拆迁者模式

内容

拆迁者模式(也称为重建模式)是一种彻底重构现有系统的方式。通常,在这种模式下,原有系统被完全放弃,并用一个全新的系统替代。在这种情况下,架构和代码需要从头开始重新设计和实现。

使用场景
  • 系统老化严重:原有系统的架构已经过时,难以维护和扩展。例如,技术栈陈旧、性能瓶颈严重或安全问题频发。
  • 技术债务过高:代码质量差,维护成本高,技术债务积累太多,修复旧系统不如重新构建新系统更有成本效益。
  • 业务需求发生重大变化:业务模型已经发生根本性变化,现有系统无法满足新需求,必须设计一个全新的系统。
举例

一家银行的老旧核心业务系统使用的是上世纪90年代的COBOL语言,难以适应现代互联网时代的需求。新系统需求包括在线支付、实时交易分析等功能,老系统的架构已经不适合这些需求。在这种情况下,拆迁者模式可能是最佳选择,直接推倒老系统,重建一个现代化的系统。

优缺点
  • 优点:可以从技术和业务层面彻底解放旧系统的限制,使用最新的技术架构,打造全新的系统。
  • 缺点:风险大,开发周期长,成本高,整个业务需要中断或并行运行一段时间,可能会影响日常运营。

2. 绞杀者模式

内容

绞杀者模式(Strangler模式)是逐步替换系统的方式,逐步将旧系统的功能移植到新系统中,直到完全替代。名字来源于“绞杀榕树”的自然现象:新系统像绞杀榕树一样包围旧系统,慢慢将其取代。

使用场景
  • 系统规模较大:现有系统过于庞大,无法一次性全部替换,需要通过分步骤进行架构演进。
  • 不允许中断业务:业务连续性要求高,不能因为系统重构而暂停服务,需要旧系统和新系统并行运行,直到完全替换。
  • 逐步迁移:希望通过阶段性改进来降低重构风险和成本。
举例

一家电商平台希望逐步将老旧的单体架构转型为微服务架构,但由于业务压力大,不能一次性重建系统。电商平台可以采用绞杀者模式,首先把产品管理模块迁移到微服务架构上,而其他模块继续使用旧系统。当新的产品管理模块稳定后,再迁移其他模块,直到整个系统都转换为微服务。

优缺点
  • 优点:业务中断较少,降低了系统替换的风险。可以分阶段、逐步替换旧系统,灵活应对复杂的迁移需求。
  • 缺点:迁移过程较长,新旧系统并存一段时间,可能会增加管理和维护的复杂性。

3. 修缮者模式

内容

修缮者模式(Repair模式)是一种对现有系统进行局部修复和优化的方式。这种模式不涉及大规模的架构变更,而是通过修补现有系统的缺陷或进行性能优化来延长系统的使用寿命。

使用场景
  • 系统较为稳定:现有系统整体结构尚可,但局部存在性能瓶颈或代码质量问题,需要进行修复。
  • 预算或时间有限:没有足够的资源或时间进行彻底重构,或业务压力不允许进行大规模的架构变更。
  • 风险敏感:系统不可中断,或业务对风险承受度较低,因此只能进行小范围的修缮。
举例

一家中型企业的ERP系统运行多年,整体架构尚可,但随着用户量增加,系统在报告生成时性能逐渐下降。公司决定对特定模块进行修复和优化,比如对数据库查询进行优化、增加缓存机制等,而不对整体架构做大幅改动。

优缺点
  • 优点:改动小、风险低,可以在短时间内解决具体的性能问题或业务瓶颈,成本相对较低。
  • 缺点:只能解决局部问题,无法从根本上解决系统的潜在架构性缺陷,可能导致长期来看系统维护难度增大。

三种模式的对比

模式方式使用场景优点缺点
拆迁者模式彻底重构系统系统老化严重,无法维护,技术债务高架构全新,能完全解决旧系统的局限成本高,风险大,开发周期长,业务可能中断
绞杀者模式逐步替换旧系统的部分功能系统庞大,不能一次性重构,业务不能中断风险小,业务不中断,灵活应对迁移时间长,旧系统和新系统并存增加复杂性
修缮者模式修复现有系统中的局部问题系统整体稳定,局部有性能或功能问题成本低,改动小,风险低解决局部问题,无法从根本上改变系统缺陷

结论

在实际应用中,选择哪种模式要根据系统的现状、业务需求、风险承受能力以及资源状况来决定。

  • 如果现有系统已经严重老化、技术债务过高且难以维护,拆迁者模式可能是唯一的选择。
  • 如果系统复杂且业务不允许停机,逐步过渡的绞杀者模式是比较稳妥的方案。
  • 而对于希望快速解决局部性能或功能问题的场景,修缮者模式能够以较低成本实现局部优化。

根据具体的需求和系统状态,可能也会在实际中将不同模式结合使用,灵活调整。

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

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

相关文章

【计算机网络 - 基础问题】每日 3 题(五十)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

有限状态机和抽象类多态

学习有限状态机的写法,我们会用一个抽象类继承的方法来写 首先,现在我们已经用过类的继承了,就是在我们敌人和野猪的这个代码当中, 我们打开野猪的代码,它继承了Enemy这个父类,所以可以遗传它父类当中所有…

线性代数基础02

目录 1.向量 1.1向量的定义 1.2向量的运算 1.2.1向量加法 1.2.2向量数乘 1.2.3向量点积 1.3矩阵的特征值和特征向量 1.4向量的模 1.4.1向量的模的定义 1.4.2向量的模的几何解释 1.4.3向量的模的性质 1.5向量的内积 1.5.1向量的内积的定义 1.5.2向量的内积的几何解…

【Linux】进程概念 PCB结构体 fork创建子进程

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 每日小感慨&#xff…

UDP/TCP协议详解

目录 一,自定义应用层协议: 1)xml 2),JSON 3),yml 4),google protobuffer 二,传输层UDP/TCP: UDP协议: TCP协议: TCP的核心机制一:确认应答 TCP核心机制二:超时重传 TCP核心机制三:连接管理 TCP核心机制四:滑动窗口 TCP核心机制五:流量控制 TCP核心机制六:拥塞控制…

c++ pdf文件提取txt文本示例

最近抽空采用之前封装的接口将pdf文件提取出txt文本,顺利完成,界面如下所示: 提起的效果如下所示: 输出的txt文本内容如下: 下载链接:https://download.csdn.net/download/u011269801/89905548

AI 3D拣选系统行业分析:物流行业是最主要的需求来源

AI 3D拣选系统是一种集成了先进传感技术、机器人技术和计算机视觉技术的自动化分拣解决方案。它能够在三维空间内快速、准确地识别和分拣各种形状、大小和材质的物品,大大提高了物流效率和准确性。该系统通过高精度的3D传感器和先进的视觉算法,能够实时捕…

【某农业大学计算机网络实验报告】实验五 TCP 运输连接管理

实验目的: 熟悉 TCP 通信的三个阶段:通过此次实验,结合理论课知识深入理解并熟悉 TCP 通信的三个主要阶段,即连接建立(SYN-SYN),数据传输(DATA),以及连接释放…

【论文速读】Prompt Tuning:The Power of Scale for Parameter-Effificient Prompt Tuning

arxiv:2104.08691v2 摘要 在这项工作中,我们探索了“prompt tuning(提示调优)”,这是一种简单而有效的机制,用于学习“soft prompts(软提示)”,以条件下冻结的语言模型…

Golang | Leetcode Golang题解之第485题最大连续1的个数

题目: 题解: func findMaxConsecutiveOnes(nums []int) (maxCnt int) {cnt : 0for _, v : range nums {if v 1 {cnt} else {maxCnt max(maxCnt, cnt)cnt 0}}maxCnt max(maxCnt, cnt)return }func max(a, b int) int {if a > b {return a}return …

矩阵matrix

点积 在 NumPy 中,dot 是矩阵或向量的点积(dot product)操作。 假设有两个向量a和 b,它们的点积定义为对应元素相乘,然后求和。公式如下: 例子: 点积的计算步骤是: 因此&#xf…

【动态规划】【路径问题】下降路经最小和、最小路径和、地下城游戏

4. 下降路径最小和 931. 下降路径最小和 算法原理 确定状态表示 dp[i][j] 表示:到达 [i, j] 位置,最小的下降路径 状态转移方程 dp[i][j] 从 [i-1, j-1] 到达 [i, j] > dp[i-1][j-1] m[i][j]从 [i-1, j] 到达 [i, j] > dp[i-1][j] m[i][j]从 …

leetcode_887_鸡蛋掉落___循序渐进的分析

分析:对于一组[n,k] 在一次尝试中选择了在dep层测试 其可以分为 如果在dep层炸了: 则变成了[dep-1,k-1]读作在dep-1层用k-1个鸡蛋来找鸡蛋的极限所需次数如果在dep层没炸: 则变成了[n-dep,k]读作在n-dep层用k个鸡蛋来找鸡蛋的极限所需次数可以发现这都是子问题的…

【Javaee】网络编程-TCP Socket

前言 前文中我们介绍了UDP Socket相关的构造方法和方法,并实现了UDP的回显服务器和客户端。 本篇将介绍TCP Socket,并使用TCP Socket api实现服务器和客户端的通信 一.TCP Socket的常见方法 1.ServerSocket ServerSocket是创建TCP服务端Socket的API …

线程池:高效管理并发任务的利器

线程池:高效管理并发任务的利器 什么是线程池? 线程池(Thread Pool)是Java并发编程中的一种设计模式,旨在通过重复利用线程资源,来提高程序执行效率。线程池的主要思想是提前创建一组可供使用的线程&#…

归一化输入

当输入的不同的特征取值范围差异过大,取得对应参数差别也会很大,在对参数进行优化的过程中,参数小的维度步长较小,参数大的维度步长较大,优化过程中路径曲折,将输入归一化,使特征取值范围差别小…

相控阵雷达电特性matlab模拟与仿真,带GUI界面,对比有限扫描阵,稀疏阵,多波束阵,共形阵等

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 相控阵雷达作为一种先进的雷达技术,具有高分辨率、多功能、快速扫描等优点,在军事和民用领域都有着广泛的应用。相控阵雷达的天线系统是其核心组成部分…

C#线性变换——缩放

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在C#开发中经常需要对平面中的坐标进行一些变换,比如缩放、旋转等&…

数据结构:二叉树、堆

目录 一.树的概念 二、二叉树 1.二叉树的概念 2.特殊类型的二叉树 3.二叉树的性质 4.二叉树存储的结构 三、堆 1.堆的概念 2.堆的实现 Heap.h Heap.c 一.树的概念 注意,树的同一层中不能有关联,否侧就不是树了,就变成图了&#xff…

PCL 点云配准 Trimed-ICP算法(精配准

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 perform_standard_icp 函数 2.1.2 perform_trimmed_icp 函数 2.1.3 visualize_registration 函数 2.2完整代码 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算…