在微服务中分组数据

时间:2014-09-13 15:55:18

标签: rest design-patterns soa microservices

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

我们可以将库存管理服务分开并用它来为任何事物创建库存,所以我理想情况下不希望库存管理系统要求用户运行。

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

2 个答案:

答案 0 :(得分:2)

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

  1. '实体'服务必须与所有业务流程无关。
  2. 实体的功能背景'服务不得重叠。
  3. 服务实现中不应该有冗余逻辑。
  4. 如果业务流程不需要,则无需为每个实体创建新服务。
  5. 如果实体之间存在强大的从属关系,则可以引入包含所有绑定实体的聚合以及使用它运行的新服务。
  6. 您可以针对您的解决方案正式检查大部分断言。

    此外,它总是可以将一些服务分成两个新服务。但是,在分析阶段你做出的努力越多,你需要一次分割服务的可能性就越小。

答案 1 :(得分:1)

"服务"行为通常转换为工厂模式实现,无论语义如何。

Api Side:

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)