微服务中的数据分组

Posted

技术标签:

【中文标题】微服务中的数据分组【英文标题】:Grouping Data in Microservices 【发布时间】:2014-11-07 14:48:09 【问题描述】:

在基于 REST 的微服务架构中,将相关数据分组到单个实体下的正确方法是什么。例如,我们可能有一个用户服务负责管理用户。此外,我们可能有一项服务负责管理为这些用户中的每一个存储的某种数据(让我们假设在这个示例中,我们正在讨论用户的物品/库存)

我们可以分离库存管理服务并使用它来为任何东西创建库存,所以我不希望库存管理系统需要用户才能运行。

是否有一个典型的模式可以提供我正在寻找的分组(多个库存项目给一个所有者)?支持这种架构的其他端点是什么样的?

【问题讨论】:

【参考方案1】:

“服务”行为通常转化为 Factory 模式实现,无论语义如何。

API 端:

POST: yourapi.com/v1/inventory/add/
DATA: 
  userid: 1,
  products: [
     'Canned Chicken Gizzards',
     'Snake Oil Extract',
     'Evaporated Water'
  ]

工厂类方面:

InventoryFactory->addProduct((object) product)

-- also have a method to add products under a user --

InventoryFactory->addProducts((array) products, userid)

【讨论】:

【参考方案2】:

我认为没有任何典型的模式。这取决于您的业务流程和实体之间的关系。但也有一些一般性的说法。

    “实体”服务必须与所有业务流程无关。 “实体”服务的功能上下文不得重叠。 服务实现中不应有冗余逻辑。 如果业务流程不需要,则无需为每个实体创建新服务。 如果实体之间存在强从属关系,则可以引入包含所有关联实体的聚合以及使用它运行的新服务。

您可以根据您的解决方案正式检查这些断言中的大部分。

此外,始终可以将某些服务拆分为两个新服务。但是,您在分析阶段付出的努力越多,您需要拆分服务的可能性就越小。

【讨论】:

以上是关于微服务中的数据分组的主要内容,如果未能解决你的问题,请参考以下文章

网易蜂巢微服务架构:用RabbitMQ实现轻量级通信(有彩蛋)

云计算与云原生 — 微服务架构 Kong APIGW 完全解析

微服务中的事务管理

微服务中的数据复制

微服务如何与 JHipster 中的其他微服务通信

Chris Richardson微服务翻译:微服务架构中的服务发现