【问题标题】:How to split many to many tables to achieve loosely coupled Microservice如何拆分多对多表实现松耦合微服务
【发布时间】:2021-09-11 09:16:12
【问题描述】:

我有三个表 Invoice(InvoiceId, Invoicetotoalprice),表投诉(complaintId),表是complaintType(complaintTypeID)。我有两个微服务发票管理和投诉管理。所以表complaintType 是由complaint 表和invoice 表来标识的;发票管理和投诉管理共享图片包含的表格以显示关系。有解决这个问题的模式吗?微服务通信也将通过 API 网关 enter image description here

【问题讨论】:

  • 你能解释一下complaintType表的多对多关系吗?还有哪两个表有关系?,除了这个,order表和invoice或者投诉微服务是什么关系,图中不是很清楚
  • 对不起,我更新了问题

标签: database api rest microservices er-diagrams


【解决方案1】:

有两种方法可以解决此类问题。 第一个也是更容易实现的是将表保存在一个微服务中,在您的情况下,我认为在投诉服务中维护它更有意义,而在发票服务中只保留表的 ID,因此如果您在任何时候需要请求投诉信息您必须通过 id 向投诉服务提出请求。

第二个选项也是最好的,因为这样可以最大限度地减少服务之间的通信并降低它们的耦合度,它是复制表,因此它将是搜索微服务中的两个不同的表,但只有一个微服务将是所有者,在这种情况下,我想将是投诉微服务。因此,当该表中发生任何修改时,投诉微服务将使用一些消息代理(如 kafka)发布消息,发票服务将使用它并更新表,因此两个模型之间不会出现不一致。这样你就可以解耦这两个服务,例如,如果投诉服务器出现故障,它不会影响发票服务

【讨论】:

  • 似乎在微服务中不可能实现第三范式或者必须复制数据。那么这意味着使用微服务我必须使用 NoSQL,对吧?
猜你喜欢
  • 2019-11-01
  • 2018-11-19
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多