惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
美团技术团队
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
月光博客
月光博客
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recorded Future
Recorded Future
I
Intezer
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
罗磊的独立博客
V
V2EX
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
A
About on SuperTechFans
Scott Helme
Scott Helme
Vercel News
Vercel News
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
C
CERT Recently Published Vulnerability Notes
G
Google Developers Blog
B
Blog
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
IT之家
IT之家
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
小众软件
小众软件
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
AWS News Blog
AWS News Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
一文读尽十种常见软件架构模式
微信公众号 · 2020-05-04 · via 陈少文的网站

Please enable Javascript to view the contents

一文读尽十种常见软件架构模式

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

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. 参考


微信公众号