单个数据库 table 应该只由单个微服务表示,这是微服务的基本规则吗?

is it a cardinal rule of microservices that a single database table should only be represented by a single microservice?

单个数据库 table 应该仅由单个微服务表示,这是微服务的基本规则吗?我在一次采访中被问到。我的第一反应是它应该只是 1 比 1。但后来我想我想多了,认为可能有一些边缘情况可能是 acceptable.

那么,单个数据库 table 应该始终由单个微服务表示,这是微服务的基本规则吗?或者是否有一些边缘情况可能会被接受table?如果这是基本规则,那么是否有任何类型的标准首字母缩写词包含该原则?例如,关系数据库具有 ACID 主体。

这不是基本规则。但是,这是管理数据的最有效方式。设计模式不是一成不变的。您可以选择以不同的方式处理事情。 但是,每个微服务应该是独立的。这就是我们使用微服务架构的原因。但是,假设您使用多个微服务更新 table,那么它们(服务)就会变得相互依赖。松耦合不再存在。只要发生变化,这些服务就会相互影响。

这就是为什么您可能需要遵循以下范例:

  1. Private-tables-per-service – 每个服务拥有一组 tables 只能由该服务访问。
  2. Schema-per-service – 每个服务都有一个数据库模式 该服务专用
  3. Database-server-per-service – 每个服务都有自己的数据库 服务器。

更多信息请参考这里的数据管理部分:https://microservices.io/patterns/

它不仅仅是一个单独的微服务数据库,在开发微服务时还需要考虑其他因素,如代码库、配置、日志等

下面link有详细说明

https://12factor.net/