保持微服务数据一致

时间:2015-06-18 08:57:44

标签: rabbitmq zeromq masstransit microservices

我们目前的项目基于微服务架构。到目前为止一切顺利,但我们开始采取一种方法,使所有这些数据在数据方面保持一致状态。

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

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

enter image description here

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

我们还考虑将masstransit路由滑动模式实现作为一种可能的解决方案,因此我们可以轻松地补偿所有这些错误,但我们并不喜欢使用一系列消耗这些变化的连续活动。我们宁愿采用与rabbitmq相同的方法,消费者以更平行的方式工作。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 使用共享数据库实现反馈循环机制。例如,如果服务A,则向B,C&发送更新。 D.一旦B,C& D编译他们应该更新数据库的操作。如果更新未在超时期限内完成,则根据状态更新,服务A可能会触发反向操作或业务逻辑决定的任何其他纠正操作。
  2. 我们有上述实现来解决上述问题。

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

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

    感谢。