xuedabao 2020-06-22
在去年底召开的全球软件架构峰会(Global Software Architecture Summit)上,全球各界开发人员齐聚一堂,广泛地讨论了各种业界常见的软件架构模式。在此,我为您梳理并总结这些软件架构师给我们带来的精彩见解。
首先,什么是软件架构模式?
架构模式是那些由软件架构师通过持续实践,进而总结出的、过往已验证的、优秀设计架构。它们往往能够被重复地使用到其他项目或领域之中。更具体地说,架构模式是需要在实践中反复发掘的一组设计决策。它具有明确定义的属性,以及一套可以被重复使用与描述的架构。
其实,开发软件架构可以被看作是针对模式进行选择、定制和组合的一整套过程。而软件架构师的任务就是要决定:如何实例化模式,如何使其与特定的上下文、以及问题的约束相适应。我们将在下文中进行详细的讨论。
Mark Richards在其著作--《软件架构模式》一书中主要介绍了5种软件架构模式,它们分别是:微内核、微服务、分层架构、基于事件(事件驱动)和基于空间。下面我们将根据这个顺序逐一进行介绍。
1.微内核模式
微内核架构模式也称为插件架构模式。它通常是在软件团队创建具有可互换性组件(interchangeable components)的系统时,被使用到。
该模式主要适用于那些必须能够适应不断变化需求的软件系统。微内核模式能够从扩展功能、以及特定于客户的部件中,分离出最小的功能核心。作为一种套接字(socket),它能够插入到各种扩展之中,并协调其相互之间的协作关系。
业界通常认为:微内核架构模式是一种可被用于实施基于产品的应用程序的自然模式。此处所谓基于产品的应用程序,是一种打包的应用程序,可以作为典型的第三方产品版本被下载。当然,许多公司也会据此来开发和发布其内部的业务应用,例如:各种软件产品、版本、发布说明、以及可插入的功能等。
微内核架构模式允许您将其他应用程序的功能作为插件,添加到核心的应用程序上,进而提供可扩展性、以及功能上的分离(隔离)。
微内核架构模式通常由两种类型的架构组件所组成:核心系统和各种插件模块。我们需要将应用程序的逻辑,在各个独立的插件模块和基础核心系统之间进行划分,以提供基于应用功能,和自定义处理逻辑的可扩展性、灵活性和隔离性。在传统概念上,微内核架构模式的核心系统,仅包含那些系统运行所需的最少功能。
微内核架构的最佳示例是Eclipse IDE。通过下载基本的Eclipse产品,您只会获得一个编辑器。而只有在您添加了各种插件之后,它才能成为一个高度可定制的、实用的产品。
优势:
适合性:
2.微服务模式
当您将应用程序作为一组微服务进行编写时,实际上是在编写可以协同工作的多个微型应用程序。每个微服务都有自己的“职责”,团队可以独立于其他微服务进行开发。他们之间唯一的依赖便是沟通。当微服务彼此进行通信时,您必须确保它们之间发送的消息能够向后兼容。
优势:
适合性:
3.分层架构模式
最常见的架构模式当属分层架构模式。它是我们用来设计大多数软件的传统方法,同样有具有一定的独立性。分层架构模式是一种多层模式,每个层面上都有多个组件。这就意味着所有的组件虽然是互联的,但是彼此之间并不依赖。在应用程序中,分层架构模式的每一层都有特定的角色和职责。例如:表示层将负责处理所有用户界面和浏览器之间的通信逻辑,而业务层将负责执行与请求相关的特定业务规则。
分层架构模式的主要特点在于各个组件各司其职,相互分离。也就是说,某个特定层面上的组件,仅会处理与该层有关的逻辑。
优势:
适合性:
4.基于事件(事件驱动)的模式
这是用于开发具有高度可扩展性系统的最常见分布式异步架构。该架构由那些可用于监听事件,并能够异步处理事件的组件所组成。事件驱动类架构构建出一个能够接收所有数据的中央单元。该单元可以被委托给那些具有处理特定类型能力的单独模块。
优势:
适合性:
5.给予空间的模式
基于空间的架构模式被专门设计为解决那些可扩展性和并发性的问题。对于那些具有不定因素和不可测并发用户数的应用来说,它同样也是一种非常实用的架构模式。该模式通过消除对中央数据库的约束,以及使用可复制的内存中数据格(data grids),来实现良好的可扩展性。
此外,基于空间的架构可以通过在多个服务器之间进行拆分处理与存储,以避免高负载下的功能性崩溃。
优势:
适合性: