数字化转型与架构 - 架构设计篇|什么是架构风格和架构模式?
软件开发是一个高成本的事情,但软件的复制又是一个近乎零成本的事情。所以在软件开发中,复用一直是被谈论的话题。在软件开发项目中,代码通过方法、类和模块的方式进行复用,架构通过架构风格(architectural style)和架构模式(architectural pattern)进行复用。下面我们对比一下常用的架构风格和架构模
架构风格中有 3 大类常见的风格类型,它们分别对应着常见的 3 类系统。
架构风格和系统关系示意图
调用/返回架构风格
输入一段信息点击提交按钮,之后就获得信息的处理结果。这是我们日常使用软件系统的普遍流程,即人“调用”软件系统获得结果。一个系统可能无法处理所有的工作,需要调用另外一个系统。调用逐渐更替,系统自身演变成了一个个的调用/返回关系。客户端/服务器端(Client/Server)的架构风格是对系统最简单的拆分;系统根据功能的通用性和重要程度,可以划分为多个层次,形成层次型架构分割。C/S 和 B/S 架构是层次风格的一种特例。OOP 的架构风格源于 OOP 的编程思想,同类的数据抽象到一起,它们的操作也被进行了封装。通过类和对象,对静态和动态的程序实现结构划分。
调用/返回架构风格
独立构件架构风格
独立构件架构风格中,构件与构件之间都不直接进行通信和调用,而是依赖第三方的通信机制进行信息的交换和处理。事件系统架构风格是一种开发者不可控系统,必须进行有效的系统规划。当一个开发者把产生的事件投递到事件中间件后,之后的产生的行为和行为执行的顺序都依赖于消费此消息的处理程序。
事件系统架构风格
数据流式架构风格
根据数据的输入方式不同,数据流式架构风格分为:批处理架构风格和管道-过滤器架构风格。
批处理架构风格是把一批数据按照固定的几个步骤逐次完成,数据全部完成当前阶段的处理,才能开始下一个阶段的处理。虽然批处理操作是一种高吞吐量的处理方式,但由于必须等待所有数据处理完成,所以也存在响应不及时的问题。
管道-过滤器架构风格是对批处理架构风格响应不及时的优化方案。管道-过滤器架构风格是程序启动后一直处在运行状态,随时可以对数据进行处理。当数据进入管道后,过滤器程序即可进行处理也不用等待一批数据。
数据流式架构风格示意图
架构风格是根据一个系统中数据和处理过程中如何进行控制的关系对系统架构进行的分类。数据如何输入到系统,处理过程是主动处理还是被动处理。现在的软件系统日益庞大且过于复杂,系统通常采用一个主架构风格并辅以多种架构风格组成整个架构。
架构风格中的架构类型都可以找到对应的架构模式。
分层架构模式与微服务架构模式
根据用户与机器交互的不同职责,系统架构可以分为:展示层、业务层、持久化层和数据库层,这是对系统的水平划分。当系统中服务器端程序包含所有的业务层和持久化层的功能,我们把它称作为单体架构,即后台服务只有一个单独运行的实体。在这种情况下,任何一个业务功能出现问题,系统中的其它业务也会受到影响。因此,微服务架构应运而生。微服务架构将单一实体程序按业务领域的范围,将服务拆分成多个。系统在运行过程中,不同业务领域的功能互不影响,大大降低了系统故障时的影响范围。
分层架构与微服务架构示意图
事件驱动架构模式
虽然事件驱动的架构被后端服务器设计人员津津乐道,但是在前端开发中也是非常常见的架构。界面交互开发时,系统 API 提供的 On 开头的方法是事件处理的回调函数。代码中实现一次回调函数,相当于订阅了一次此事件,在程序运行时就可以消费此事件。后端服务器架构中使用的消息中间件是分布式系统下实现事件驱动的通用构件。
事件驱动架构示意图
架构模式远不只上面那些,还有:微内核架构、ETL 架构、流式数据计算架构、ESB 架构、SOA(面向服务的架构)、MVC(模型-视图-控制器)架构等。
架构模式远多于架构风格,但两者之间又存在很多的共同点。架构风格是从上至下归纳出的架构类别,架构模式是自底向上解决具体问题总结出的最佳实践。一种架构风格在不同的业务场景下,可以有多种的架构模式,它们使用技术也截然不同。例如:在数据流架构风格下,进行大数据采集时采用 ETL 架构模式,进行实时计算时采用流式数据计算架构模式。下一篇文章,我们将介绍架构模式的实际应用:软件框架。
版权声明: 本文为 InfoQ 作者【数字随行】的原创文章。
原文链接:【http://xie.infoq.cn/article/81e13c98cfcde273ce223f473】。文章转载请联系作者。
评论