首页 > 解决方案 > 一个服务是否应该直接访问另一个服务的数据?

问题描述

我正在为一家使用微服务的小公司实现一个小型 Web 后端系统,但每个服务共享一个中央数据库。

假设我有一个订单服务和一个发票服务。如果我的 Invoice 服务必须读取(而不是修改)一些涉及 Orders 的数据,它应该直接访问 Orders DB 数据,还是应该向 Orders 服务发出 HTTP 请求(进而访问 DB)?

哪个是更好的设计架构?

以下是我的想法:

如果它发出 HTTP 请求,则每个服务都更加孤立,因为它不会触及另一个服务“拥有”的数据。

如果直接从DB读取数据,独立性更高,可以独立部署。如果 Orders 服务失败,Invoice 服务仍然可以运行并正常运行(至少对于依赖于该 Orders 数据的部分而言)。

该操作是只读的。很想听听你的想法。

标签: web-servicesarchitecturemicroservices

解决方案


微服务通常需要拥有自己的数据,因此它们应该独占使用(就查询和写入而言)它们使用的数据库。

直接从数据库读取并不能使它们独立部署:实际上使它们的部署相互依赖,因为更改一个服务想要使用数据的方式往往需要更改和重新部署另一个服务。

确实,服务之间的请求/响应交互意味着时间耦合(它们必须同时运行)。您可以通过将 Orders 服务中的更改发布到 Invoice 服务并让 Invoice 服务在 Invoice 服务的数据库中维护其对 Order 信息的视图来消除这种耦合并使这两个服务实际上是独立的。数据库中的变更数据捕获对此非常有用。


推荐阅读