【问题标题】:Microservices architecture database微服务架构数据库
【发布时间】:2020-09-12 12:56:33
【问题描述】:

我研究微服务架构已经有一段时间了。但我有几个问题。

如果你需要举个例子,他们是 订单服务 客户服务 产品-服务

假设上面有 3 个微服务。他们正在使用关系数据库。

我在订单服务中列出订单。但我也必须在这里提取客户信息。

如果这是一个单声道结构,我可以用 join 来处理它。但是我如何在微服务架构中做到这一点。

注意:我没有做任何项目。我的目标只是了解微服务架构。

【问题讨论】:

    标签: database microservices


    【解决方案1】:

    选项:

    • 限制 orderservice 和 customerservice 之间的依赖关系:通常订单是一个自包含对象,其中包含所有客户数据(从订购时开始)。

    • 如果仍需要订单,则应保存客户的 ID,然后任何想要访问最近客户数据的 UI 或逻辑都需要使用客户服务的“公共 api”。 “公共 api”通常可以是任何东西——它甚至可以是定义的共享存储(如数据库)。然而,大多数团队决定不允许直接访问技术存储以避免紧密耦合。这就是为什么大多数时候服务使用 Rest(或 GRPC)来处理同步用例或使用某种形式的消息传递来进行异步交互

    但是 - 决定为什么要拆分它 - 您是否期望开发人员基础不断增长且复杂性更高?如果不是为您的情况构建一个整体可能会更便宜..

    【讨论】:

      【解决方案2】:

      但是我如何在微服务架构中做到这一点。

      只需调用另一个微服务并询问所需的附加信息即可。

      如您所见,通常微服务不共享数据库。

      如果你有这样的课程Order

      class Order
      {
          OrderId;
          ItemName;
          UserName;
      }
      

      还有一个像这样返回订单GetOrder(id)的方法

      GetOrder(orderId)
      {
          item = ItemMicroserice.GetItem();
          user = UserMicroservice.GetUser();
      
          result = new Order()
          {
              OrderId = orderId,
              ItemName = item.Name,
              UserName = user.Name
          }
      
          return result;
      }
      

      您可以注意到有两个对其他微服务的调用将返回数据以构造Order 对象。

      认为您可以看到它在性能方面可能略微不是最佳的。因此,有时微服务确实存储重复信息以便能够更快地构造对象(消除对其他微服务的调用)。例如,如果Users 微服务更新数据,它会向Orders 微服务发送一个事件,以便它可以更新来自其他微服务的缓存数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-03
        • 2020-07-05
        • 2019-10-08
        • 2017-11-30
        • 2017-09-09
        • 2019-01-29
        • 2019-11-11
        • 2020-07-25
        相关资源
        最近更新 更多