【问题标题】:Cyclic api calls in microservices微服务中的循环api调用
【发布时间】:2019-06-14 21:47:04
【问题描述】:

假设有两个服务,

  1. 产品服务
  2. 优惠券服务

优惠券是针对产品标记的。当任何产品的优惠券发生变化时,都会有一个从产品服务到优惠券服务的 API 调用,计算优惠券折扣并将其发送回产品服务。产品服务维护该缓存。但是,为了计算折扣,优惠券服务需要产品信息,如产品类别、SKU 类型等,折扣会根据这些信息而变化,因此再次对产品服务进行 API 调用,使其成为循环调用。有几种解决方案,

  1. 在优惠券服务中维护产品缓存。 - 这是一个开销,因为我们需要在每次产品字段更新时维护缓存,这不是我们正在寻找的解决方案。
  2. 当产品服务对优惠券服务进行 API 调用时,发送它需要的所有字段 - 这种方法存在紧密耦合。

解决这个问题的正确方法是什么?

【问题讨论】:

  • 在这些情况下,我不会拆分成不同的微服务。将它放在同一个服务中,您将获得性能并跳过开销。

标签: rest web-services microservices loose-coupling


【解决方案1】:

如果您决定为此需要 2 种不同的服务,我同意周期性依赖有点糟糕,值得尝试删除。

但是,我真的认为这里不需要它。我认为“优惠券”服务需要了解“产品”服务,反之则不然。

您遇到的问题是您的优惠券服务需要响应产品服务上发生的变化。现在,您通过让产品服务向优惠券服务发送消息解决了这个问题。

解决此问题的一些可能性包括:

  1. 让优惠券服务偶尔轮询更新。
  2. 部署发布-订阅系统。进行“产品更改”您可以订阅的内容并让优惠券订阅。

我会建议第三种选择。在我看来,作为一个概念的“优惠券更改”根本不应该存在于产品服务中。为什么会这样?听起来您实际上可能有 3 种不同的服务:

  1. 产品信息
  2. 优惠券信息
  3. 购物车

【讨论】:

    猜你喜欢
    • 2019-12-23
    • 2019-11-09
    • 2018-02-20
    • 2019-05-02
    • 2019-04-13
    • 2016-07-10
    • 1970-01-01
    • 2021-01-04
    • 2018-03-04
    相关资源
    最近更新 更多