在分布式系统环境中共享数据

时间:2019-02-25 09:03:47

标签: events microservices distributed-system

我有一个关于在分布式系统环境中共享数据的问题。 通常我正在使用方案A,即。我正在将消息从系统A推送到远程队列(例如Amazon SNS / SQS),并且我希望系统B在系统B启动并运行时能够接收消息。

我已经考虑过了,但我想出了一个替代方案,我不确定它是否足够好。基本上,系统A现在将消息推送到本地队列,而本地队列将消息推送到系统A。其前提是系统A和B都已启动并且正在运行,并且该队列仅针对系统A。没有系统C,D,E ...会将消息推送到C,D,E上某个地方的相同(重复)本地队列。

这是一个很好的选择吗?

当远程队列不可用并且我不想丢失消息时,我还考虑将方案B作为方案A的备份计划。在那种情况下,系统B将是一个远程队列。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

方案C实际上是分布式消息传递应采用的方式,并且实际上已经完成。在异步通信中,这称为发件箱模式。有一些模式可用于弹性地发布到事件总线。它非常类似于邮箱,您的邮箱会将您的电子邮件保留在发件箱中,直到送达为止。调整的一点是,使用持久性存储来代替本地队列。

但是您需要有一个工作人员来寻找未决消息,并在队列可用时立即发布它们。

您可以在此处找到有关此模式的更多信息。

Outbox pattern

Resiliently publishing to the event bus