微服务架构数据库

时间:2020-05-25 20:10:13

标签: database microservices

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

如果您需要举一个例子,它们是 订购服务 客户服务 产品服务

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

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

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

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

2 个答案:

答案 0 :(得分:1)

选项:

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

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

但是-确定要拆分的原因-您是否期望开发人员群体不断增长且复杂性更高?如果不是这样的话,为您的案例建造整体组件可能会更便宜。

答案 1 :(得分:0)

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

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

通常,微服务不会共享数据库,

因此,如果您有这样的课程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微服务发送事件,以便它可以更新其他微服务中的缓存数据。