软件架构模式+系统架构

架构模式对比

在这里插入图片描述

分层模式

一般信息系统中最常见的4层划分如下:

  • Presentation layer 表示层(也就是UI层)
  • Application layer 应用层(也就是服务层)
  • Business logic layer 业务逻辑层(也就是领域层)
  • Data access layer 数据访问层(也就是数据持久层)

应用:一般桌面应用程序,电子商务WEB应用程序

CS客户端-服务器模式

客户端向服务器发起请求,服务器向这些客户端提供相关服务,之后,服务器继续侦听客户端的请求

应用:电子邮件、文件共享、银行业务
在这里插入图片描述

主从模式

主模块在相同的从模块之间分配工作,并根据从模块返回的结构来计算最终的结果
在这里插入图片描述

应用:在数据库复制中,主数据库被视作权威数据源,而从数据库与其保持同步
连接到计算机系统总线上的外围设备(主驱动器和从驱动器)

管道过滤模式

构建产生和处理数据流的系统。每个处理步骤都包含在一个过滤器组件中,要处理的数据通过管道传递。这些管道可用于缓冲或者同步
在这里插入图片描述

应用:
编译器,依次使用不同的过滤器执行词法分析、解析、语法分析和代码生成
生物信息学中的工作流程

Broker模式

使用解耦的组件构建分布式系统,这些组件可以通过远程服务调用实现交互。代理组件负责协调组件之间的通信
服务器将它们的功能(服务和特征等)发布到代理,客户端向代理请求服务,然后代理根据其注册表将客户端请求转发给合适的服务
在这里插入图片描述

应用:
消息代理软件,如 Apache ActiveMQ, Apache Kafka, RabbitMQ 和 JBoss Messaging.

P2P模式

每个独立的组件被称为对等点(或对等端,peer)。对等端既可以充当客户端(向其它对等端请求服务),又可以充当服务器(向其它对等方提供服务)
同一个对等端可能既是客户端,又是服务器,并且可以动态改变其角色
在这里插入图片描述
应用:
文件共享网络,如Gnutella 和 G2
多媒体协议,如P2PTV 和 PDTP
基于加密货币的产品,如比特币和区块链

事物总线模式

该模式主要处理组件,有4个重要的组件:事件源、事件侦听器、通道和事件总线。事件源将消息发送到事件总线上的特定通道,侦听器会订阅特定的频道。当消息发送到频道中后,订阅该频道的侦听器会收到该消息的通知
在这里插入图片描述
应用:
安卓开发
通知服务

MVC模式

该模式将交互式应用分为三个部分,为了将数据的内部表示与用户输入和向用户展示的形式分离开来,这样可以解耦组件,同时也可以进行高效的代码重用

模型——包含核心功能和数据
视图——向用户显示信息(可以定义多个视图)
控制器——处理用户的输入
在这里插入图片描述

应用:
主流编程语言的互联网应用架构
网络框架,如Django 和 Rails

黑板模式

此模式对于尚无确定性解决方案的问题很有用,黑板模式由三部分组成:
所有组件都可以访问黑板,组件可能会产生要添加到黑板中的新数据对象,组件在黑板上寻找特定类型的数据,并且可以通过与现有知识源进行模式匹配来找到这些数据。

黑板—— 一个结构化的全局内存,包含解决方案领域的对象
知识源——具有自身含义的专业模块
控制组件——选择、配置和执行模块

在这里插入图片描述
应用:
语音识别
车辆识别与跟踪
蛋白质结构鉴定
声呐信号解释

解释器模式

此模式通常用于设计组件来解释使用专用语言写出的程序,它主要指定如何估算程序行,即以特定语言编写的语句或表达式
在这里插入图片描述
应用
数据库查询语言,如SQL
用于描述通信协议的语言

====================================================================

单体架构

前端(Web/手机端)+中间业务逻辑层+数据库层

分布式应用

是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。数据库也大量采用分布式数据库,如redis、ES、solor等。
通过LVS/Nginx代理应用,将用户请求均衡的负载到不同的服务器上。
在这里插入图片描述

微服务架构

在这里插入图片描述

Serverless架构

云计算战场:Serverless架构
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/117929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++历险记】面向对象|菱形继承及菱形虚拟继承

个人主页:兜里有颗棉花糖💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

Python 没有 pip 包问题解决

最近需要搞一个干净的Python,从官网上直接下载解压可用的绿色版,发现无法正常使用PiP 一 官网下载Python https://www.python.org/downloads/ 选择 embeddable package,这种是免安装的包,解压后可以直接使用。 二 配置环境变量 添加环境变量&#xff1a…

【Python数据分析】数据分析之numpy基础

实验环境:建立在Python3的基础之上 numpy提供了一种数据类型,提供了数据分析的运算基础,安装方式 pip install numpy导入numpy到python项目 import numpy as np本文以案例的方式展示numpy的基本语法,没有介绍语法的细枝末节&am…

【混合时变参数系统参数估计算法】使用范数总和正则化和期望最大化的混合时变参数系统参数估计算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MATLAB中circshift函数转化为C语言

背景 有项目算法使用matlab中circshift函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。 MATLAB中circshift简单介绍 circshift是循环移位函数。可以使用于数组和矩阵元素的循环移位。 当A是数组 Bcircshift(A,p);如果…

安全学习DAY20_自动化工具项目武器库介绍

信息打点-自动化工具 文章目录 信息打点-自动化工具本节思维导图&概述 各类红蓝队优秀工具项目集合:All-Defense-Tool 自动化-武器库部署F8x 自动化信息搜集-网络空间AsamF 自动化信息搜集-企查信息ENScan 自动化信息搜集-综合架构-ARL&NemoARL灯塔Nemo_Go …

知识图谱实战应用26-基于知识图谱构建《本草纲目》的中药查询与推荐项目应用

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用26-基于知识图谱构建《本草纲目》的中药查询与推荐项目应用,本文通过Py2neo连接到知识图谱数据库,系统实现了中药的快速查询、关系分析、智能推荐和知识展示等功能。用户可以输入中药的名称或特征进行查询,系统将从知…

归并排序的详解!

本文旨在讲解归并排序的实现(递归及非递归)搬好小板凳,干货来了! 前序: 在介绍归并排序之前,需要给大家介绍的是什么是归并,归并操作,也叫归并算法,指的是将两个顺序序列…

阿里云对象存储oss-文件上传过程详解(两种方式)

阿里云对象存储oss-文件上传过程详解{两种方式} 方式一(最新代码,时间:2023/8/27)(1)如何配置系统变量(2)完整代码 方式二(跟黑马最新教程同代码)(1)在复制下来的代码中(2)完整代码 方式一(最新代码,时间:2023/8/27) 问题:需要配置系统变量才能够使用 (1)如何配置系统变量 以wi…

解决 .csv 文件上传到 pgsql 的字符报错问题

目录 背景问题解决办法 背景 上传 .csv 文件进行数据导入到 pg 时,报错显示如下: ods.tbl_inp_fee_detail.csv数据上传失败 报错信息:org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Where: C…

MariaDB数据库服务器

目录 一、什么是数据库? 二、什么是关系型数据库? 三、数据库字符集和排序规则是什么? 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库? 数据库(DB)是以一定方式长期存储在计算机硬盘内…

[C++] STL_list常用接口的模拟实现

文章目录 1、list的介绍与使用1.1 list的介绍1.2 list的使用 2、list迭代器3、list的构造4、list常用接口的实现4.1 list capacity4.2 插入删除、交换、清理4.2.1 insert任意位置插入4.2.2 push_front头插4.2.3 push_back尾插4.2.4 erase任意位置删除4.2.5 pop_front头删4.2.6 …

2023年“羊城杯”网络安全大赛 Web方向题解wp 全

团队名称:ZhangSan 序号:11 不得不说今年本科组打的是真激烈,初出茅庐的小后生没见过这场面QAQ~ D0n’t pl4y g4m3!!! 简单记录一下,实际做题踩坑很多,尝试很多。 先扫了个目录,扫出start.sh 内容如下…

Compose学习 - 环境配置及compose、kotlin插件、gradle、AndroidStudio版本对应关系

最近学习Compose,一开始学习的Compose版本是1.1.1,学习的过程中发现, LazyHorizontalGrid这个方法只有在1.2.0以后版本才支持。 想着既然要升级,直接用最新的好了。后面按照官网建议,下载了最新的AndroidStudio&#…

初步了解ES

一、ES基础查询 1、es基础查询 1.1 准备数据 # 准备数据 PUT test_index/_doc/1 {"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", &…

【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

目录 1 NumPy 基础概述 1.1 NumPy的主要特点和功能 1.2 NumPy 安装和导入 2 Numpy 数组 2.1 创建NumPy数组 2.2 数组的形状和维度 2.3 数组的数据类型 2.4 访问和修改数组元素 3 数组操作 3.1 数组运算 3.2 数学函数 3.3 统计函数 4 数组形状操作 4.1 重塑数组形…

nvm安装electron开发与编译环境

electron总是安装失败,下面说一下配置办法 下载软件 nvm npmmirror 镜像站 安装nvm 首先最好卸载node,不卸载的话,安装nvm会提示是否由其接管,保险起见还是卸载 下载win中的安装包 配置加速节点nvm node_mirror https://npmmi…

Java 中数据结构LinkedList的用法

LinkList 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。 链表可分为单向链表和双向链表。 一个单向链表包含两个值: 当前节点…

PATH系统环境变量配置教程【图文步骤】

开发Java程序,需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的 bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK 的bin目录下&…

​7.3 项目3 贪吃蛇(控制台版) (A)​

C自学精简实践教程 目录(必读) 主要考察 模块划分 / 文本文件读取 UI与业务分离 / 模块划分 控制台交互 / 数据抽象 需求 用户输入字母表示方向,实现贪吃蛇游戏 规则:碰到边缘和碰到蛇自己都算游戏结束 输入文件 data.txt data.txt 内容如下&am…