【问题标题】:Keep microservices data consistent保持微服务数据一致
【发布时间】:2015-09-03 19:46:15
【问题描述】:

我们当前的项目基于微服务架构。到目前为止一切都很好,但我们开始尝试一种方法,让它们在数据方面保持一致。

基本上,我们根据解决方案中的主要实体来拆分它们。这些实体可以很好地独立工作,但它们之间仍然存在一些依赖关系,其中涉及在修改另一个微服务的实体时更新一组微服务。

我们试图通过不同的途径应对这一挑战。 起初,我们认为 rabbitmq 是解决这个问题的一个很好的解决方案:一个微服务将带有更改信息的消息发送到一个交换器,交换器将它扇出到消费微服务队列。像这样的:

这似乎是一个很好的解决方案,但如果任何消费者出现错误,我们有点担心数据一致性:我们需要实施一种策略,在所有消费微服务中恢复这些更改。还在考虑使用 ZeroMq 等无代理技术,该技术可以在没有代理瓶颈的情况下实现相同的技巧。

我们还认为公共交通路线滑动模式实施是一种可能的解决方案,因此我们可以以简单的方式补偿所有这些错误,但我们不喜欢让一组连续的活动消耗这些更改。我们宁愿采用与 rabbitmq 相同的方法,消费者以更并行的方式工作。

所以现在我们陷入了僵局,我们想知道其他开发人员选择了什么来解决这个问题。 如果能够解决这个问题,我们不会放弃其他技术。

【问题讨论】:

  • 如果许多实体需要执行一个操作,或者如果其中一个失败了则根本不需要执行某个操作,那么您就有了共识问题,您应该寻找一个可以解决该问题的库/系统。

标签: rabbitmq zeromq masstransit microservices


【解决方案1】:

这是微服务架构的主要缺点之一。我能想到:

  1. 使用共享数据库实现反馈循环机制。例如,如果服务 A 向 B、C 和 D 发送更新。一旦 B、C 和 D 完成操作,他们应该更新数据库。如果更新未在超时期限内完成,则根据状态更新,服务 A 可以触发反向操作或业务逻辑决定的任何其他纠正措施。

我们有上面的实现来解决上面的问题。

你可以阅读我的文章来了解微服务的设计原则:

https://techietweak.wordpress.com/2015/07/05/mdp/

谢谢。

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 2022-10-12
    • 2020-10-06
    • 1970-01-01
    • 2022-10-16
    • 2017-11-30
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多