在分布式系统的错综复杂的编织中,尤其是在微服务架构内,可靠的消息传递和数据一致性的挑战无处不在且要求极高。发件箱模式,常被引用于微服务的独特领域内,从一个关键场景中浮现出来,确保本地数据库事务的原子性和发布消息到其他服务变得至关重要。在服务间通信的网中,它成为一个策略,确保在中断或网络不一致性中的消息不被遗忘。
然而,发件箱模式的适应性和实用性超越了其微服务的起源,将那些适用于各种架构背景的普遍原则编织进其结构中。本文开始探索揭示发件箱模式,不仅仅是作为一个针对微服务的工具,而是作为一个强大的架构模式,具有在不同的分布式计算环境中提高可靠性和一致性的潜力。
尽管发件箱模式最初源于微服务的复杂性,确保在潜在的陷阱中稳定的消息交换,但很明显,其好处并不仅限于这一独特的架构风格。简单地说,发件箱模式是关于捕获、安全保存和可靠发送消息,解决了各种技术景观中的建筑师们所熟悉的普遍挑战,尤其是在依赖可靠消息的场景中。
在这次探索中,我们旨在解读发件箱模式,阐述其基础的机制和原则,所有这些都是为了帮助架构师把握其好处,并在其初始的诞生地之外的各种背景中深思熟虑地应用它们。通过深入探讨该模式的起源并解释其关键特性,我们希望为架构师提供一种娴熟使用发件箱模式的方法,利用其能力来增强在不同的架构场景中的可靠性和一致性。
什么是发件箱模式?
在探索发件箱模式时,人们不仅发现了一个可靠的消息传递技术,还发现了一个能够弥合多种用例和各种输入的普遍适用的原则。无论是事件消息、数据包还是分布式系统中的其他通信形式,发件箱模式不仅作为一个传递者,而且作为一个细致的管理者,通过其关键阶段:拦截、存储和链接,确保各种数据形式从发送者到接收者的成功旅程。
拦截
在拦截阶段,发件箱模式毫不矫揉造作地接受各种类型的数据-无论是事件、消息还是其他数字通讯-在它们前进的旅程中暂停。在这里,任何准备传输的数据都被拦截,强调了模式的通用性和适应性。其本质不局限于特定的数据类型或消息格式,而是作为一个普遍适用的暂停,确保没有任何传输的数据在传输的复杂性中被匆匆遗失。
存储
进入存储阶段,发件箱为被拦截的数据提供了一个公正、安全的居住地。它不歧视它保护的数据的类型或性质;无论是消息、事件还是其他,每一块数据都被包裹在一个保护的避风港中,防止过早的损失,并确保它们准备进行可靠的未来传输。这个普遍的存储突显了模式的多功能性,准备容纳各种数据类型,直到它们被坚固地向前派遣。
链接
在最后的链接阶段,数据-无论其类型或来源如何-都被从发件箱精心、可靠地传输到其目的地。它超越了单纯的转发消息的行为;它是确保传输各种性质的数据的完成的承诺。数据的创建和传送是解耦的,允许定制管理每一个,确保每一个字节、每一条消息和每一个事件,不论其如何组成,在其旅程中都不受干扰,即使在潜在的中断中也是如此。
通过这些视角,发件箱模式揭示了自己,不仅仅是作为一个事件消息的通道,而是作为一个普遍适用的原则,确保在分布式景观中各种数据类型的安全和可靠的传输。当我们解剖其机制时,目标是照亮这种模式的适应性,启发架构师设想其在各种背景和多种数据类型中的应用,确保在数字通信的广泛编织中的可靠性和一致性。
这可能是一个发件箱模式的表示:
发件箱和收件箱
在分布式系统的广阔领域中,发件箱模式勤勉地保护消息的旅程,确保其可靠的发送,而其镜像对应部分,收件箱模式,则管理其在到达目的地时的受控接收和处理。当一条消息通过发件箱安全地发送时,收件箱巧妙地接管控制,保护传入的数据,并确保即使在网络不一致性导致的多次接收中,消息也只被处理一次,从而保持数据的一致性和幂等处理。一起来看,发件箱和收件箱模式创造了一个和谐且同步的数据流,打造了一个健壮的通信框架,确保在分布式系统中的数据传输和接收无缝且一致。
利用变更数据捕捉 (CDC) 创造差异
变更数据捕捉的基本原则是捕捉和跟踪数据集中的变化。每当数据发生变化(无论是通过创建、更新还是删除),CDC机制确保这些变动被识别并供其他系统使用。CDC可以基于轮询方式工作,其中消费者经常检查变动,或者基于推送方式,其中变化发生时就被转发给消费者。
它可以表示如下:
如前所述,发件箱模式并不专注于捕捉数据中的每一次变化。相反,它旨在为其他服务或组件创建一个可靠的事件或消息中介。发件箱充当临时存储,确保在瞬时故障期间消息不会丢失,并在消息创建和传递之间提供一个隔离层。
优势和权衡
在分布式系统的数字通信历程中,发件箱模式作为一个信号灯,以其精明的原则保障数据传输。当我们深入探讨其优点和缺点时,重要的是不要将它们视为绝对的,而是作为由架构师和谐平衡的考虑,将其应用于超出微服务起源的各种背景。
优势
-
增强的可靠性
发件箱模式的一个基本优点是它在传输失败期间对数据丢失的稳健性。通过在传输前拦截和存储消息,它确保数据在潜在的中断或系统故障中不会丢失。
-
关注点的解耦
通过拦截-存储-链三位一体实现的数据创建和传递之间的分离,允许系统独立管理每个方面。这种解耦为一个域中的变化或中断不会级联到另一个域提供了一个环境。
-
数据处理的多功能性
发件箱模式的通用适应性,欢迎各种数据类型和消息格式,使它成为一个多功能工具,允许架构师在众多场景中部署它,确保数据一致性和可靠的消息传递,无论上下文如何。
-
与收件箱的协调通信
与收件箱模式相结合,发件箱确保了和谐的数据流,提供了一个对称平衡的架构,其中消息不仅被安全地发送,而且在接收时也被有效地控制和管理。
权衡
-
实施复杂性
拦截、存储和链阶段的细致编织需要一个额外的架构复杂性层。确保无缝运行,特别是在最初没有考虑发件箱的系统中,可能是一个令人生畏的任务。
-
消息传递的延迟
通过引入一个中介存储和转发机制,消息从创建到传递可能会经历延迟,这在需要实时通信的场景中可能是一个关键的考虑因素。
-
资源利用
即使是暂时的,存储消息的需要都需要额外的资源,无论是在存储还是计算开销方面。对于资源有严格限制的系统,这种利用需要谨慎考虑。
-
故障的管理
尽管发件箱保护了不会丢失消息,但故障的管理和缓解 - 确保消息在故障后最终到达其目的地 - 需要额外的策略,并可能引入额外的复杂性。
结论
通过探索发件箱模式的优势和权衡,架构师获得了细致的理解,使他们能够在其优势闪耀的地方明智地应用该模式,同时减轻或接受其固有的复杂性和成本。无论是在它诞生的微服务中,还是在新的、多样的架构景观中,只要其权衡得到精明和预见的导航,发件箱模式都准备好提高数据的可靠性和一致性。
作者:Pier-Jean MALANDRINO
更多内容请关注公号【云原生数据库】
squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。