常见的系统架构风格有哪些?各有什么优缺点?

  • 1、单体架构
    • 介绍:
    • 优点:
    • 缺点:
  • 2、MVC架构
    • MVC架构特点:
    • 优点:
    • 缺点:
  • 3、面向服务架构(SOA)
    • 介绍:
    • 面向服务架构特点:
    • 优点:
    • 缺点:
  • 4、微服务架构
    • 介绍:
      • SOA和微服务的区别:
    • 优点:
    • 缺点:

1、单体架构

介绍:

单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。
  单体架构特点:打包成一个独立的单元(导成一个唯一的jar包或者是war包),会一个进程的方式来运行。
单体架构的优点、缺点

优点:

项目易于管理
  部署简单

缺点:

测试成本高
  可伸缩性差
  可靠性差
  迭代困难
  跨语言程度差
  团队协作难

2、MVC架构

MVC架构特点:

MVC是模型(Model)、视图(View)、控制器(Controller)3个单词的缩写。 下面我们从这3个方面来讲解MVC中的三个要素。
  Model是指数据模型,是对客观事物的抽象。 如一篇博客文章,我们可能会以一个Post类来表示,那么,这个Post类就是数据对象。 同时,博客文章还有一些业务逻辑,如发布、回收、评论等,这一般表现为类的方法,这也是model的内容和范畴。 对于Model,主要是数据、业务逻辑和业务规则。相对而言,这是MVC中比较稳定的部分,一般成品后不会改变。 开发初期的最重要任务,主要也是实现Model的部分。这一部分写得好,后面就可以改得少,开发起来就快。
  View是指视图,也就是呈现给用户的一个界面,是model的具体表现形式,也是收集用户输入的地方。 如你在某个博客上看到的某一篇文章,就是某个Post类的表现形式。 View的目的在于提供与用户交互的界面。换句话说,对于用户而言,只有View是可见的、可操作的。 事实上也是如此,你不会让用户看到Model,更不会让他直接操作Model。 你只会让用户看到你想让他看的内容。 这就是View要做的事,他往往是MVC中变化频繁的部分,也是客户经常要求改来改去的地方。 今天你可能会以一种形式来展示你的博文,明天可能就变成别的表现形式了。
  Contorller指的是控制器,主要负责与model和view打交道。 换句话说,model和view之间一般不直接打交道,他们老死不相往来。view中不会对model作任何操作, model不会输出任何用于表现的东西,如HTML代码等。这俩甩手不干了,那总得有人来干吧,只能Controller上了。 Contorller用于决定使用哪些Model,对Model执行什么操作,为视图准备哪些数据,是MVC中沟通的桥梁。
MVC架构优缺点

优点:

各施其职,互不干涉。
  在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
  有利于开发中的分工。
  在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
  有利于组件的重用。
  分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。

缺点:

增加了系统结构和实现的复杂性。
  视图与控制器间的过于紧密的连接。
  视图对模型数据的低效率访问。

3、面向服务架构(SOA)

介绍:

面向服务的架构(SOA)是一个组件模型,它将应用程序拆分成不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

面向服务架构特点:

系统是由多个服务构成
  每个服务可以单独独立部署
  每个服务之间是松耦合的。服务内部是高内聚的,外部是低耦合的。高内聚就是每个服务只关注完成一个功能。
  服务的优点、缺点

优点:

测试容易
  可伸缩性强
  可靠性强
  跨语言程度会更加灵活
  团队协作容易
  系统迭代容易

缺点:

运维成本过高,部署数量较多
  接口兼容多版本
  分布式系统的复杂性
  分布式事务

4、微服务架构

介绍:

SOA和微服务的区别:

这个简单说的话区别并不大,根据时间线的来区分,SOA出现时间是比微服务要早的,微服务也可以是说更加细腻化的SOA,如果说SOA是粗粒度的划分,那么微服务的划分的粒度更小,更加精确,SOA可以说是有多个微服务组成。(个人理解)

系统是由多个服务构成
  每个服务可以单独独立部署
  每个服务之间是松耦合的。服务内部是高内聚的,外部是低耦合的。高内聚就是每个服务只关注完成一个功能。
  服务的优点、缺点

优点:

测试容易
  可伸缩性强
  可靠性强
  跨语言程度会更加灵活
  团队协作容易
  系统迭代容易

缺点:

运维成本过高,部署数量较多
  接口兼容多版本
  分布式系统的复杂性
  分布式事务

常见的系统架构风格有哪些?各有什么优缺点?相关推荐

  1. 软件架构设计案例_透过现象看本质:常见的前端架构风格和案例

    所谓软件架构风格,是指描述某个特定应用领域中系统组织方式的惯用模式.架构风格定义一个词汇表和一组约束,词汇表中包含一些组件及连接器,约束则指出系统如何将构建和连接器组合起来.软件架构风格反映了领域中众 ...

  2. 透过现象看本质: 常见的前端架构风格和案例

    所谓软件架构风格,是指描述某个特定应用领域中系统组织方式的惯用模式.架构风格定义一个词汇表和一组约束,词汇表中包含一些组件及连接器,约束则指出系统如何将构建和连接器组合起来.软件架构风格反映了领域中众 ...

  3. 软件架构设计---层次系统架构风格

    1 二层及三层 C/S 架构风格 C/S 架构是基于资源不对等,且为实现共享而提出来的,是 20 世纪 90 年代成熟起来的技术,C/S 结构将应用一分为二,服务器(后台)负责数据管理,客户机(前台) ...

  4. 常见的系统架构设计介绍

    系统架构设计介绍 分布式架构 初始阶段架构 特征 应用服务和数据服务以及文件服务分离 特征 问题 使用缓存改善性能 特征 问题 使用应用服务器集群 特征 描述 问题 数据库读写分离 特征 描述 问题 ...

  5. 四种常见的系统架构,目前你处于哪个阶段呢?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | SimpleEasy 来源 | https:/ ...

  6. 软考-系统架构设计师(软件架构风格)

    分类 名称 概念 典型应用 数据流风格(所有的数据按照流的形式在执行过程中前进-流水线) 批处理序列 批处理风格的每一步处理都是独立的,并且每一步都是顺序执行的.只有当前一步处理完,后一步处理才能开始 ...

  7. 4 种主流的 API 架构风格对比

    欢迎关注方志朋的博客,回复"666"获面试宝典 本文讨论了四种主要的 API 架构风格,比较它们的优缺点,并重点介绍每种情况下最适合的 API 架构风格. 两个单独的应用程序需要中 ...

  8. 四种主流的 API 架构风格对比

    来源 | InfoQ 本文讨论了四种主要的 API 架构风格,比较它们的优缺点,并重点介绍每种情况下最适合的 API 架构风格. 两个单独的应用程序需要中介程序才能相互通信.因此,开发人员经常需要搭建 ...

  9. 什么是系统架构设计:关于架构演进理论

    什么是系统架构设计:关于架构演进理论 在过去软件开发过程发展的很长一段时间内,软件架构表现为一种集中式的单块(Monolithic)式,即先对系统进行分层,然后通过单个进程进行部署和维护,典型的分层体 ...

最新文章

  1. Java 经典问题 for 基础知识
  2. Android初步学习BroadCast与Service实现简单的音乐播放器
  3. post php数据,php post数据
  4. cad在布局怎么调比例_大神们都在用的9个CAD制图技巧,你会用几个?
  5. 沫沫金:PS快速扣头发丝【详细教程】
  6. 面向对象与原型(二)
  7. Android学习--广播机制
  8. gradle 编译失败,出现 permgen space的问题
  9. Unity3d Material(材质) 无缝拼接
  10. MySQL多库备份以及从多库备份中恢复某个库
  11. JPA的cannot simultaneously fetch multiple bags异常的解决
  12. 【Collection、List、泛型、数据结构】
  13. Clojure 学习入门(18)—— 数据类型
  14. ArcGIS字段计算器中的python函数(转发)
  15. html遍历map,forEach()方法遍历map()方法数组遍历
  16. 苏州计算机云联盟协会,【缤FUN社团】计算机协会
  17. 启动tomcat出来两个窗口 NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-
  18. 进程间通信——消息队列(Message queue)
  19. HDU6217 BBP Formula
  20. 一致性hash和虚拟节点

热门文章

  1. 2022金三银四面试总结-Java高级篇
  2. 加载java ie停止工作_OpenLayers webapplication在IE11中停止工作
  3. Vite ( Vue + TS ) 项目配置 @ 路径别名
  4. 逆境之中见真章,JASMINER在众多出海企业中脱颖而出
  5. 51Nod 1629 B君的圆锥 c/c++题解
  6. ❤ CSDN榜一博主,半年文章汇总【答谢粉丝、文末送书4本】❤
  7. 【蓝桥杯】大臣的旅费
  8. linux更换steam目录,如何在Linux上备份Steam游戏数据 | MOS86
  9. 虞美人【秦观】鸳鸯惊起不无愁。柳外一双飞去、却回头。
  10. python挂机脚本怎么运行,Python实现自动挂机脚本(基础篇)