Mark Richards写了一个50多页的小册子叫《软件架构模式》,里面介绍了五种架构:分层架构、事件驱动架构、微服务架构、微内核架构和基于空间的架构。其他的架构风格,我在之前的文章中都介绍过,简单说一下:基于空间的架构。
基于空间的架构模式
基于空间的架构模式也叫云架构模式(cloud architecture pattern),是设计用来解决扩展性和并发性问题的。传统架构长成下面这样,拓扑结构仍呈三角形形态,其中最宽部分为web服务器(最容易进行规模化,无状态服务水平扩容即可),而最窄部分则为数据库(最难进行规模化)。
基于空间的架构风格通过将数据库从系统的事务处理中剥离,以解决应用程序扩展性的限制。因此,该架构被称为空间型架构。这个风格得名于计算机科学术语元组空间,即具有共享内存的多个并行处理器概念。通过使用在事务处理期间复制到内存中的数据网格来替代数据库,实现了高度可扩展性。应用程序数据保存在内存中,并在所有活动处理单元之间进行复制,并使用数据泵异步与后台数据库同步。随着用户负载增加和减少,可以动态启动和关闭处理单元,从而实现可变可伸缩性。由于系统的事务处理过程中没有涉及数据库,因此消除了数据库瓶颈,在应用程序内提供近乎无限的可扩展性。

听上去是解决高并发问题的利器。但是实际项目中使用的却很少,为什么呢?由于所有事务数据都存储在内存中,因此整体数据大小成为空间型架构的限制因素。试想一下将45TB的关系数据库放入内存中!鉴于该架构风格技术上的复杂性,如果预算紧张且时间有限,则不宜选择该架构。此外,在测试环境中实现非常高负载用户既昂贵又耗时,这使得难以测试应用程序在可扩展性方面表现如何。因此,该架构风格相对整体敏捷性(快速响应变化能力)较低。由于空间型架构始终是最终一致性的,在内存数据网格更新达到数据库之前可能需要很长时间。因此,对于那些需要系统之间高水平数据一致性的系统来说,并不适合考虑使用空间型架构。
基于空间的架构模式总结一下就是:
核心思想:内存数据库、处理器与存储共享内存、异步持久化
优势:性能高、扩展性好
劣势:贵、复杂、响应变化能力差、数据一致性差(这些劣势排除了实际中95%以上的使用场景,所以简单了解即可)
更完整的分类方式
咱们实际常使用的架构模式不止这五种。《金字塔原理》里提出,当大脑要处理的项目超过4个或5个时就要对它进行归类分组。今天咱们尝试将架构视角从整体到部分来归类,分成:宏观架构、局部架构、应用结构架构和用户界面架构。
宏观架构
宏观架构一般应用于大规模企业的整体技术架构战略,一般建立在服务化基础之上。常见的架构模式有:中台架构、去中台化架构、Serverless 架构和微服务架构。
局部架构
局部架构一般应用于一个业务线或者一个团队,一般建立在宏观架构之下,有可能直接按照宏观架构来设计,或者遵从以下架构模式:单体架构、分层架构、事件驱动架构、面向空间架构、C/S架构、B/S架构、主从架构、面向服务架构和点对点架构。其他的架构风格,我在之前的文章中都介绍过,简单说一下:点对点架构。
点对点架构
点对点模式,即Peer-to-Peer模式,在这种模式中,单个组件被称为对等点。对等点可以作为客户端,从其他对等点请求服务,也可以作为服务器,为其他对等点提供服务。对等点可以充当客户端或服务器的角色,并且可以随时间动态地更改其角色。每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。
有3种比较流行的组织结构,(1)DHT结构,这种结构多用于文件共享和作为底层结构用于流媒体传输。(2)树形结构,最初的树形结构多用于P2P流媒体直播。(3)网状结构,又叫无结构,为P2P提供了最大的容忍性、动态适应性,在流媒体直播和点播应用中取得了极大的成功。
点对点 (P2P) 架构有多种用途,包括:
文件共享:P2P网络通常用于文件共享,因为它们允许用户直接相互共享文件,而不需要中央服务器。
即时通讯:P2P网络可用于在用户之间实现即时通讯,使他们能够进行实时通信。
区块链:例如比特币是一种 P2P 加密货币,无需中央货币当局即可运行。交易在去中心化的计算机网络上进行验证和记录,而不是集中管理。
应用结构架构
应用结构架构一般应用于单个可执行程序。常见的架构模式有:微内核架构、CQRS命令查询责任隔离、事件溯源、管道过滤器架构、还有和用户界面相关的MVC、MVP、MVVM架构。
总结
这些架构的视角并不相同,所以会产生多种架构一起使用,并不冲突。另外,请特别注意:“架构一般应用于” 这几个字,实际上所谓架构模式,并没有那么模式化,更类似于架构风格,可以灵活应用。比如微内核架构,又叫插件化架构,是按照功能拆分,有一个主流程,其他功能做成插件来做插拔。这些插件可以是集成于一个可执行应用,比如Intelij的插件、谷歌浏览器的插件,也可以做成服务化插件独立部署,应用于局部架构。如果有人聊天的时候硬要给微内核架构上纲上线,说什么服务要重启的就不是微内核架构、独立部署的就不是微内核架构,完全可以怼回去:微内核是一种思想,核心是功能可插拔、可替换。怎么实现并不需要模式化的套路。
预览时标签不可点
架构师28
架构师 · 目录
#架构师
上一篇在跨系统环境中实现数据一致性:关键步骤和策略下一篇微服务架构中的拆分粒度决策
