目录
文章目录
- 目录
- 软件架构模式
- 分层架构模式(Layered Architecture Pattern)
- 基于事件的模式(Event-based Pattern)
- 微内核模式(Microkernel Pattern)
- 微服务模式(Microservices Pattern)
- 基于空间的架构模式(Space-based Pattern)
- CS 模式(Client-server pattern)
- 主从模式(Master-slave pattern)
- 管道-过滤器模式(Pipe-filter pattern)
- 代理模式(Broker pattern)
- P2P 模式(Peer-to-peer pattern)
- MVC 模式(Model-view-controller pattern)
- 黑板模式(Blackboard pattern)
- 解释器模式(Interpreter pattern)
软件架构模式
架构模式是常见问题的案。
软件架构模式是通过验证的、针对特定场景的,具备良好设计结构的、通用的、可重用的解决方案。更具体地说,架构模式是在实践中概括总结的一组设计决策,具备明肯定义的属性,并能够重复使用。
数据库
软件开发有时能够看做是选择,定制和组合架构模式的过程。软件架构师必须决定如何采用哪几种架构模式,如何使这些架构模式与软件系统特定的上下文相适应。缓存
分层架构模式(Layered Architecture Pattern)
分层架构模式是最多见的架构模式,此模式用于可分解为子任务的结构化程序,每一个子任务都位于特定的抽象层级,每一层都为上一层提供服务。服务器
分层体系架构模式的每一层在应用程序中都有特定的角色和职责,这意味着全部组件都是互连的,但彼此之间不依赖。分层体系架构模式的强大功能之一是,组件之间职责分离。特定层中的组件仅处理与该层有关的逻辑。网络
例如,通常信息系统最多见的 4 个层次:多线程
- 表示层(也称为 UI 层)
- 应用层(也称为服务层)
- 业务逻辑层(也称为领域层)
- 数据访问层(也称为持久层)
优势:架构
- 高可测试性,每一层均可以单独测试。
- 高度易于开发,由于这种模式众所周知,而且实现起来并不太复杂,并且大多数公司都经过逐层分离技能来开发应用程序,这种模式已经成为大多数业务应用程序开发的天然选择。
- 可维护性。
- 易于单独更新某一层。
应用场景:并发
- 标准业务线应用程序,其功能不仅是 CRUD 操做。
- 须要快速构建的新应用程序。
- 适用于经验不足的开发团队。
- 须要严格的可维护性和可测试性的应用。
基于事件的模式(Event-based Pattern)
用于开发高度可扩展系统、常见于分布式异步架构模式,该架构模式由用于监听并异步处理事件的一系列组件组成。事件驱动的架构模式构建了一个接收全部数据的中央单元,而后将其委托给处理特定类型的单独模块。框架
这种模式也被称为订阅发布模式,有 4 个主要组件:事件源、事件监听者、通道和事件总线。事件源将消息发布到事件总线上的特定通道,监听者订阅特定的通道,消息发布到监听者以前订阅的通道,监听者将收到消息的通知。异步
优势:编辑器
- 容易适应复杂,常常混乱的环境。
- 弹性伸缩。
- 当出现新的事件类型时,很容易扩展。
应用场景:
- 具备异步数据流的异步系统。
- 用户界面交互。
- 通知服务。
- 注册中心。
微内核模式(Microkernel Pattern)
微内核架构模式,也称插件模式,这种模式容许你将其余应用程序功能做为插件添加到核心应用程序,从而提供可扩展性以及功能分离。
微内核架构模式主要由两种组件构成:
- 核心系统组件:仅包含使系统运行所需的最小功能。
- 插件模块:提供应用程序功能和自定义处理逻辑的可扩展性,灵活性和隔离性。
微内核架构模式的最佳示例是 Eclipse IDE。Eclipse 自己只为你提供一个编辑器功能。可是,一旦开始添加插件,它就会成为高度可定制和功能强大的产品。
优势:
- 极大的灵活性和可扩展性。
- 一些插件容许在应用程序运行时添加。
- 良好的便携性。
- 易于部署。
- 可以快速响应不断变化的环境。
- 插件模块能够单独进行测试。
- 高性能,由于你能够自定义和简化应用程序以仅包括所需的那些功能。
应用场景:
- 从不一样来源获取数据,转换数据并将其输出到不一样地方的应用程序。
- 工做流应用程序。
- 任务类应用程序。
微服务模式(Microservices Pattern)
当你采用微服务模式时,实际上就是在编写多个能够协同工做的服务进程。其中每一个微服务都有本身的职责,团队能够独立于其余微服务进行开发。这些微服务之间惟一的依赖就是通讯。当微服务彼此通讯时,你必须确保它们之间发送的消息可以向后兼容。
优势:
- 能够分别编写,维护和部署每一个微服务。
- 易于扩展,由于你能够仅扩展须要扩展的微服务。
- 更新迭代应用程序的各个部分比较容易,由于它们较小,而且与其余部分的耦合较少。
- 团队成员能快速响应且富有成效。
- 高度可维护和可测试–微服务模式知足快速频繁的开发和部署。
- 可独立部署,无需与其余团队协调便可部署其服务。
应用场景:
- 边界明确的企业数据中心。
- 快速发展的业务。
- 多部门协做的开发团队。
基于空间的架构模式(Space-based Pattern)
基于空间的架构模式,能够专门用于解决软件系统的伸缩性和并发性问题。
对于用户访问量常常发生变化、偶尔出现高并发的应用程序,这是一种有用的软件架构模式。这种模式,经过消除中央数据库约束,并使用复制基于内存的数据网格来实现伸缩性。
基于空间的架构模式旨在经过在多个服务器之间拆分处理和存储数据,来避免高负载下的软件系统功能崩溃。
优势:
- 可以快速响应不断变化的环境。
- 尽管基于空间的架构模式一般不是分布式,但它们是动态的,而且基于云的复杂工具容许将应用程序轻松 “推送” 到服务器,从而简化了部署。
- 经过内存中的数据访问和此模式中内置的缓存机制可实现高性能。
- 高可伸缩性来自于对集中式数据库的依赖很小或根本没有依赖的事实,所以提升了可伸缩性。
应用场景:
- 数据量大的应用程序,例如:用户日志。
- 低价值数据,偶尔可能丢失而不会形成严重后果。
- 社交类的应用程序。
CS 模式(Client-server pattern)
这种模式由两部分组成:服务器和多个客户端。服务器将向多个客户端提供服务。客户端从服务器请求服务,服务器向这些客户端提供相关服务。此外,服务器继续侦听客户端请求。
应用场景:
- 电子邮件、文档共享和银行等在线应用程序。
- 基于 IPC 的应用程序。
主从模式(Master-slave pattern)
这种模式由两部分组成:主节点和从节点。主节点将工做分配给相同的从节点,并根据从节点返回的结果计算最终结果。
应用场景:
- 在数据库复制中,主数据库被视为权威源数据库,从数据库与之同步。
- 经过总线链接到计算机系统(主驱动器和从驱动器)的外围设备。
- 进程内的多线程应用。
管道-过滤器模式(Pipe-filter pattern)
这种模式可用于构造生成和处理数据流的系统,每一个处理步骤都包含一个过滤器组件。要处理的数据经过管道传递,这些管道可用于缓冲或同步目的。
应用场景:
- 编译器。连续过滤器执行词法分析、词法解析、语义分析和代码生成。
- 生物信息学的工做流。
- 工具链式的应用程序。
- 网络数据面处理软件。
代理模式(Broker pattern)
这种模式经过解耦组件来构造分布式系统,这些组件能够经过远程服务调用彼此交互,代理组件负责协调组件之间的通讯。
服务器向代理发布功能(服务和特征),客户端向代理请求服务,而后代理将客户端重定向到合适的服务。
注意:Broker,Agent,Proxy 以及 Delegate 之间的的区别。
应用场景:
- 消息代理软件,例如:Apache ActiveMQ、Apache Kafka、RabbitMQ 和 JBoss 消息传递。
- 网络传输中的代理软件。
P2P 模式(Peer-to-peer pattern)
在这种模式中,每一个组件都称为对等节点。对等节点既能够做为客户机(从其余对等节点请求服务),也能够做为服务器(向其余对等节点提供服务)。对等节点能够充当单个客户机或服务器,也能够同时充当客户机和服务器,而且能够随着时间变化动态地更改角色。
使用场景:
- 文件共享网络,例如:Gnutella 和 G2 等。
- 多媒体协议,如:P2PTV 和 PDTP。
MVC 模式(Model-view-controller pattern)
MVC 模式将一个交互应用程序分为三个部分:
- 模型:包含核心功能和数据。
- 视图:向用户显示信息(能够定义多个视图)。
- 控制器:处理来自用户的输入。
这样作是为了将信息的内部表示、信息呈现给用户的方式、接受用户输入的方式分离开来。这种模式解耦组件并容许有效的代码重用。
应用场景:
- 通常的 Web 应用程序,例如:Django 和 Rails 等框架。
- 通常的 GUI 应用程序。
黑板模式(Blackboard pattern)
这种模式对于没有肯定解决方案策略的问题很是有用。
黑板图案由三个主要部分组成:
- 黑板:一个结构化的全局内存,包含来自解决方案空间的对象。
- 知识源:具备本身表示形式的专门化模块。
- 控制组件:选择、配置和执行模块。
全部的组件均可以到达黑板。组件能够生成添加到黑板上的新数据对象,组件在黑板上查找特定类型的数据,并经过与现有的知识源进行模式匹配找到这些数据。
应用场景:
- 语音识别。
- 车辆识别及追踪。
- 蛋白质结构识别。
- 声纳信号的解释。
解释器模式(Interpreter pattern)
这种模式用于设计一个解释专用语言编写的程序组件,它主要指定如何评估每一行程序,即用特定语言编写的句子或表达式。其基本思想是语言的每一个符号都有一个类。
应用场景:
- 数据库查询语言,如:SQL。
- 用于描述通讯协议的语言。