【问题标题】:micro service timeout and transaction微服务超时和事务
【发布时间】:2017-04-14 17:54:02
【问题描述】:

给定微服务架构,当对服务的调用超时时,调用者干脆放弃。但是,请求最终得到满足并插入了新记录。
问题是调用者系统确定请求由于超时而失败。维持此交易的最佳方式是什么?

【问题讨论】:

  • 阅读 CAP 问题
  • 您应该提供更多关于微服务提供的接口的信息。有面向请求/响应的微服务、基于消息(队列)的微服务,也可能有基于事件的微服务。所有这些都暴露了不同类型的通信,这些通信对检测和(如果可能)随后处理错误的能力有很大影响。
  • 它是 HTTP RESTful 服务和所有同步服务。我认为这个问题只是边缘情况,实现分布式事务的成本很高。所以我只是想看看是否有任何成熟的模式可以遵循而不是定制我自己的模式。不幸的是,调用者超出了我的控制范围,所以我想知道当调用者在超时情况下放弃时是否有方法可以轻松回滚。我想没有很多选择。

标签: transactions timeout microservices


【解决方案1】:

无法保证服务消费者和服务提供者之间的一致性,因为它们被网络隔开。请求传输和响应传输都可能导致错误,并且在某些边缘情况下,响应消息甚至可能在网络上丢失,而服务提供商没有注意到出了什么问题。

我认为这可能有助于您研究“零能”和“幂等”这两个术语。第一个是指对服务提供者没有影响的操作(例如,存储数据没有变化,例如读取数据),而第二个是指可以在不改变结果的情况下多次调用的操作(例如调用 delete one 或十次仍然意味着数据消失了,即使 alter 调用返回异常“数据已经消失”:调用后数据消失了)。

最后还有两者都不是的操作,例如“向列表中添加新元素”。我忘记了它的术语,但基本上这些操作将错误处理变成了噩梦,如果在您的请求期间有一个、多个或没有错误,那么您在错误之后以一种保证相同结果的方式恢复操作几乎没有变化顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 2019-02-13
    • 2014-08-31
    • 1970-01-01
    • 2019-04-14
    • 2015-07-24
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多