目录

    大家是否思考过如何设计大型企业级系统?在进行主要的软件开发之前,我们先得选择一个合适的架构。这个架构要给我们所需的功能和质量保证。因此,在将这些架构用于我们的设计之前,我们应该理解不同的架构体系。

    1. 什么是架构模式

    根据 Wikipedia 解释,

    一个架构模式就是,在给定上下文条件下,解决软件架构中常见问题的一个通用、可复用的解决方案。架构模式类似于软件设计模式,但范围更广。

    在这篇文章中,我将简单介绍以下十种常见的架构模式的用法,及其优缺点。

    • 分层模式
    • 客户端-服务器模式
    • 主从模式
    • 管道-过滤器模式
    • Broker 模式
    • 点对点模式
    • 事件总线模式
    • 模型-视图-控制器模式
    • 黑板模式
    • 解释器模式

    2. 分层模式

    这种模式用于构建能被拆分为一组子任务的程序,每个子任务是一个特殊的抽象层。每层向更高一层提供服务。

    下面是通用信息系统中,最常见的 4 层:

    • 表示层(也称 UI 层)
    • 应用层(也称服务层)
    • 业务逻辑层(也称领域层)
    • 数据层(也称持久化层)

    用法:

    • 常见的桌面应用
    • 电子商务 Web 应用

    3. 客户端-服务器模式

    这种模式由两部分组成,一个服务端和多个客户端。服务端组件将给多个客户端组件提供服务。客户端从服务端请求服务,服务端提供相关的服务给这些客户端。此外,服务端会持续监听客户端的请求。

    用法:

    • 在线应用,例如,电子邮件、共享文档和银行业务

    4. 主从模式

    这种模式由两部分组成,master 和 slaves 。master 组件分发任务给同等的 slave 组件,获取 slave 返回的结果之后,计算最终的结果。

    用法:

    • 在数据库复制中,master 数据库作为权威数据库,slave 数据库从其同步
    • 在计算机系统中,连接到总线的外围设备(主、从驱动器)

    5. 管道-过滤器模式

    这种模式用于构建生产和处理数据流的系统。每个处理步骤都包含一个过滤器组件。需要被处理的数据才能够通过管道。这些管道能起到缓存或同步的作用。

    用法:

    • 编译器。一系列的过滤器完成词法分析、解析、语义分析和代码生成
    • 生物信息学的工作流

    6. Broker 模式

    这种模式用于构建具有解耦组件的分布式系统。这些组件通过远程调用进行通信。 Broker 组件负责协调其他组件的通信。

    服务将其功能(服务地址和特征)发布到 Broker 。客户端向 Broker 请求一个服务时,Broker 查询注册表,将客户端的请求重定向到合适的服务地址。

    用法:

    • 消息中间件,例如,Apache ActiveMQ、Apache Kafka、RabbitMQ 和 JBoss Messaging

    7. 点对点模式

    在这种模式下,各个组件被称为对等端。对等端既可以作为客户端,向其他对等端请求服务,也可以作为服务端向其他对等端提供服务。对等端可以充当客户端或服务端,亦或同时都是,而且可以随时改变其角色。

    用法:

    • 文件共享网络,例如,Gnutella 和 G2
    • 多媒体协议,例如,P2PTV 和 PDTP

    8. 事件总线模式

    这种模式主要处理事件,具有 4 个主要的组件,事件源,事件监听者,通道,事件总线。事件源将消息发布到事件总线上特定的通道。事件监听者订阅特定的通道。当有消息进入通道时,之前订阅过相关通道的监听者将会收到消息通知。

    用法:

    • Android 开发
    • 通知服务

    9. 模型-视图-控制器模式

    这种模式也被称为 MVC 模式,将一个交互式应用分为 3 个部分:

    1. 模型 - 包含核心功能和数据
    2. 试图 - 向用户展示信息(可能定义了多个视图)
    3. 控制器 - 处理用户的输入

    这样做是为了将程序内部的信息与展示给用户的信息,以用户能接受的方式分开。从而解耦组件,并且可以提高代码的复用率。

    用法:

    • 使用主流编程语言的互联网应用架构
    • Web 框架,例如,Django 和 Rails

    10. 黑板模式

    这种模式对于没有确定性解决方案的问题很有用。黑板模式主要由 3 部分组成:

    • 黑板 - 一个结构化的全局内存,包含来自解决方案空间的对象
    • 知识源 - 具有自己表现形式的特殊模块
    • 控制组件 - 选择、配置和执行模块

    所有的组件都可以访问黑板。组件可以生成新的数据对象添加到黑板。组件可以在黑板上查看特定类型的数据,也可以使用现有知识源通过模式匹配查找数据。

    用途:

    • 语音识别
    • 车辆识别和追踪
    • 蛋白质结构识别
    • 破译声呐信号

    11. 解释器模式

    这种模式用于设计一个解释专用语言编写的程序的组件。它主要指定如何计算每一行程序,也就是用特定语言编写的句子或表达式。其基本思想是语言的每个符号都有一个类。

    用法:

    • 数据库查询语言,例如 SQL
    • 描述通信协议的语言

    12. 架构模式的比较

    下面的表格给出了每个架构模式的优缺点:

    13. 参考