可以结合鸟窝大哥的文章软件架构模式阅读。
在全球软件架构峰会上,我们讨论了很多软件架构模式,我决定写一篇关于它的文章,重点介绍领先的软件架构师的见解。
首先,什么是软件架构模式?
架构模式是经过验证的良好架构设计,以便我们继续重用。软件架构师一直在获取和重用被证明是成功的架构模式。
更具体地说,架构模式是在实践中反复发现的设计决策,具有良好的可重用属性,并描述了一类架构。
开发架构可以看作是选择、裁剪和组合模式的过程。软件架构师必须决定如何实例化模式,如何使其符合特定的上下文和问题的约束。稍后我们会更详细地讨论。
Mark Richards 写了一本名为Software Architecture Patterns的书。根据他的说法,有 5 种主要的软件架构模式:微内核、微服务、分层架构、基于事件和基于空间。
1. 微内核模式
微内核架构模式也称为插件架构模式。它通常在创建具有可更换组件的系统时使用。
它能够适应系统需求不断变化的软件系统。将低限度的核心功能与扩展功能和特定于客户的部件分开。还能以插座的方式插入这些扩展功能并协调运行。
微内核架构模式是实现基于产品的应用程序的自然模式。基于产品的应用程序是作为第三方产品打包并以不同版本供下载的应用程序。然而,许多公司也开发和发布其内部业务应用程序,如软件产品、完整的版本、发行说明和可插拔功能。
微内核架构模式可以使附加的应用程序作为插件添加到核心应用程序中,从而提供可扩展性以及特性分离和隔离。
微内核架构模式由两种类型的体系结构组件组成:核心系统和插件模块。应用程序逻辑在独立的插件模块和核心系统之间进行划分,提供了应用程序功能和自定义处理逻辑的可扩展性、灵活性和隔离性。并且微内核架构模式的核心系统传统上只包含使系统运行所需的低限度的功能。
也许好的微内核架构例子是 Eclipse IDE。下载基本的 Eclipse 产品只会提供一个编辑器。但是,你可以添加各种插件,它就会成为一个高度可定制和有用的产品。
优势
- 的灵活性和可扩展性
- 某些实现允许在运行时添加插件
- 良好的可移植性
- 易于部署
- 对不断变化的环境可以做出快速响应
- 插件模块可以单独测试,可以很容易地被核心系统 mock 以演示或制作特定功能的原型,并且只需对核心系统进行很少的更改或不做任何更改
- 高性能,因为可以自定义和简化应用程序,让它仅仅包含需要的功能。
适合
- 从不同来源获取数据、转换数据并将其写入不同目标的应用程序。
- 工作流式应用程序
- 任务和作业调度应用程序
2. 微服务模式
当你将应用程序编写为一组微服务时,实际上是在编写协同工作的多个应用程序。每个微服务都有自己不同的职责,团队可以独立于其他微服务进行开发。他们之间的依赖就是通信。当微服务相互通信时,你必须确保它们之间发送的消息保持向后兼容。
优势
- 可以单独编写、维护和部署每个微服务
- 易于扩展,只需要扩展需要扩展的微服务
- 重写部分应用程序更容易,因为它们更小,与其他部分的耦合度更低
- 新团队成员可以更快的产出
- 应用程序更容易理解和修改
- 高度可维护和可测试-可实现快速、频繁的开发和部署
- 可独立部署-团队无需与其他团队协调即可部署其服务
适合
- 具有小组件的网站
- 边界定义明确的企业数据中心
- 快速开发新业务和 Web 应用程序
- 开发团队分布在全球各地
3. 分层架构模式
常见的架构模式是分层架构模式。分层架构模式是 n 层架构模式,其中的组件分布在其中,而且每一层都是独立的。大多数软件都是用的这种架构模式。这意味着所有组件都是互连的,且不相互依赖。分层架构模式的每一层在应用程序中都有特定的角色和职责。例如,表示层将负责处理所有用户界面和浏览器通信的逻辑,而业务层将负责执行与请求相关联的特定业务规则。
分层架构模式的一个强大功能是组件之间的关注分离。特定层中的组件只处理与该层相关的逻辑。
优势
- 可测试性高,因为组件属于架构中的特定层,其他层可以被 mock,使得该模式相对容易测试
- 开发的高度简易性使此模式非常知名,并且实现起来并不太复杂,而且大多数公司通过按层来划分技能集合并开发应用程序,因此此模式成为大多数业务应用程序开发的自然选择
- 可维护性
- 易于分配单独的角色
- 可以独立更新和增强每一层的架构
适合
- 标准业务线应用程序不仅仅局限于 CRUD 操作
- 需要快速构建的新应用
- 由缺乏经验的开发人员组成的团队,他们缺乏对其他体系结构的了解
- 需要严格的可维护性和可测试性标准的应用程序
4. 事件驱动模式
这是用于开发高可伸缩性系统的常见的分布式异步架构。该架构由单一用途的事件处理组件组成,这些组件监听事件并异步处理它们。事件驱动的架构构建了一个接受所有数据的中央单元,然后将其委托给处理特定类型的单独模块。
优势
- 很容易适应复杂的、通常是混乱的环境
- 高可伸缩性
- 在出现新事件类型时可以轻松扩展
适合
- 具有异步数据流的异步系统
- 用户侧界面
5. 基于空间的模式
基于空间的架构模式是专门为解决可伸缩性和并发性问题而设计的。对于并发用户量可变且不可预测的应用程序,它也是一种有用的架构模式。通过去除中央数据库的限制,使用可复制的内存网格,可以实现高可伸缩性。
基于空间的架构旨在通过在多个服务器之间拆分逻辑处理和存储来避免高负载下的功能崩溃。
优势
- 对不断变化的环境适应性高
- 尽管基于空间的架构通常不是解耦和分布式的,但它们是动态的,云上的工具允许将应用程序轻松地推到服务器上,从而简化了部署。
- 访问内存中的数据和缓存机制实现了该模式的高性能。
- 对集中式数据库的依赖减少或根本没有依赖,消除了这一限制瓶颈,实现了高可伸缩性
适合
- 点击流或用户日志等大容量数据
- 可以偶尔丢失且不会造成重大后果的低价值数据
- 社交网络