Database 微服务体系结构数据库

Database 微服务体系结构数据库,database,microservices,Database,Microservices,我研究微服务架构已经有一段时间了。但我有几个问题要问 如果你需要举个例子,他们是 订单服务 客户服务 产品服务 假设上面有3个微服务。他们正在使用关系数据库 我在订单服务中列出订单。但我也必须在这里收集客户信息 如果这是一个单细胞结构,我可以用join来处理它。但在microservis体系结构中如何做到这一点呢 注意:我没有做任何项目。我的目标只是了解微服务体系结构。选项: 限制orderservice和customerservice之间的依赖关系:通常情况下,订单是一个自包含对象,其中包含

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

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

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

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

如果这是一个单细胞结构,我可以用join来处理它。但在microservis体系结构中如何做到这一点呢

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

选项:

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

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

但是-决定为什么要拆分它-您是否希望开发人员基础不断增长,复杂性越来越高?如果不是的话,为你的案子建造一个整体可能会更便宜

但在microservis体系结构中如何做到这一点呢

只需致电另一个微服务并询问所需的其他信息

正如您所注意到的,通常微服务不共享数据库

所以如果你有一个类
顺序
,就像这样

class Order
{
    OrderId;
    ItemName;
    UserName;
}
GetOrder(orderId)
{
    item = ItemMicroserice.GetItem();
    user = UserMicroservice.GetUser();

    result = new Order()
    {
        OrderId = orderId,
        ItemName = item.Name,
        UserName = user.Name
    }

    return result;
}
还有一个方法,它返回一个order
GetOrder(id)
如下

class Order
{
    OrderId;
    ItemName;
    UserName;
}
GetOrder(orderId)
{
    item = ItemMicroserice.GetItem();
    user = UserMicroservice.GetUser();

    result = new Order()
    {
        OrderId = orderId,
        ItemName = item.Name,
        UserName = user.Name
    }

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

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