微服务架构中的规范数据模型

时间:2018-01-09 01:23:28

标签: design-patterns integration microservices soa canonical-schema

让我说我有2个微服务(服务A,服务B)可以互相调用两种方式,让我们说如果A调用B那么A的响应json的一些参数将作为B的请求参数的一些其他参数被消耗

现在我意识到,通过使用Canonical数据模型可以更好地解决这个问题,这样每个服务都会消耗/生成规范数据模型,

我的问题是在这种情况下(json)的规范模型应该如何看起来像

假设A的响应看起来像

{
  "A1": false,
  "A2": {
    "width": 5,
    "height": 10
  },
  "A3": "A green door"
}

并且会有相应的json架构,我不包括在这里

类似B的请求看起来像

{
      "B1": false,
      "B2": {
        "width": 5,
        "height": 10
      },
      "B3": "A green door",
      "B4": ""
       .
       .

    }

属性A1被映射到B1,如果我的规范数据模型仅包含具有某个名称的第一个属性(商业名称:例如 - > A1是得分B1 - >报告然后商业名称可能是 - >要点通常与微服务有关,还是应该更多地是两个json的聚合,每个属性都用相应的商业名称替换?

1 个答案:

答案 0 :(得分:3)

理论上讲,#34;传统"由于每个服务都有其独特的责任域,并且只对来自其特定域的数据进行建模,因此精心设计的微服务架构不应该要求规范数据模型。因此,当服务消耗其他服务时,数据重叠应该是最小的。在使用其他服务时,数据建模的责任在于源而不是消费者。

然而在实践中并非总是如此,例如您必须从类似但不相同的来源提取数据。所以对你的问题 - 如果你发现需要改变服务'将数据转换为规范模型,您可能希望尽快执行单个表示(您的第一个想法)的转换,而不是保留两种表示(您的第二个想法)。这将有助于简化下游的消费(想象一下您需要检查数据结构中多个位置的混乱消费代码)。如果服务在您的控制之下,您可能希望将它们发展为首先在规范模型中提供数据。