微服务异步架构来实现相互关联的服务

时间:2019-10-14 09:23:47

标签: asynchronous microservices backend

我对服务相互关联的微服务体系结构有疑问。 例如; 让我们考虑以下电子商务中的话题。

我们有BuyProduct端点,并请求此端点。

  1. 浏览器请求
  2. BuyProduct执行。
    BuyProduct有三个服务电话
    1)付款服务电话
    如果付款服务失败
        返回false;
    其他
       继续;
    2)股票服务电话
    如果库存服务失败
     返回false;
    其他
      继续;
    3)帐户服务电话
    如果帐户服务失败
      返回false;
    其他
      继续;

  3. 返回浏览器成功还是失败

在此示例中,当从一个服务调用传递到另一个服务时,我假设成功或失败状态。 但是例如,可能存在一种情况,即从付款服务呼叫返回到股票服务呼叫请求的值。

我的问题是;

如果我们有消息代理,并且想使用消息代理(例如Rabbitmq或其他代理)构建异步体系结构,我们如何实现此senario?此解决方案有效还是有解决方案? 最佳做法是什么? 我用谷歌搜索,但是找不到一个令我满意的解决方案?

我不确定我认为的解决方案是否正确。(我的意思是其余同步架构)

如果浏览器等待即时结果,并且我们想保证我们的过程成功完成或失败,将会发生什么?

当我们把这个话题视为全无时,我们该怎么办?

1 个答案:

答案 0 :(得分:0)

如果您使用消息代理来实现此异步,则必须处理eventual consistency的概念。这意味着在很短的时间内(希望如此),您已经处理了付款,但没有更新库存和帐户状态。

然后,您的代码必须能够处理不一致之处。例如,仅剩一件商品,有2位顾客同时购买了该商品。致电支付服务可以同时使用,但是拨打股票服务的电话之一会失败。

一种有助于管理此类数据一致性问题的微服务模式称为Saga pattern。传奇实质上是一种机制,用于协调多个微服务以确保数据保持一致的方式一起工作。由于您提到正在探索使用消息代理,因此您可能希望研究基于编排的方法。