架构师蓝图: 理解软件风格与模式

本文介绍了10种软件架构风格及其对应设计模式,梳理了各个风格的优缺点和适用场景,帮助读者在架构选项过程中能有的放矢,做出更适合业务场景的架构设计。原文: The Architect’s Blueprint: Understanding Software Styles and Patterns with Cheatsheet

在软件开发过程中,架构在塑造软件系统的结构和行为方面起着至关重要的作用。架构为系统设计提供蓝图,详细说明组件如何相互交互以交付特定功能。然而,由于有大量可用的体系架构风格和模式,辨别哪种方法最适合特定的项目或系统可能需要付出大量时间。本文旨在阐明相关概念,帮助读者在架构工作中做出明智决策。

架构风格(Architectural Styles) vs 架构模式(Architectural Patterns)

在深入研究细节之前,很重要的一点是要区分架构风格和模式,这些术语通常可以互换使用,但具有不同的含义。

架构风格是为一系列系统提供抽象框架的高级策略。架构风格通过经常解决重复出现的问题来改进模块划分并促进设计重用。可以把它想象成指导建筑或住宅设计的主题或美学,具体实例包括分层(Layered)、事件驱动(Event-Driven)和微服务(Microservices)等。

另一方面,架构模式要更加具体,并且特定于系统中的特定问题或模块,为体系架构问题提供了结构化解决方案,详细说明了应该如何为特定功能构建组件和交互。架构模式类似于软件设计模式,但是工作在更高的抽象层次上。具体实例包括模型-视图-控制器(MVC,Model-View-Controller)、发布-订阅(Publish-Subscribe)和无服务器(Serverless)等。

虽然架构风格提供了广泛框架,可以看作是系统设计的一般哲学,但架构模式是该框架中特定设计问题的具体解决方案。换句话说,架构风格描述了系统的总体结构,而架构模式解决了可能在该结构中出现的特定设计问题。

下面我们将探讨十种关键的架构风格,每种风格都有其各自的模式、原则、优缺点和应用范围。这些风格包括分层(Layered)、基于组件(Component-Based)、面向服务(Service-Oriented)、分布式系统(Distributed System)、领域驱动(Domain-Driven)、事件驱动(Event-Driven)、关注点分离(Separation of Concern)、解释器(Interpreter)、并发(Concurrency)和以数据为中心(Data-Centric)。通过理解这些风格和模式,可以更好驾驭全局性体系架构,并设计出健壮、可伸缩和可维护的系统。让我们开始吧!

"在软件设计的宏伟图景中,风格是粗线条的轮廓,而模式是将杰作带入生活的复杂细节。"

终极备忘录

为了帮助读者浏览架构风格和模式的广阔景观,我创建了一个备忘录,包含了本文讨论的所有关键点。这个备忘录可以作为方便的参考指南,帮助读者快速回忆每种体系架构风格和模式的主要特征。

软件架构风格备忘录
软件架构风格备忘录
1. 分层架构风格(Layered Architecture Style)

分层架构是最常见的架构模式之一,通常用于传统web应用序和企业应用程序。

  • 原则: 这种体系架构风格将关注点划分为不同的层。典型的例子是三层架构: 表示层、业务逻辑层和数据存储层。
  • 优点: 易于理解、测试和维护,每一层都可以独立开发和更新。
  • 缺点: 有额外的性能开销,影响多个层的更改可能很难实现。
  • 应用: Web应用、企业应用。
  • 反模式: 循环依赖,跨层依赖。
分层(n层)模式

n层架构将系统划分为n层,每一层都有特定职责。最常见的划分是三层: 表示层、业务逻辑层和数据存储层。

分层(n层)体系架构模式
分层(n层)体系架构模式
整洁/洋葱模式

整洁体系架构,也被称为洋葱体系架构,是一种强调系统内关注点分离的软件设计哲学。它将软件组织成同心的层,以领域模型为核心,周围是特定于应用程序的层。外层只依赖内层,促进高度的解耦和隔离。这使得基础设施、UI或外部代理的更改对业务逻辑的影响最小。对于需要高度可维护性、可测试性和独立于UI、数据库或外部框架的系统来说,是理想的选择。

整洁/洋葱架构模式
整洁/洋葱架构模式
2. 基于组件的体系架构风格

这种风格强调对整个软件系统中可用的广泛功能的关注分离。

  • 原则: 这种体系架构风格将系统组织为松耦合、可重用的组件。
  • 优点: 高可重用性、灵活性和可维护性。
  • 缺点: 管理组件及其交互的复杂性。
  • 应用: Web应用、桌面应用、分布式系统。
  • 反模式: 过于庞大的组件,冗余的组件。
面向对象模式

这种模式是基于"对象"的范式,对象可以包含数据和代码: 字段形式的数据(通常称为属性)和过程形式的代码(通常称为方法)。该模式促进了封装、继承和多态,使设计、实现、维护复杂系统变得更加容易。

微内核模式

此模式将最小功能核心(微内核)与扩展功能及特定于客户的部分分离开来。微内核包含核心功能,而其他特性则作为微内核的插件实现。这使得系统可以很容易扩展,而无需修改核心。

微内核架构模式
微内核架构模式
插件模式

此模式允许通过添加新模块或插件向应用程序添加新功能。新模块通过标准接口集成到应用中,从而可以扩展和定制应用程序。这种模式通常用于web浏览器、媒体播放器和内容管理系统。

3. 面向服务的体系架构风格

这种风格将软件设计为相互通信的服务集合。每个服务都是自包含的,代表具有确定结果的特定业务活动。

  • 原则: SOA将应用程序设计为通过网络进行通信的服务集合。
  • 优点: 灵活性、可伸缩性、可重用性和松耦合。
  • 缺点: 增加了复杂性、网络依赖性和潜在的性能问题。
  • 应用: 企业系统、web服务、微服务。
  • 反模式: 忽略业务需求,在不需要SOA的地方使用SOA。
面向服务的体系架构模式

这种模式将软件设计为多个系统可复用的离散服务的集合。SOA模型中的每个服务都是为执行特定业务功能而构建的,例如检查客户的信用评分、计算付款或处理抵押贷款。这些服务通过网络相互通信,以实现特定活动,例如处理抵押贷款申请。SOA促进了可重用性,多个应用可以灵活使用服务,特定服务可以在不影响其他服务的情况下被修改或替换。

面向服务的体系架构模式
面向服务的体系架构模式
代理(Broker)模式

在代理模式中,系统组件通过代理实体进行通信。代理协调通信,例如转发请求、传输结果和异常。这种模式通过解耦的组件构建分布式软件系统,组件通过远程服务调用进行交互。

微服务模式

此模式将软件应用程序设计为一组小型服务,每个服务在其进程中运行,并与轻量级机制(通常是HTTP)通信。这些服务围绕业务功能构建,可以通过完全自动化的部署机制独立部署。这种模式允许快速、频繁、可靠的交付复杂应用程序。

微服务架构模式
微服务架构模式
无服务器(功能即服务或FaaS)模式

在此模式中,应用程序在云环境中构建和运行,不需要考虑服务器。云服务商动态管理机器资源的分配,开发人员可以只关注应用代码中的单个功能。此模式非常适合可伸缩的事件驱动应用程序。

4. 分布式系统架构风格

这种风格指的是由一组组件交互实现共同目标的系统,这些组件位于联网的计算机上,通过传递消息进行通信以及协调互相的动作。

  • 原则: 该架构涉及多个系统在网络上一起工作,对最终用户显示为单个系统。
  • 优点: 可伸缩性、容错性和资源共享。
  • 缺点: 增加了复杂性、网络依赖性以及与数据一致性相关的问题。
  • 应用: 分布式数据库、云计算、电信网络。
  • 反模式: 不考虑网络故障,忽略数据一致性挑战。
云架构模式

这种模式旨在通过在多个服务器均匀分布服务和资源来避免任何单点故障或性能瓶颈,非常适合需要100%正常运行时间和水平可扩展性的大容量、关键任务型应用程序,例如金融交易系统或在线游戏平台。

云架构模式
云架构模式
点对点(P2P)模式

在这种模式中,网络中的每个参与者(对等体)同时充当客户机和服务器,网络节点直接通信,不需要中央服务器。这种模式用于需要分布式计算或资源共享的应用程序,例如文件共享网络或区块链技术。

点对点(P2P)架构模式
点对点(P2P)架构模式
5. 领域驱动架构风格

这种风格侧重于核心领域和领域逻辑,基于业务领域模型进行设计,强调技术和领域专家之间的协作,迭代的改进模型,使其准确而有效的解决业务问题。

  • 原则: 关注核心领域和领域逻辑,并基于领域模型进行设计。
  • 优点: 提高对复杂业务领域的理解,促进技术和业务团队之间的沟通。
  • 缺点: 对于简单的领域,可能过度复杂,需要深入理解。
  • 应用: 复杂业务系统、企业软件。
  • 反模式: 忽略通用语言,不涉及领域专家。
六边形(端口和适配器)模式

这种模式允许应用程序能同时由用户、程序、自动化测试或批处理脚本驱动,并且可以在与最终运行时的设备和数据库隔离的情况下进行开发和测试。它将软件的业务逻辑与由端口和适配器驱动的外部关注点分离开来。对于需要与软件环境解耦的应用程序,此模式非常理想,有助于系统适应新的环境。

六边形(端口和适配器)架构模式
六边形(端口和适配器)架构模式
领域驱动设计模式

此模式是通过将实现连接到不断发展的模型来实现复杂需求的软件开发方法,涉及实现和模型之间的密切关系,在两者之间有恒定的迭代周期。DDD非常适合具有丰富、复杂业务规则的复杂系统,或者领域处于不断变化中的系统。

领域驱动体系架构模式
领域驱动体系架构模式
6. 事件驱动架构风格

事件驱动体系架构是用于应用程序设计的软件体系架构和模型。对于事件驱动系统,事件的捕获、通信、处理和持久化是解决方案的核心架构。

  • 原则: 这种架构风格由用户操作、传感器输出或来自其他程序的消息等事件驱动。
  • 优点: 高度可伸缩、松耦合、适合处理实时或近实时信息流。
  • 缺点: 由于异步编程而增加的复杂性可能难以维护和调试。
  • 应用: GUI应用程序,实时分析,复杂事件处理。
  • 反模式: 忽略事件顺序,缺乏事件持久性。
事件驱动模式

事件驱动架构是一种流行的分布式异步架构模式,用于生成高度可伸缩的应用程序,具有很高的适应性,可用于小型应用程序和大型复杂系统。

事件驱动架构模式
事件驱动架构模式
发布-订阅模式

这是一种消息传递模式,其中消息的发送者(称为发布者)不将消息直接发送给特定的接收者(称为订阅者)。相反,发布的消息被划分为主题,发布者并不知道可能有哪些订阅者(如果有的话)。类似的,订阅者对一个或多个主题感兴趣,并且只接收感兴趣的消息,而不知道有哪些发布者(如果有的话)。此模式在异步系统中广泛使用,用于将产生事件的流程与消费事件的流程分离,从而实现更大的可伸缩性和控制。

7. 关注点分离架构风格

关注点分离是一种设计原则,核心是将计算机程序划分为不同部分,每个部分处理一个单独的关注点。

  • 原则: 不同功能领域由系统中独立的部分处理。
  • 优点: 提高可理解性,降低复杂性,促进模块化和并行开发。
  • 缺点 :由于接口管理,这会增加复杂性,并且需要在模块之间进行更多通信。
  • 应用: 几乎所有类型的软件系统。
  • 反模式: 混合关注点,缺乏清晰的模块边界。
MVVC模式

此模式有助于将图形用户界面开发与业务或后端逻辑开发分离开来。MVVC的视图控制器负责从模型中公开数据对象,以便这些对象易于管理和呈现。此模式广泛用于桌面和移动应用等广泛的用户交互领域。

MVP模式

这种模式派生于模型-视图-控制器(MVC)模式,主要用于构建用户界面。在MVP中,呈现者承担了"中间人"的功能,模型和视图是完全分离的,并且仅通过呈现者相互通信。MVP是现代web应用的优秀架构,更容易实现自动化单元测试,并为项目提供了清晰的结构。

模型-视图-呈现者架构模式
模型-视图-呈现者架构模式
8. 解释器架构风格

解释器模式是一种设计模式,指定如何对语言中的句子求值。基本思想是在一种专门的计算机语言中为每个符号(终端或非终端)提供一个类。

  • 原理: 程序指令直接执行,无需事先转换成机器语言。
  • 优点: 更容易调试和测试,更灵活。
  • 缺点: 比编译语言慢,需要更多资源。
  • 应用: 脚本语言,一些高级编程语言。
  • 反模式: 在性能至关重要的地方使用解释器。
解释器体系架构模式
解释器体系架构模式
解释器模式

此模式指定如何计算语言中的句子,基本思想是在一种专门的计算机语言中为每个符号(终端或非终端)提供一个类。语言中句子的语法树是复合模式的一个实例,用于为客户端计算(解释)句子。此模式用于编程语言的编译器和解释器、正则表达式引擎以及处理和分析结构化文本数据。

9. 并发架构风格

并发是同时执行多个独立任务的系统的一种属性。

  • 原则: 程序的不同部分独立执行,也可能同时执行。
  • 优点: 可以显著提高性能,特别是在多核系统上。
  • 缺点: 设计和调试带有竞争条件和死锁的问题可能很复杂。
  • 应用: 实时系统、高性能计算、web服务器。
  • 反模式: 忽略潜在的并发问题,未正确同步共享资源。
Orchestration模式

在此模式中,控制器("调度器")控制服务之间的交互,指示业务逻辑的控制流,并确保一切都按调度进行。此模式通常用于必须协调多个服务并希望集中控制的复杂业务流程。

Orchestration模式
Orchestration模式
Choreography模式

此模式实现一个服务系统,每个服务独立工作,通过事件与其他服务交互,没有中央调度者。相反,每个服务都知道下一步该做什么。当我们想要创建分散的、高度解耦的系统,以实现更多的灵活性和可伸缩性时,可以使用此模式。

Choreography模式
Choreography模式
主从模式

此模式由两种类型组件组成: Primary和Secondary。主(Primary)部件将工作分配给相同的附属(Secondary)部件,并根据从附属部件返回的结果计算出最终结果。这种模式用于并行计算,通过将巨大的计算任务分配给几个处理器来更快执行计算。

流水线(Pipeline)/管道过滤(Pipe-Filter)模式

这种模式涉及一系列处理组件(进程、线程、协程等),以便一个组件的输出成为下一个组件的输入。其思想是将执行复杂处理的任务分解为可重用的独立组件。此模式用于Unix和类Unix操作系统中的管道命令。

10. 以数据为中心的体系架构

这种风格关注的是如何组织和转换数据,通常用于处理大量数据、执行复杂计算或需要高度可扩展的系统。

  • 原则: 数据库是体系架构的中心,所有交互都通过数据库进行。
  • 优点: 可以提供数据一致性、完整性和可靠性。
  • 缺点: 可能造成数据瓶颈和潜在的可伸缩性问题。
  • 应用: 企业应用、CRM系统和ERP系统。
  • 反模式: 忽略潜在的数据瓶颈,不考虑数据可伸缩性。
命令查询职责分离(CQRS)模式

此模式将数据存储的读写操作分离,支持读写工作负载的独立伸缩,并分别对其进行优化。这种模式非常适合读写负载差异很大的应用程序。

命令查询职责分离(CQRS)架构模式
命令查询职责分离(CQRS)架构模式
事件源模式

这种技术将应用状态建模为不可变序列或事件"日志"。事件源不是就地修改应用状态,而是存储触发状态变更的事件。此模式用于需要知道导致当前状态的事件的系统中,例如审计系统或实时协作应用程序。

Kappa模式

Kappa架构系统中存储的规范化数据是只能追加的不可变日志,而不是SQL之类的关系数据库或Cassandra之类的键值存储。这种模式用于实时数据处理系统。

Lambda模式

这种数据处理架构旨在利用批处理和流处理方法来处理大量数据,为硬件故障和人为错误提供了健壮、容错的系统。此模式用于大数据处理任务。

结论

总之,理解架构风格和模式对任何软件架构师或开发人员来说都至关重要。这些风格和模式提供了沟通、记录和探索设计可选方案的方法,为常见问题提供了解决方案,节省了时间和精力,帮助我们构建更健壮和可维护的系统。

本文探讨了各种体系架构风格和模式,每种风格和模式都有优缺点和理想用例。然而这只是冰山一角,还有更多更新的风格和模式在不断被开发出来。


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

本文由 mdnice 多平台发布

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

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

相关文章

onlyoffice document builder使用

office这个体系分为四个大教程 1、【document server文档服务器基础搭建】 2、【连接器(connector)或者jsApi调用操作office】-进阶 3、【document builder文档构造器使用】-进阶 4、【Conversion API(文档转化服务)】-进阶 如果需要连接器,可以查看&#xff1…

认识Redis:不只是缓存,还有这些厉害的功能!

在当今数据驱动的世界中,快速存取信息成为了技术发展的关键。而在众多存储解决方案中,Redis以其独特的魅力和强大的功能,成为了开发者们的宠儿。今天,就让我们一起来认识一下Redis。 一、Redis是什么,可以用来干什么&…

EasyRecovery易恢复中文破解版2024最新破解序列号

EasyRecovery易恢复是一款来自美国的数据恢复软件,已有35年(或38年)的历史。它支持不同存储介质的数据恢复,包括电脑系统硬盘、移动硬盘等,并针对不同的数据丢失原因提供了相应的恢复方案。 EasyRecovery易恢复是一款功…

【清关知识】毛里求斯的清关文件及清关手续

1、清关文件 1)发票 海关发票(3份)、商业发票。所有货物随货发票必须为正本原始发票,所有进口商在办理清关提货手续时,首先必须向海关呈交商业登记号码,凭此登记号码才可向公司注册局登记。 2&#xff0…

【linux】体系结构和os管理

冯诺依曼体系结构 输入单元:包括键盘, 鼠标,扫描仪, 写板等 中央处理器(CPU):含有运算器和控制器等 输出单元:显示器,打印机等 这里的存储器指的是内存 三者是相互连接的,设备之间会进行数据的来回拷贝&am…

以理论89、上机100分成绩终于通过了OceanBase OBCP的考试

OceanBase OBCP的考试分为理论考试和上机考试,跟OBCA认证考试比较来说,难度上升了一个很多大的层次。OBCA我是好几年前考的了,现在因为公司再去o,准备进OceanBase,所以必须快速考出OBCP证书,本来想着直接背…

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

【Java】图解 JVM 垃圾回收(二):垃圾收集器、Full GC

图解 JVM 垃圾回收(二) 1.垃圾收集器1.1 内存分配与回收策略1.2 Serial 收集器1.3 Parallel Scavenge 收集器1.4 ParNew 收集器1.5 CMS 收集器1.6 G1 收集器 2.Full GC 的触发条件 1.垃圾收集器 Java 虚拟机提供了多种垃圾回收器,每种回收器…

postgresql 文件结构(一) 数据库、表对应的文件

1、问题 甲方要求提供数据库数据量大小,由于各个业务数据库共用一个postgres,因此想把每个数据库占用的空间都统计一下。 2、查找物理存储文件目录 如下图所示,可以查询表、库的物理存储文件名称 -- 查询表对应的文件 select oid,relname…

c编译器学习02:chibicc文档翻译

目的 先粗略地看一遍作者的书籍。 原文档地址 https://www.sigbus.info/compilerbook# “低レイヤを知りたい人のためのCコンパイラ作成入門” 为想了解底层的人准备的C编译器制作入门 Rui Ueyama ruiucs.stanford.edu 2020-03-16 作者简介 https://www.sigbus.info/ 植山…

【前端素材】几款实用的后台管理系统html模板(附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

flink多流操作(connect cogroup union broadcast)

flink多流操作 1 分流操作2 connect连接操作2.1 connect 连接(DataStream,DataStream→ConnectedStreams)2.2 coMap(ConnectedStreams → DataStream)2.3 coFlatMap(ConnectedStreams → DataStream) 3 union操作3.1 u…

一文搞懂LDO !

7.LDO 1.原理 通过运放调节P-MOS的输出 低压差: 输出压降比较低,例如输入3.3V,输出可以达到3.2V。 线性: LDO内部的MOS管工作于线性状态。(可变电阻区) 稳压器: 说明了LDO的用途是用来给电…

LeetCode.590. N 叉树的后序遍历

题目 590. N 叉树的后序遍历 分析 我们之前有做过LeetCode的 145. 二叉树的后序遍历,其实对于 N 叉树来说和二叉树的思路是一模一样的。 二叉树的后序遍历是【左 右 根】 N叉树的后序遍历顺序是【孩子 根】,你可以把二叉树的【左 右 根】想象成【孩子…

Win11专业版安装集成了谷歌框架的安卓子系统,包含谷歌商店

1.摘要 上一篇博客讲述了使用微软商店安装安卓子系统的教程 https://blog.csdn.net/RudeTomatoes/article/details/135958882 上述方法的优点是安装过程简单,但是,由于Windows安卓子系统是微软与亚马逊联合开发,默认没有安装谷歌框架。我尝试…

[SwiftUI]自定义下划线

系统有一个下划线修饰,但最低只支持到iOS16。 extension View {available(iOS 16.0, macOS 13.0, tvOS 16.0, watchOS 9.0, *)public func underline(_ isActive: Bool true, pattern: Text.LineStyle.Pattern .solid, color: Color? nil) -> some View} 下…

金融帝国实验室(CapLab)官方更新_V9.1.62版本(2024年第10次)

〖金融帝国实验室〗(Capitalism Lab)游戏更新记录(2024年度) ————————————— ◎游戏开发:Enlight Software Ltd.(微启软件有限公司) ◎官方网站:https://www.capitalism…

IBM Spectrum LSF Process Manager 在共享分布式计算环境中运行和管理业务关键工作流程

IBM Spectrum LSF Process Manager 设计、记录和运行复杂的计算工作流 亮点 ● 快速创建复杂的分布式工作流 ● 开发可重复的最佳实践 ● 自信地运行关键工作流程 ● 提高流程可靠性 IBM Spectrum LSF Process Manager 使您能够设计和自动化计算或分析流程, 捕获…

http相关概念以及apache的功能

概念 互联网:是网络的网络,是所有类型网络的母集 因特网:世界上最大的互联网网络 万维网:www (不是网络,而是数据库)是网页与网页之间的跳转关系 URL:万维网使用统一资源定位符,…

Spring Cloud微服务网关Zuul灰度发布入门实战

一、灰度发布 灰度发布是指在系统迭代的时候一种平滑过度上线发布方式。灰度发布是在原有的系统的基础上面,额外增加一个新版本,这个新版本包含新上线的需要验证的功能,通过负载均衡引入部分流量到新版本的应用上,如果在这个过程…