微服务架构设计

Posted

技术标签:

【中文标题】微服务架构设计【英文标题】:Microservice Architecture design 【发布时间】:2018-04-28 12:45:36 【问题描述】:

我对微服务架构没有什么疑问。

假设有微服务 A、B 和 C。 A 将工作的上下文与其所做的其他事情分开,而 B、C 则通过为该工作完成各自的任务来完成该工作。

我有问题。

1.数据库设计

我在这里谈论的是 SQL。 外键的使用简化了很多事情。 但据我了解微服务架构,每个微服务都维护自己的数据,如果需要,必须从该服务中查询数据。

这是否意味着没有外键引用另一个微服务中的表?

2。数据流

我在这里看到有两种方法。

所有查询都使用 jobId 在所有微服务中为作业进行唯一维护。

客户端请求直接转到单个服务以执行任务。为获取作业摘要,客户端查询各个微服务以收集数据并传递给用户。 通过协调微服务做所有事情。客户端请求转到服务 A,然后服务 A 将从所有其他微服务中收集该 jobId 的信息并将其传递给用户。

以上两个必须遵循哪一个,为什么?

【问题讨论】:

【参考方案1】:

您认为微服务理想情况下应该有自己的数据结构,以便它们可以独立部署,这是正确的。然而,有几种设计模式可以帮助您,这并不一定意味着“无 FK”。请参考:

Database per service Sagas API Composition CQRS

上面列出的模式回答了你的两个问题。

【讨论】:

@Kiran,如果您打开答案中的网址,您会发现采用一种或多种建议的模式使得不需要使用 FK。如果您仍然认为是,那么您可能需要检查您的服务设计。 我理解错了你的答案。我会浏览你的链接。谢谢【参考方案2】:

这是否意味着没有外键引用另一个微服务中的表?

不是数据库意义上的。一个微服务可能持有IDs 的远程实体,但不应假设任何关于远程微服务持久性的内容(即数据库类型,它可以是从 SQL 到 NoSQL 的任何东西)。

以上两个必须遵循哪一个,为什么?

这真的取决于。架构有两种类型:编排和编排。他们俩都很好。使用哪一个?只有你可以决定。以下是一些关于它们的博客文章:

Microservices — When to React Vs. Orchestrate Benefits of Microservices - Choreography over Orchestration, Low Coupling and High Cohesion

另外,SO question 的解决方案可能有用。

【讨论】:

感谢您的回复。对于第一个答案,在我们的案例中,所有微服务都使用 mysql。在这种情况下,如果我们使用外键,主表中的 delete 会触发所有其他表中的 delete 将其作为外键引用。但它是微服务的反模式吗?感谢您的链接。我会通过并回来。 @Kiran 这绝对是一种反模式。微服务不共享表或数据库。

以上是关于微服务架构设计的主要内容,如果未能解决你的问题,请参考以下文章

微服务之架构技术选型与设计

微服务改造—架构设计

微服务架构-设计总结

微服务架构设计实践系列之一:序言

微服务架构:成为架构师的第一步,就是先要搞清楚什么是架构设计

微服务架构设计