想知道如何设计大型企业级系统?在开始主要代码开发之前,我们必须选择一个合适的架构,它将为我们提供所需的功能和质量属性。因此,在将它们应用于我们的设计之前,我们应该首先了解不同的架构。

-什么是架构模式-

根据维基百科,

模式是一种通用的、可重用的解决方案,用于解决给定环境下软件架构中的常见问题。该架构类似于软件设计模式,但其范围更广。

在本文中,我将简要介绍以下10种常见的架构模式,以及它们的用途和优缺点。

-分层模式-

该模式可用于构建可分解为子任务组的程序,每个子任务组都处于特定的抽象级别。每次都是向上级提供服务。一般信息系统中最常见的四层划分如下:

表示层表示层(即UI层)

应用层应用层(即服务层)

业务逻辑层业务逻辑层(即领域层)

数据访问层数据访问层(即数据持久层)

app应用

一般桌面应用程序

电子商务Web应用程序

-客户端-服务器模式-

该模型由两部分组成:一个服务器和多个客户端,服务器为多个客户端提供服务。向客户端发出请求,服务器向这些客户端提供相关服务。之后,服务器继续监听客户端请求。

在线应用,如电子邮件、文件共享和银行等。

-主从模式-

这种模式也分为两部分:主模块和从模块。主模块在相同的从模块之间分配工作,并根据从模块返回的结构计算最终结果。

app应用

在数据库复制中,主数据库被视为权威数据源,从数据库与之保持同步。

连接到计算机系统总线的外围设备(主驱动器和从驱动器)

-管道过滤模式-

这个模式可以用来构建一个生成和处理数据流的系统。每个处理步骤都包含在一个过滤器组件中,待处理的数据通过管道传输。这些管道可用于缓冲或同步。

应用程序编译器。使用不同的过滤器依次执行词法分析、解析、语法分析和代码生成。

生物信息学的工作流程

-经纪人模式-

这种模式是使用解耦的组件构建分布式系统,可以通过远程服务调用实现交互。代理负责协调组件之间的通信。服务器发布它们的功能(服务和特性等。)发送给代理,客户端向代理请求服务,然后代理根据它们的注册表将客户端请求转发给适当的服务。

应用程序消息代理软件,如Apache ActiveMQ、Apache Kafka、Rabbit MQ和JBoss Messaging。

-P2P模式-

在这种模式下,每个独立的组件称为一个对等体(或对等体)。一个对等点既可以充当客户端(向其他对等点请求服务),也可以充当服务器(向其他对等点提供服务)。同一个对等体可以既是客户机又是服务器,并且它的角色可以动态改变。

文件共享网络的应用,如Gnutella和G2

多媒体协议,如P2PTV和PDTP

基于加密货币的产品,如比特币和区块链

事务总线模式

该模式主要处理组件,有四个重要组件:事件源、事件侦听器、通道和事件总线。事件将消息发送到事件总线上的特定通道,侦听器订阅特定通道。当消息被发送到通道时,订阅该通道的收听者将被通知该消息。

Android应用程序开发

通知服务

-MVC模式-

这种模式将交互式应用分成三个部分,

型号——包含核心功能和数据。

视图——向用户显示信息(可以定义多个视图)

控制器——处理用户输入

这样做是为了将数据的内部表示从用户输入和表示的形式中分离出来,这样可以有效地分离组件和重用代码。

主流应用编程语言的互联网应用架构

网络框架,比如Django和Rails。

-黑板模式-

这种模式对于没有明确解决方案的问题很有用。黑板模式由三部分组成:

黑板——包含解决方案领域中的对象的结构化全局内存

知识源——是一个专业模块,有自己的意义。

控制组件——选择、配置和执行模块。

所有组件都可以访问黑板。组件可以生成要添加到黑板的新数据对象。组件在黑板上寻找特定类型的数据,它们可以通过与现有知识源的模式匹配来找到它们。

应用语音识别

车辆识别和跟踪

蛋白质的结构鉴定

声纳信号解释

-解释模式-

这种模式通常用于设计组件来解释用特定语言编写的程序。它主要规定了如何估计程序行,即用特定语言编写的语句或表达式。基本思想是为每个语言符号设计一个类。

应用数据库查询语言,如SQL

用于描述通信协议的语言。

-建筑模式的比较-

模型

优势

劣势

分级模式

一个低级服务可以被不同的高级服务使用;分层的结果更容易标准化,因为可以明确定义每个层次内的修改不会影响其他层次。

不是通用架构;在某些情况下,需要跳过其中的一些层。

CS模式

很容易为客户请求的一系列服务建模。

请求通常在服务器的不同线程中得到响应;因为不同的客户端有不同的形式,进程间通信会造成很大的负载。

主从模式

服务的执行被委托给不同的从属模块。

从模块是独立的:没有共享状态;主模块和从模块之间的通信延迟可能是一个问题,尤其是在实时系统中。

管道过滤器模式

支持并发处理,当输入输出由数据流组成时,过滤器在收到数据时开始计算;易于添加过滤器,系统易于扩展;过滤器可以重用,并且可以通过重新组合现有的过滤器来创建不同的管道流。

整体效率受限于最慢的过滤器程序;当从一个过滤器传递到另一个过滤器时,存在数据转换的负载。

代理模式

允许动态修改、添加、删除和重新定位对象,内容分发对开发人员是透明的。

服务描述需要标准化。

P2P模式

支持分散运营;它对任何节点的故障都是高度稳定的;在资源和计算能力方面高度可扩展。

由于节点自愿合作,服务质量无法得到保证;安全难以保证;性能取决于节点的数量。

事件总线模式

很容易向系统添加新的发布者、订阅者和连接;它对于高度分布式的应用程序是有效的。

可伸缩性可能是个问题,因为所有信息都是通过同一时间总线传输的。

MVC模式

它构建同一个模型的多个视图很容易,可以在运行时连接或断开。

增加了复杂性,用户操作可能导致许多不必要的更新。

黑板模式

易于添加新的应用程序;很容易在数据空间中扩展结构。

很难修改数据空间的结构,因为所有的应用程序都会受到影响;可能需要同步机制和访问控制。

解释器模式

可以支持高度动态的行为;有利于终端用户的可编程性;因为很容易替换解释器,所以增强了灵活性。

因为解释语言通常比编译语言慢,所以性能可能是个问题。

结束

编辑:李倩