在分布式系统中实现数据一致性:发件箱模式

news2024/11/30 2:30:56

在分布式系统的错综复杂的编织中,尤其是在微服务架构内,可靠的消息传递和数据一致性的挑战无处不在且要求极高。发件箱模式,常被引用于微服务的独特领域内,从一个关键场景中浮现出来,确保本地数据库事务的原子性和发布消息到其他服务变得至关重要。在服务间通信的网中,它成为一个策略,确保在中断或网络不一致性中的消息不被遗忘。

然而,发件箱模式的适应性和实用性超越了其微服务的起源,将那些适用于各种架构背景的普遍原则编织进其结构中。本文开始探索揭示发件箱模式,不仅仅是作为一个针对微服务的工具,而是作为一个强大的架构模式,具有在不同的分布式计算环境中提高可靠性和一致性的潜力。

尽管发件箱模式最初源于微服务的复杂性,确保在潜在的陷阱中稳定的消息交换,但很明显,其好处并不仅限于这一独特的架构风格。简单地说,发件箱模式是关于捕获、安全保存和可靠发送消息,解决了各种技术景观中的建筑师们所熟悉的普遍挑战,尤其是在依赖可靠消息的场景中。

在这次探索中,我们旨在解读发件箱模式,阐述其基础的机制和原则,所有这些都是为了帮助架构师把握其好处,并在其初始的诞生地之外的各种背景中深思熟虑地应用它们。通过深入探讨该模式的起源并解释其关键特性,我们希望为架构师提供一种娴熟使用发件箱模式的方法,利用其能力来增强在不同的架构场景中的可靠性和一致性。

什么是发件箱模式? 

在探索发件箱模式时,人们不仅发现了一个可靠的消息传递技术,还发现了一个能够弥合多种用例和各种输入的普遍适用的原则。无论是事件消息、数据包还是分布式系统中的其他通信形式,发件箱模式不仅作为一个传递者,而且作为一个细致的管理者,通过其关键阶段:拦截、存储和链接,确保各种数据形式从发送者到接收者的成功旅程。

拦截 

在拦截阶段,发件箱模式毫不矫揉造作地接受各种类型的数据-无论是事件、消息还是其他数字通讯-在它们前进的旅程中暂停。在这里,任何准备传输的数据都被拦截,强调了模式的通用性和适应性。其本质不局限于特定的数据类型或消息格式,而是作为一个普遍适用的暂停,确保没有任何传输的数据在传输的复杂性中被匆匆遗失。

存储 

进入存储阶段,发件箱为被拦截的数据提供了一个公正、安全的居住地。它不歧视它保护的数据的类型或性质;无论是消息、事件还是其他,每一块数据都被包裹在一个保护的避风港中,防止过早的损失,并确保它们准备进行可靠的未来传输。这个普遍的存储突显了模式的多功能性,准备容纳各种数据类型,直到它们被坚固地向前派遣。

链接 

在最后的链接阶段,数据-无论其类型或来源如何-都被从发件箱精心、可靠地传输到其目的地。它超越了单纯的转发消息的行为;它是确保传输各种性质的数据的完成的承诺。数据的创建和传送是解耦的,允许定制管理每一个,确保每一个字节、每一条消息和每一个事件,不论其如何组成,在其旅程中都不受干扰,即使在潜在的中断中也是如此。

通过这些视角,发件箱模式揭示了自己,不仅仅是作为一个事件消息的通道,而是作为一个普遍适用的原则,确保在分布式景观中各种数据类型的安全和可靠的传输。当我们解剖其机制时,目标是照亮这种模式的适应性,启发架构师设想其在各种背景和多种数据类型中的应用,确保在数字通信的广泛编织中的可靠性和一致性。

这可能是一个发件箱模式的表示:

发件箱和收件箱

在分布式系统的广阔领域中,发件箱模式勤勉地保护消息的旅程,确保其可靠的发送,而其镜像对应部分,收件箱模式,则管理其在到达目的地时的受控接收和处理。当一条消息通过发件箱安全地发送时,收件箱巧妙地接管控制,保护传入的数据,并确保即使在网络不一致性导致的多次接收中,消息也只被处理一次,从而保持数据的一致性和幂等处理。一起来看,发件箱和收件箱模式创造了一个和谐且同步的数据流,打造了一个健壮的通信框架,确保在分布式系统中的数据传输和接收无缝且一致。

利用变更数据捕捉 (CDC) 创造差异 

变更数据捕捉的基本原则是捕捉和跟踪数据集中的变化。每当数据发生变化(无论是通过创建、更新还是删除),CDC机制确保这些变动被识别并供其他系统使用。CDC可以基于轮询方式工作,其中消费者经常检查变动,或者基于推送方式,其中变化发生时就被转发给消费者。

它可以表示如下:

如前所述,发件箱模式并不专注于捕捉数据中的每一次变化。相反,它旨在为其他服务或组件创建一个可靠的事件或消息中介。发件箱充当临时存储,确保在瞬时故障期间消息不会丢失,并在消息创建和传递之间提供一个隔离层。

优势和权衡 

在分布式系统的数字通信历程中,发件箱模式作为一个信号灯,以其精明的原则保障数据传输。当我们深入探讨其优点和缺点时,重要的是不要将它们视为绝对的,而是作为由架构师和谐平衡的考虑,将其应用于超出微服务起源的各种背景。

优势 

  • 增强的可靠性 

发件箱模式的一个基本优点是它在传输失败期间对数据丢失的稳健性。通过在传输前拦截和存储消息,它确保数据在潜在的中断或系统故障中不会丢失。

  • 关注点的解耦 

通过拦截-存储-链三位一体实现的数据创建和传递之间的分离,允许系统独立管理每个方面。这种解耦为一个域中的变化或中断不会级联到另一个域提供了一个环境。

  • 数据处理的多功能性 

发件箱模式的通用适应性,欢迎各种数据类型和消息格式,使它成为一个多功能工具,允许架构师在众多场景中部署它,确保数据一致性和可靠的消息传递,无论上下文如何。

  • 与收件箱的协调通信 

与收件箱模式相结合,发件箱确保了和谐的数据流,提供了一个对称平衡的架构,其中消息不仅被安全地发送,而且在接收时也被有效地控制和管理。

权衡 

  • 实施复杂性 

拦截、存储和链阶段的细致编织需要一个额外的架构复杂性层。确保无缝运行,特别是在最初没有考虑发件箱的系统中,可能是一个令人生畏的任务。

  • 消息传递的延迟 

通过引入一个中介存储和转发机制,消息从创建到传递可能会经历延迟,这在需要实时通信的场景中可能是一个关键的考虑因素。

  • 资源利用 

即使是暂时的,存储消息的需要都需要额外的资源,无论是在存储还是计算开销方面。对于资源有严格限制的系统,这种利用需要谨慎考虑。

  • 故障的管理 

尽管发件箱保护了不会丢失消息,但故障的管理和缓解 - 确保消息在故障后最终到达其目的地 - 需要额外的策略,并可能引入额外的复杂性。

结论 

通过探索发件箱模式的优势和权衡,架构师获得了细致的理解,使他们能够在其优势闪耀的地方明智地应用该模式,同时减轻或接受其固有的复杂性和成本。无论是在它诞生的微服务中,还是在新的、多样的架构景观中,只要其权衡得到精明和预见的导航,发件箱模式都准备好提高数据的可靠性和一致性。


作者:Pier-Jean MALANDRINO

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

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

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

相关文章

vue+canvas实现横跨整个页面的动态的波浪线(贝塞尔曲线)

本来写这个特效 我打算用css实现的,结果是一波三折,我太难了,最终没能用css实现,转战了canvas来实现。来吧先看效果图 当然这个图的波浪高度、频率、位置、速度都是可调的,请根据自己的需求调整,如果你讲波浪什么的调大一下 还有有摆动的效果哦。 以下是完整代码 <…

SAP 获取GOS附件清单及URL数据方法

很久没有更新了&#xff0c;断更了快两个月了&#xff0c;最近准备软考考试&#xff0c;刚考完不知道这次能不能通过 回归正题 SAP中很多业务中都是可以上传附件或者是上传URL的路径的&#xff0c;上传附件长时间会占用SAP的空间&#xff0c;使用GOS大多数都是采用上传URL的方式…

【好书推荐】AI时代架构师修炼之道:ChatGPT让架构师插上翅膀

目录 前言 ChatGPT对架构师工作的帮助 快速理解和分析需求 提供代码建议和解决方案 辅助系统设计和优化 提高团队协作效率 如何使用ChatGPT提高架构师工作效率 了解用户需求和分析问题 编码实践和问题解决 系统设计和优化建议 团队协作和沟通效率提升 知识管理和文…

SOME/IP 协议介绍(一)

1. 引言和功能概述 本文档规定了可扩展面向服务基于IP的中间件&#xff08;SOME/IP&#xff09;——一种用于汽车/嵌入式RPC机制和底层序列化/传输格式的示例&#xff0c;作为由RTE调用的序列化器。 唯一有效的缩写是SOME/IP。其他缩写&#xff08;例如Some/IP&#xff09;是…

echarts有4个y轴,点击图例依次按顺序显示和隐藏

代码&#xff1a; <template><div><el-row class"actually" style"padding-top:10px;height: 420px;"><div style"font-size: 14px; font-weight: bold; margin: 0 10px 0 5px; display: inline-block">Cloud Usage<…

构建生成式AI应用:关键因素是什么?

原创 | 文 BFT机器人 生成式AI是一种基于机器学习和深度学习的技术&#xff0c;通过训练模型来生成新的内容&#xff0c;它可以通过学习现有的数据&#xff0c;理解其规律和特征&#xff0c;并生成与之类似的新内容&#xff0c;生成式AI在多个领域具有广泛的应用潜力。然而&am…

vue3+element Plus实现弹框的拖拽、可点击底层页面功能

1、template部分 <el-dialog:modal"false"v-model"dialogVisible"title""width"30%"draggable:close-on-click-modal"false"class"message-dialog"> </el-dialog> 必须加的属性 modal:是否去掉遮罩层…

【踩坑及思考】浏览器存储 cookie 最大值超过 4kb,或 http 头 cookie 超过限制值

背景 本地生产环境&#xff1a;超过最大值 cookie token 不存储&#xff1b;客户生产环境&#xff1a;打开系统空白&#xff0c;且控制台报 http 400 错误&#xff1b; 出现了两种现象 现象一&#xff1a;浏览器对大于 4kb 的 cookie 值不存储 导致用户名密码登录&#xff…

kill-port,跨平台解决端口占用问题

在日常开发中&#xff0c;端口占用问题一直是令人头疼的难题。为了更高效地管理端口资源&#xff0c;开发者们经常需要一种快速而可靠的解决方案。在这方面&#xff0c;kill-port 的出现为我们提供了一种强大而便捷的工具。本篇博客将深入介绍 kill-port 解决端口占用问题的优势…

Marp: 将 Markdown 变为 PPT 式样的 VScode 插件

样例代码&#xff1a; --- marp: true size: 16:9 theme: default header: footer: --- <!-- _footer: Jia ming<br>Gansu University of Political Science and Law --> <!-- _backgroundColor: lightskyblue --> ## <!-- fit --> 笔记检验概述>…

Django音乐电台推荐系统 毕业设计-附源码 00750

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

c++的vector按值删除元素

代码 #include<iostream> #include<vector> using namespace std;void testDelete(vector<int>& vec, const bool delete45, const bool delete_less7) {if (delete45 true) {vec.erase(std::remove(vec.begin(), vec.end(), 45), vec.end());}if (del…

python加上ffmpeg实现音频分割

前言: 这是一个系列的文章,主要是使用python加上ffmpeg来对音视频文件进行处理,包括音频播放、音频格式转换、音频文件分割、视频播放等。 系列文章链接: 链接1: python使用ffmpeg来制作音频格式转换工具(优化版) 链接2:<Python>PyQt5+ffmpeg,简单视频播放器的编写(…

Springboot配置knife4j类(knife4j的使用)

1.引言 1.1 Swagger介绍 前后端分离开发模式中&#xff0c;API文档是最好的沟通方式。Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。具有以下几个特点&#xff1a; 及时性 (接口变更后&#xff0c;能够及时准确地通知相…

揭秘!AI加持双十一电商盛宴,带你解锁更多营销新玩法

从2009年到2023年&#xff0c;每年年终的双11大促都是如期而至&#xff0c;而且几乎每一次双11都能给电商行业带来创新和改变。今年是中国电商行业的第15个双11&#xff0c;也是人工智能&#xff08;AI&#xff09;在电商领域大规模应用的第一个双11。在这15年的发展历程中&…

RoboFab:世界第一家人形机器人生产工厂,承诺每年将生产1万台高科技机器人

原创 | 文 BFT机器人 脑洞大开地想象一下&#xff1a;有一家能够制造像人类一样行走、奔跑和工作的人型机器人的工厂。这听起来像是科幻电影&#xff0c;但实际上它已经出现在现实中。 不久之前&#xff0c;初创企业Agility Robotics向大众宣布将在美国俄勒冈州开设一座占地约…

Vue 官网使用与环境搭建

vue官网网址&#xff1a;https://cn.vuejs.org/vue脚手架文档网址&#xff1a;https://cli.vuejs.org/zh/ vue团队为了使得vue更加好的使用&#xff0c;维护了一些文档。 API是vue的字典&#xff0c;在编写vue的时候&#xff0c;遇到了一些不会的方法那么就去找API&#xff0c…

【linux进程控制(一)】进程终止--如何干掉一个进程?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程终止 1. 前言2. 文章整体…

uinapp微信小程序隐私政策授权

&#x1f680; 隐私弹窗效果图&#xff1a; 1、启用隐私相关功能在manifest.json文件中配置 usePrivacyCheck: true "mp-weixin" : {"__usePrivacyCheck__" : true, },2、创建组件 <template><view><!-- 隐私政策弹窗 --><uni-popu…

从瀑布模式到水母模式:ChatGPT引领软件研发的革新之路

ChatGPT引领软件研发的革新之路 概述操作建议本书优势 内容简介作者简介专家推荐读者对象目录直播预告写在末尾&#xff1a; 主页传送门&#xff1a;&#x1f4c0; 传送 概述 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了…