分布式系统常见软件架构模式

常见的分布式软件架构

    • Peer-to-Peer (P2P) Pattern
    • API Gateway Pattern
    • Pub-Sub (Publish-Subscribe)
    • Request-Response Pattern
    • Event Sourcing Pattern
    • ETL (Extract, Transform, Load) Pattern
    • Batching Pattern
    • Streaming Processing Pattern
    • Orchestration Pattern
    • 总结

先上个图,个人感觉总结的很好。
在这里插入图片描述
下面我们分别来概括说明一下:

Peer-to-Peer (P2P) Pattern

对等模式在两个或更多组件之间促进直接通信,而不需要中心协调器。
在这个分散的模型中,网络中的每个节点都可以充当客户端和服务器,从而实现高效的资源共享和协作。
P2P 架构通常用于文件共享系统、分散式应用程序 (DApp) 和区块链网络中,在这些系统中,弹性和可扩展性至关重要。

API Gateway Pattern

API 网关充当客户端请求访问应用程序内后端服务的统一入口点。
通过将多个 API 合并到一个界面中,它简化了客户端-服务器交互并强制执行安全、身份验证和速率限制策略。
API 网关是微服务架构中的基本组件,支持服务发现、负载均衡和协议转换,同时抽象了后端系统的复杂性。

Pub-Sub (Publish-Subscribe)

发布-订阅模式通过消息代理或事件总线(如 Kafka、Solace、RabbitMQ 或 ActiveMQ)将消息生产者(发布者)与消费者(订阅者)解耦。
发布者将消息广播到预定义的主题或频道,而订阅者对特定主题表示兴趣并异步接收相关消息。
发布-订阅架构促进了松散耦合、可扩展性和容错性,使其非常适合实时消息传递系统、事件驱动的微服务和物联网平台。

Request-Response Pattern

请求-响应模式代表了分布式系统中的基本交互模型,其中客户端向服务器发送请求并等待相应的响应。
这种同步通信范例在 Web 应用程序、RESTful API 和 RPC(远程过程调用)框架中很普遍。
请求-响应交互确保了可预测的行为并支持错误处理,使其适用于事务性工作流和面向用户的界面。

Event Sourcing Pattern

事件溯源是一种分布式系统模式,用于将应用程序的状态作为一系列不可变事件进行持久化。
它不是直接存储当前状态,而是存储表示状态转换的事件,并在需要时重放这些事件以重建应用程序状态。
事件溯源支持审计、时间查询和重放,使其非常适合金融系统、协作编辑工具和历史数据至关重要的领域驱动设计。

ETL (Extract, Transform, Load) Pattern

**ETL(提取-转换-加载)**是一种数据集成模式,用于从多个来源提取数据,将其转换为标准化格式,然后加载到目标数据库或数据仓库中。
此模式对于商业智能、数据分析和数据仓库项目中的数据迁移、同步和整合任务至关重要。
ETL 管道可自动执行数据工作流,处理数据质量问题,并支持大数据集的批处理。

Batching Pattern

批处理涉及在处理之前累积数据一段时间或直到达到某个阈值,然后将其作为一个单元进行处理。
通过将多个操作聚合到更大的批次中,它可以减少开销并提高数据处理管道中的效率。
批处理通常用于数据摄取、ETL 流程和分布式计算框架,以优化资源利用并最大程度地减少延迟。

Streaming Processing Pattern

流处理支持实时连续摄取、处理和分析数据流。与处理静态数据集的批处理不同,流处理系统以低延迟和高吞吐量处理无限数据流。
流处理架构支持事件驱动处理、复杂事件处理 (CEP) 和实时分析应用程序,涉及金融、物联网和网络安全等领域。

Orchestration Pattern

编排涉及一个中央协调器(编排器)管理分布式组件或服务之间的交互,以执行工作流或业务流程。
通过协调任务执行、处理异常和强制依赖关系,编排确保跨越多个系统的复杂工作流有序执行。
编排引擎用于工作流自动化、业务流程管理 (BPM) 和微服务编排,以简化操作并提高敏捷性。

总结

简而言之,有效管理数据和通信流对于构建健壮且可扩展的分布式系统至关重要。

对等、API 网关、发布-订阅、请求-响应、事件溯源、ETL、批处理、流处理和编排等架构模式提供了有价值的解决方案,以应对系统设计和实现中的各种挑战。

通过理解这些软件架构和分布式系统模式及其各自的优势和权衡,架构师和开发人员可以做出明智的决策,设计出满足其应用程序和用户不断变化的需求的系统。

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

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

相关文章

.h264 .h265 压缩率的直观感受

1.资源文件 https://download.csdn.net/download/twicave/89579327 上面是.264 .265和原始的YUV420文件,各自的大小。 2.转换工具: 2.1 .h264 .h265互转 可以使用ffmpeg工具:Builds - CODEX FFMPEG gyan.dev 命令行参数: …

liteos定时器回调时间过长造成死机问题解决思路

项目需求 原代码是稳定的,现我实现EMQ平台断开连接的时候,把HSL的模拟点位数据采集到网关,然后存入Flash,当EMQ平台连接的时候,把Flash里面的点位数据放在消息队列里面,不影响实时采集。 核心1&#xff1a…

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示,点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径,点击箭头所指浏览按钮,会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…

鸿蒙(HarmonyOS)自定义Dialog实现时间选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0(API 9) 二、效果图 三、代码 SelectedDateDialog.ets文件/*** 时间选择*/ CustomDialog export struct SelectedDateDialog {State selectedDate:…

Linux系统上安装Redis

百度网盘: 通过网盘分享的文件:redis_linux 链接: https://pan.baidu.com/s/1ZcECygWA15pQWCuiVdjCtg?pwd8888 提取码: 8888 1.把安装包拖拽到/ruanjian/redis/文件夹中(自己选择) 2.进入压缩包所在文件夹,解压压缩…

ROM修改进阶教程------修改rom 开机自动安装指定apk 自启脚本完整步骤解析

rom修改的初期认识 在解包修改系统分区过程中。很多客户需求刷完rom后自动安装指定apk。这种与内置apk有区别。而且一些极个别apk无法内置。今天对这种修改rom刷入机型后第一次启动后自动安装指定apk的需求做个步骤解析。 在前期博文中我有做过说明。官方系统固件解…

按图搜索新体验:阿里巴巴拍立淘API返回值详解

阿里巴巴拍立淘API是一项基于图片搜索的商品搜索服务,它允许用户通过上传商品图片,系统自动识别图片中的商品信息,并返回与之相关的搜索结果。以下是对阿里巴巴拍立淘API返回值的详细解析: 一、主要返回值内容 商品信息 商品列表…

Java面试题(每日更新)

每日五道!学会就去面试! 本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 目录 1.概述 2.Java 基础 2.1 JDK 和 JRE 有什么区别? 2.2 和 equals 的区别是什么? 2.3 两个对象的…

ECharts实现按月统计和MTBF统计

一、数据准备 下表是小明最近一年的旅游记录 create_datecity_namecost_money2023-10-10 10:10:10北京14992023-11-11 11:11:11上海29992023-12-12 12:12:12上海19992024-01-24 12:12:12北京1232024-01-24 12:12:12上海2232024-02-24 12:12:12广州5642024-02-24 12:12:12北京…

leetcode-148. 排序链表

题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&#x…

react18+

主要是围绕函数式组件讲,18主要用就是函数式组件,学习前先熟悉下原生js的基本使用,主要是事件 1、UI操作 1.1、书写jsx标签语言 基本写法和原生如同一则,只是放在一个方法里面返回而已,我们称这样的写法为函数式组件…

OrangePi Zero2 全志H616 开发初探

目录: 一、刷机和系统启动1、TF 卡格式化:2、镜像烧录:3、登录系统: 二、基于官方外设开发1、wiringPi 外设 SDK 安装:2、C 文件编译:3、基于官方外设的应用开发:① GPIO 输入输出:②…

【个人亲试最新】WSL2中的Ubuntu 22.04安装Docker

文章目录 Wsl2中的Ubuntu22.04安装Docker其他问题wsl中执行Ubuntu 报错:System has not been booted with systemd as init system (PID 1). Can‘t operate. 参考博客 😊点此到文末惊喜↩︎ Wsl2中的Ubuntu22.04安装Docker 确定为wsl2ubuntu22.04&#…

vue接入google map自定义marker教程

需求背景 由于客户需求,原来系统接入的高德地图,他们不接受,需要换成google地图。然后就各种百度,各种Google,却不能实现。----无语,就连google地图官方的api也是一坨S-H-I。所以才出现这篇文章。 google地…

【Python实战因果推断】56_因果推理概论6

目录 Causal Quantities: An Example Bias Causal Quantities: An Example 让我们看看在我们的商业问题中,你如何定义这些量。首先,你要注意到,你永远无法知道价格削减(即促销活动)对某个特定商家的确切影响&#xf…

AMEsim液压阀伯德图绘制方法

之前也在液压圈论坛里面发过类似的贴子,具体可以看这个网址🚪👉:如何得出说明书里面的伯德图曲线?,回复的人还是比较少,这个方法重要信息是参考百度文库这篇文章🚪👉&…

【系统架构设计师】计算机组成与体系结构 ⑯ ( 奇偶校验码 | CRC 循环冗余码 | 海明码 | 模 2 除法 )

文章目录 一、校验码1、校验码由来2、奇偶校验码3、CRC 循环冗余码 ( 重点考点 )4、海明码校验 ( 软考不经常考到 ) 二、CRC 循环冗余码 ( 重点考点 )1、模 2 除法概念2、模 2 除法步骤3、模 2 除法示例4、CRC 循环冗余码示例 15、CRC 循环冗余码示例 2 参考之前的博客 : 【计…

Webshell管理工具:AntSword(中国蚁剑)

中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。 通俗的讲:中国蚁剑是 一 款比菜刀还牛的shell控制端软件。 一、中国蚁剑下载 1. 下载 AntSword-Loader https://github.com/AntSwordP…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中,有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量(结构更清晰,语义更明确,可读性更好)在长字…

【C语言报错已解决】“Undefined Reference”

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言: 在开发过程中,我们经常会遇到各种编译错误或运行时错误。其中,“Undefined Referenc…