微服务架构设计
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 这绝对是一种反模式。微服务不共享表或数据库。以上是关于微服务架构设计的主要内容,如果未能解决你的问题,请参考以下文章