一个服务是否应该直接访问另一个服务的数据?

时间:2021-05-01 17:30:02

标签: web-services architecture microservices

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

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

在设计架构方面哪个更好?

这是我的想法:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题