干货| 三大软件架构对比与分析

news2024/12/27 13:16:45

从系统的组织和部署结构方面来看,软件架构的演化进程显然有着从简单到复杂的趋势。那是否最新最复杂的架构就是目前业界选择的最佳架构呢?非也。没有最好的架构,只有最合适的架构。在软件架构的选择上,“合适”比“新”更加重要。

对于整个软件架构发展进程,我们可以大致分为三大阶段:单体架构、SOA架构、微服务架构。今天就来简单分析一下架构的发展与优劣势,希望能对大家的项目开发有所助益。

(1)单体架构

单体架构就是把所有的业务逻辑和控制逻辑全部都放在了一起,一个程序里包括了所有的相关功能。(All in one)。比如一个 ERP 系统中包括了商品模块,订单模块,销售模块,库存模块,报表统计等等。

 

单体架构基本解决了所有简单的问题,由于开发时所有业务代码都在一起,测试的时候不需要联调各种服务,发布维护非常轻松。

但缺点也很明显,每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个BUG都会造成隐含的缺陷。一旦某一个模块出了问题,那基本就是全盘 GG。如果想针对某个具体模块提升性能,难度也比较大。

总的来说单体架构前期开发成本低、开发周期短,适合小型项目。对于大型项目来说不易开发、扩展和维护。技术栈受限,只能使用一种语言开发。系统性能扩展只能通过扩展集群节点,成本高。

单体架构优劣势:

优势

劣势

  • 自包含单元
  • 低延时
  • 容易进行测试和运维
  • 整个架构非常简单
  • 很长的开发周期
  • 很低的吞吐量
  • 紧耦合低内聚
  • 隔离性差
  • 故障容忍度差
  • 持续集成和部署困难
  • 扩展性很差

(2)面向服务架构(SOA)

随着业务系统越来越复杂,单体架构垂直拆分演变出了SOA( Service-Oriented Architecture),即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。比如上面举的这个 ERP 系统,可以按照功能,将用户,商品,交易等不同的部分拆分为了独立的服务(当然,数据库也需要进行拆分)。

 

从架构上来说,是将重复功能或模块抽取成组件的形式,对外提供服务,在项目与服务之间使用ESB(企业服务总线)的形式作为通信的桥梁。而ESB 就是一根管道,用来连接各个服务节点。为了集 成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通;

听起来这种方式比之前的单体架构厉害了不少,但还是会有一些对应的问题,比如每一个拆分之后的服务“依然还是单体服务”,有一些每个模块中都会使用的公共模块没有拆分(这也会导致 ESB 比较复杂)。
总结来说,面向服务架构有这些优劣势:

面向服务架构优劣势:

优势

劣势

  • 服务解耦
  • 服务隔离性好
  • 可以进行持续集成和部署
  • 容易测试和运维
  • 集中式的服务治理
  • 架构并不复杂
  • 厚重和复杂的ESB
  • 业务逻辑侵入ESB
  • ESB 故障影响面太大
  • 扩展性一般
  • 开发周期适中
  • 适中响应时间,低吞吐量

3)微服务架构

那如果我们不仅按照垂直方向拆分,同时也按照水平方向进行进一步拆分,那也就是微服务的架构模式了,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。其实和 SOA 架构类似,微服务是在 SOA 上做的升华。

 

还是以ERP系统举例,系统里的商品,用户,订单,库存等不同的部分都成为了独立的微服务,每一个服务之间都可以进行直接的通信沟通。

那么也就是说,微服务其实就是在移除了 ESB 之后,更为轻量和更为松耦合的服务,并把 ESB 的控制逻辑以 SDK 的方式注入到每个微服务中进行服务控制和治理,架构更为的分布式。

由于微服务的要素之一就是“微”,所以大多数微服务都是基于容器进行调度管理的(这也是我们为什么经常会在微服务的相关介绍中看到 Docerk,k8s 的相关字样)

微服务架构优劣势:

优势

劣势

  • 开发周期短
  • 松耦合,高内聚
  • 高吞吐量
  • 快速的持续部署
  • 低故障影响,高可用
  • 扩展性很好
  • 开放的技术栈
  • 测试和运维难度大
  • 服务治理变困难
  • 响应时间变长
  • 架构非常复杂
  • 技术门槛很高

从工作到现在经历过大大小小的几十个项目,每个项目都会基于当前的项目阶段、技术情况去选择合适技术架构。(很多大型企业的应用目前都还是单体架构)。随着技术的发展,随着业务的发展App版本不断迭代,新功能不断增加,业务上的处理逻辑越变越复杂。许多企业可能都面临着是否要将单体架构进行微服务升级改造的问题。但从一个大一统的系统,拆分成一个一个单独的小服务,企业需要投入的人力、物力、财力是非常巨大的。在没有足够的资源投入之前,不妨选择一些折中的方案。

传统架构的最大问题就是紧耦合,在应用迭代、升级的过程中,除了升级微服务架构之外,选择一些可插拔式的技术工具也可以很好的解决问题。比如:FinClip小程序容器技术 ,这是一种以小程序技术为载体,发展成组装式的企业应用架构技术。

从应用层来说,只要把FinClip SDK嵌入到企业的App中,就能立刻获得小程序运行能力。不管你的项目是什么软件架构,都可以通过这种嵌入式的小程序技术去获得APP并行开发、热更新、敏捷迭代的能力。

从开发角度来说,这是一种「Native + 小程序」的混合开发模式,借助这种模式可以让小程序运行在自有 App 中,将臃肿的 App 功能打散,功能模块互相解耦实现模块化开发,各业务模块间互不影响,通过管理后台即能实现实时动态更新与发布。对于一些积重难返的项目来说,采用这种入侵性小、可插拔式的技术是一种值得尝试的解决方案。

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

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

相关文章

11.注意力机制

11.注意力机制 目录 注意力提示 查询、键和值 注意力的可视化 注意力汇聚:Nadaraya-Watson 核回归 生成数据集 非参注意力池化层 Nadaraya-Watson核回归 参数化的注意力机制 批量矩阵乘法 定义模型 训练 注意力评分函数 掩蔽softmax操作 加性注意力 缩…

家政服务小程序实战开发教程015-填充用户信息

我们上一篇讲解了立即预约功能,存在的问题是,每次都需要用户填写联系信息。在我们前述篇章中已经介绍了用户注册的功能,在立即预约的时候我们需要把已经填写的用户信息提取出来,显示到表单对应的字段中。本篇我们就讲解一下如何提…

K8S+Jenkins+Harbor+Docker+gitlab集群部署

K8SJenkinsHarborDockergitlab服务器集群部署 目录K8SJenkinsHarborDockergitlab服务器集群部署1.准备以下服务器2.所有服务器统一处理执行2.1 关闭防火墙2.2 关闭selinux2.3 关闭swap(k8s禁止虚拟内存以提高性能)2.4 更新yum (看需要更新)2.5 时间同步2…

【自监督论文阅读笔记】MVP: Multimodality-guided Visual Pre-training

Abstract 最近,掩码图像建模(MIM)已成为视觉预训练的一个有前途的方向。在vision transformers的上下文中,MIM 通过将 token-level 标记级特征 与 预定义空间 对齐来学习有效的视觉表示(例如,BEIT 使用在大…

03- 通过OpenCV进行图像变换 (OpenCV基础) (机器视觉)

知识重点 resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) 图像的放大与缩小, 变形 flip(src, flipCode) 图像的翻转 rotate(img, rotateCode) 图像的旋转 warpAffine(src, M, dsize, flags, mode, value) 仿射变换是图像旋转, 缩放, 平移的总称.具体的做法是通…

第四次作业

学生表:Student (Sno, Sname, Ssex , Sage, Sdept)学号,姓名,性别,年龄,所在系 Sno为主键课程表:Course (Cno, Cname)课程号,课程名 Cno为主键学生选课表:SC (Sno, Cno, Score)学号&…

九龙证券|豪掷超6000万,10转3派6元,今年第二只高送转股出炉!

新瀚新材高送转发布计划,股价年初以来大涨超50%。航运板块6股自2022年低点股价翻倍。 2月17日晚间,凯瑞德、新瀚新材2家公司发布了2022年年报;一起,新瀚新材高送转计划同步出炉。 报告显现,2022年度新瀚新材营业总收入…

软件测试简单面试

文章目录软件程序数据(库)文档服务 程序:完成预定功能、性能的可执行的指令操作信息的数据结构描述程序的操作和使用的文档 软件测试:使用技术手段来验证软件是否满足需求 软件质量: 满足软件需求,软件需求是度量软件质量的基础不…

尚医通 (十九)用户认证

目录一、对象存储OSS1、开通“对象存储OSS”服务2、创建Bucket3、上传默认头像4、创建RAM用户5、使用SDK二、后端集成OSS1、新建云存储微服务2、实现文件上传接口三、用户认证功能1、用户认证需求分析2、开发用户认证接口3、用户认证前端一、对象存储OSS 用户认证需要上传证件…

django项目实战二(django+bootstrap实现增删改查)进阶查询

目录 一、用例管理模块实现 1、创建表和数据 2、创建用例列表 1)注册url(用例列表) 2)修改views.py新增case_list方法 3)layout.html导航条新增一个用例管理 4)新增case_list.html页面 3、新增用例页面开发 1&…

2023年TS4 入门笔记【慕课网imooc】【Vue3+React18 + TS4考勤系统】

目录 安装ts 基础 类型声明和变量声明 类型注解和类型判断 类型分类与联合类型与交叉类型​编辑 never类型与any类型与unknown类型 类型断言与非空断言 数组类型和元祖类型 对象类型与索引签名 函数类型与void类型 函数重载与可调用注解 枚举类型与const枚举 进阶…

机械革命黑苹果改造计划第四番-外接显示器、win时间不正确问题解决

问题 1.无法外接显示器 最大的问题就是目前无法外接显示器,因为机械革命大多数型号笔记本电脑的HDMI、DP接口都是直接物理接在独显上的,内屏用核显外接显示器接独显,英伟达独显也是黑苹果无法驱动的,而且发现机械革命tpyec接口还…

k8s的基础概念

目录 一、k8s概念 1、k8s是什么 2、为什么要用k8s 3、k8s的特性 二、kubernetes集群架构与组件 1、Master组件 1.1、Kube-apiserver 1.2、Kube-controller-manager 1.3、Kube-scheduler 2、配置储存中心 3、Node组件 3.1、Kubelet 3.2、Kube-Proxy 3.3、docker 或…

SAP S/4 HANA 现金流量表

S4 HANA中的现金流量表 引言:在传统SAP ECC中我们实现现金流量表的方式通常是定义一系列和现金流变动相关的原因代码(Reason Code),然后在过账凭证里指定对应的Code,最后通过ABAP代码抓取这些数据产生现金流量表。此方…

力扣(LeetCode)417. 太平洋大西洋水流问题(2023.02.19)

有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c]…

【pm2】pm2的安装与基本命令:

文章目录一、安装:二、基本命令:【1】启动命令:pm2 start app.js【2】命令行参数:pm2 start app.js --watch -i max【3】 查看有哪些进程:pm2 list【4】停止命令: pm2 stop app_name | app_id (…

el-table 复杂表头行内增删改代码示例

效果如图 <template><div class"app-container"><el-card class"box-card item"><div slot"header" class"clearfix" click"showCondition !showCondition"><span><i class"el-ic…

外籍在读博士|赴新西兰奥克兰大学双院士导师麾下联合培养

N同学来自阿拉伯国家&#xff0c;但本硕博都是在我国某省属高校就读&#xff0c;现为材料学专业一年级博士生。联合培养首选澳洲国家&#xff0c;包括澳大利亚和新西兰&#xff0c;其次是美国&#xff0c;希望在2023年初出国&#xff0c;以完成整个学年的学习计划。在我们的帮助…

Android稳定性系列-01-使用 Address Sanitizer检测原生代码中的内存错误

前言想必大家曾经被各种Native Crash折磨过&#xff0c;本地测试没啥问题&#xff0c;一到线上或者自动化测试就出现各种SIGSEGV、SIGABRT、SIGILL、SIGBUS、SIGFPE异常&#xff0c;而且堆栈还是崩溃到libc.so这种&#xff0c;看起来跟我们的代码没啥关系&#xff0c;关键还不好…

Spark3每个job之间任务间隔过长

公司的跑批引擎从impala改成Spark3已经有一个多月了。 不得不说&#xff0c;跑批稳定了好多。资源控制有相对稳定了很多。Spark3比CDH的hive on spark2.4.0要快不少。AQE和CBO真的挺强的。但是使用中发现了一个很奇怪的事情。这个问题在网上搜过&#xff0c;并没有实际解决。 当…