【问题标题】:Grouping Data in Microservices微服务中的数据分组
【发布时间】:2014-11-07 14:48:09
【问题描述】:
在基于 REST 的微服务架构中,将相关数据分组到单个实体下的正确方法是什么。例如,我们可能有一个用户服务负责管理用户。此外,我们可能有一项服务负责管理为这些用户中的每一个存储的某种数据(让我们假设在这个示例中,我们正在讨论用户的物品/库存)
我们可以分离库存管理服务并使用它来为任何东西创建库存,所以我不希望库存管理系统需要用户才能运行。
是否有一个典型的模式可以提供我正在寻找的分组(多个库存项目给一个所有者)?支持这种架构的其他端点是什么样的?
【问题讨论】:
标签:
rest
design-patterns
soa
microservices
【解决方案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】:
我认为没有任何典型的模式。这取决于您的业务流程和实体之间的关系。但也有一些一般性的说法。
- “实体”服务必须与所有业务流程无关。
- “实体”服务的功能上下文不得重叠。
- 服务实现中不应有冗余逻辑。
- 如果业务流程不需要,则无需为每个实体创建新服务。
- 如果实体之间存在强从属关系,则可以引入包含所有关联实体的聚合以及使用它运行的新服务。
您可以根据您的解决方案正式检查这些断言中的大部分。
此外,始终可以将某些服务拆分为两个新服务。但是,您在分析阶段付出的努力越多,您需要拆分服务的可能性就越小。