解读 5 种软件架构模式

2022 年 2 月 15 日 InfoQ

作者 | Orkhan Huseynli
译者 | Sambodhi
策划 | 辛晓亮

当一些人开始涉足软件工程领域,总有一天他会需要学习软件架构模式的基本知识。在我第一次接触编程的时候,我并不知道如何才能了解到现有的架构模型,这样就不会过于详尽,也不会让人感到混乱,而是非常抽象和简单的理解。

在我发现 Mark Richards 的 Software Architecture Patterns(《软件架构模式》,暂无中译本)一书之前,这个问题就一直存在。在此,我将与你分享这本书的最重要部分和架构模式。(要了解更多信息,我强烈建议你阅读这本书或他的报告https://www.oreilly.com/content/software-architecture-patterns/

1 为什么作为软件工程师,至少要学习基本的架构模式?

我肯定有许多文章可以解答这个问题,但是我会告诉你一些原因。首先,如果你了解架构模式,你将更容易遵循架构师的要求。其次,理解这些模式可以帮助你在代码中作出决策:比如,如果你的应用设计是基于事件驱动的微服务,作为一名软件工程师,如果你注意到现有服务中逻辑的复杂性和责任的增加,你就必须把你的代码解耦到一个单独的服务中。(不懂的话,就跟着文中的内容走,这种模式在本文中已经做了一个简要的说明。)

Mark Richards 在他著的书中,描述了 5 种模式:

  • 分层架构

  • 驱动架构

  • 微内核架构(或插件架构)

  • 微服务架构

  • 基于空间的架构(或云架构模式)

1. 分层架构  

它是单体应用最常见的架构。该模式的基本思想是将应用程序的逻辑划分为若干层,每层都封装了特定的角色。例如,持久层将负责应用程序与数据库引擎之间的通信。

图 1:分层架构模式

2. 事件驱动架构  

这种模式背后的思想是将应用逻辑解耦为单一用途的事件处理组件,以异步方式接收和处理事件。这是一种广受欢迎的分布式异步架构模型,它以高可扩展性和适应性而闻名。

图 2:事件驱动架构代理拓扑

3. 微内核架构  

微内核架构,也被称为插件架构,这种设计模式包含两大部分:核心系统插件模块(或扩展)。Web 浏览器就是一个很好的例子,它相当于核心系统,可以让你无限地安装扩展(或者插件)。

图 3:微内核架构

4. 微服务架构  

微服务架构由单独部署的服务组成,每个服务最好都有一个单一的责任。这些服务彼此之间是相互独立的,当其中一个服务出现故障时,其他服务不会因此中断。

图 4:微服务架构

5. 基于空间的架构  

基于空间的模式背后的主要思想是分布式共享内存,以缓解经常发生在数据库层面的问题。它的假设是,通过使用内存数据处理大部分操作,这样我们就可以避免在数据库中进行额外的操作,从而避免未来可能由此产生的任何问题(例如,如果你的用户活动数据实体发生了变化,你不需要改变一堆代码来持久化和从数据库中检索这些数据)。

基本的方法是将应用程序分离成处理单元(可以根据需求自动扩大和缩小),数据将在这些单元之间进行复制和处理,无需持久化到中央数据库(虽然当系统发生故障时,也会有本地存储)。

图 5:基于空间的架构

你可以在我的 GitHub 账户中找到其中一些架构模式的最简单例子。以下是链接:

  • 分层模式(使用 Java

    https://github.com/OrkhanHuseynli/recording-job

  • 微内核或插件模式(使用 Go 或 Golang)

    https://github.com/OrkhanHuseynli/plugins_design_in_go

  • 微服务模式(使用 Go)

    https://github.com/OrkhanHuseynli/microservices_template_golang

作者介绍:

Orkhan Huseynli,软件工程师。

原文链接:

https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2

点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!

今日好文推荐

Android 13来了,它真的平庸又鸡肋吗?

以架构视角解读和落实银行数字化转型的两份重磅指导文件

怼腾讯高管的应届生回应被标注“永不录用”;程序员跳槽B站遭老东家索赔200万;马斯克40颗卫星被磁暴摧毁|Q资讯

被升级整疯了,Etsy 放弃 React

点个在看少个 bug 👇

登录查看更多
2

相关内容

软件工程 (Software Engineering) 是一门研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
计算体系架构研究综述与思考
专知会员服务
65+阅读 · 2022年3月21日
专知会员服务
34+阅读 · 2021年10月17日
专知会员服务
13+阅读 · 2021年10月3日
专知会员服务
84+阅读 · 2021年6月14日
【经典书】精通Linux,394页pdf
专知会员服务
92+阅读 · 2021年2月19日
专知会员服务
30+阅读 · 2020年12月21日
【2020新书】高级Python编程,620页pdf
专知会员服务
235+阅读 · 2020年7月31日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
InfoQ 2022 年趋势报告:架构与设计篇
InfoQ
0+阅读 · 2022年4月18日
简单软件架构的一些好处
InfoQ
0+阅读 · 2022年4月4日
如何使用流处理器 Pipy 来创建网络代理
InfoQ
0+阅读 · 2022年2月25日
K8s 为什么这么复杂?
CSDN
0+阅读 · 2022年2月10日
详解微服务中的三种授权模式
InfoQ
0+阅读 · 2022年1月12日
每个前端开发者都应该提升的 5 项技能
InfoQ
0+阅读 · 2022年1月10日
自下而上学习容器
InfoQ
0+阅读 · 2021年12月13日
微服务下分布式事务模式的详细对比
InfoQ
0+阅读 · 2021年12月12日
微服务依赖管理的陷阱与模式
InfoQ
0+阅读 · 2021年12月2日
如何在微服务中设计用户权限策略?
InfoQ
0+阅读 · 2021年11月19日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2011年12月31日
Arxiv
0+阅读 · 2022年4月18日
Arxiv
0+阅读 · 2022年4月15日
Arxiv
0+阅读 · 2022年4月15日
VIP会员
相关VIP内容
计算体系架构研究综述与思考
专知会员服务
65+阅读 · 2022年3月21日
专知会员服务
34+阅读 · 2021年10月17日
专知会员服务
13+阅读 · 2021年10月3日
专知会员服务
84+阅读 · 2021年6月14日
【经典书】精通Linux,394页pdf
专知会员服务
92+阅读 · 2021年2月19日
专知会员服务
30+阅读 · 2020年12月21日
【2020新书】高级Python编程,620页pdf
专知会员服务
235+阅读 · 2020年7月31日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
相关资讯
InfoQ 2022 年趋势报告:架构与设计篇
InfoQ
0+阅读 · 2022年4月18日
简单软件架构的一些好处
InfoQ
0+阅读 · 2022年4月4日
如何使用流处理器 Pipy 来创建网络代理
InfoQ
0+阅读 · 2022年2月25日
K8s 为什么这么复杂?
CSDN
0+阅读 · 2022年2月10日
详解微服务中的三种授权模式
InfoQ
0+阅读 · 2022年1月12日
每个前端开发者都应该提升的 5 项技能
InfoQ
0+阅读 · 2022年1月10日
自下而上学习容器
InfoQ
0+阅读 · 2021年12月13日
微服务下分布式事务模式的详细对比
InfoQ
0+阅读 · 2021年12月12日
微服务依赖管理的陷阱与模式
InfoQ
0+阅读 · 2021年12月2日
如何在微服务中设计用户权限策略?
InfoQ
0+阅读 · 2021年11月19日
相关基金
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2011年12月31日
Top
微信扫码咨询专知VIP会员