microservices - 微服务中的分布式事务

标签 microservices distributed-transactions saga

我有 2 个微服务 S1S2 . S1调用 S2更新数据然后 S1插入另一条数据,但让我们考虑 S1失败,那么我们需要回滚S2更新的数据否则我们将处于不一致的状态。

我也经历过 Saga 模式。它会满足这种不一致吗

任何人都可以为此提出更好的解决方案吗?

最佳答案

分布式事务在大多数情况下都是有问题的,它们对服务不利

  • 服务边界——服务边界是一个信任边界。原子
    交易需要持有锁并代表他们持有
    对外服务打开了一个安全漏洞(使它更容易
    做拒绝服务攻击)你不能假设之间的原子性
    两个不同的实体或资源。特别是当这些资源属于
    到不同的业务。
  • 事务引入了时间和操作的紧耦合
  • 交易阻碍了可扩展性——并不是你不能扩展
    但要困难得多

  • Sagas(顺便说一下,它不需要编排)作为一种协调解决方案出现,因为它们使服务更加灵活——而且实际上更接近现实生活的工作方式。您可以与 Sagas 结合以帮助延迟效果的另一种模式可以是 reservation .

    您的另一个选择可能是重新考虑如何对服务进行分区。可能是您现在拥有的服务边界不正确,重新设计会将所需的事务包含到一个服务中

    关于microservices - 微服务中的分布式事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51520654/

    相关文章:

    spring - 在实际运行环境(例如Netflix Inc.)中使用什么技术来解决分布式事务?

    microservices - 我应该在同一个微服务中使用一个还是多个数据库?

    web-services - 服务发现与负载均衡

    java - 微服务和事务管理器如何处理并发问题

    sql-server - 在分布式事务中检查约束绕过CATCH block

    react-native - 终极版/传奇 : How to fire an action (put) inside a callback without channels (use sagas as normal generator functions)

    javascript - 使用 redux-saga 处理大量事件的订阅/取消订阅

    linux - 我可以运行在云中保持端口打开的微服务吗?

    go - 如何在 golang 中启动与 aws sqs 的连接

    java - 在 spring boot 应用程序中使用 RabbitMQ 进行分布式事务