每个微服务的数据库

Database for every microservice

同一个项目中的几个微服务是否可以共享同一个数据库?例如,我正在使用 MongoDB 并且我正在使用一些需要数据库的微服务,我应该为每个微服务使用一个集合吗?或者只是为每个微服务创建新的数据库?有什么建议吗?

通常建议每个服务都有一个数据库,但是根据手头的具体问题可能会有例外。你的问题没有足够的细节来提供除一般性建议之外的任何内容。

每个服务的数据库有多个优点。

  1. 因为每个微服务都是可独立部署的。它可以更改数据库模式而不破坏其他服务。

  2. 数据的所有权边界清晰,没有两个服务写入相同的数据。如果需要访问其他服务拥有的数据,可以使用模式(物化视图、REST 端点公开数据、使用队列的最终一致性)来解决该问题。

  3. 根据一个微服务的数据量generated\managed,数据库可以独立扩展(分片、只读副本)。

每个服务的数据库也面临重大挑战(多个服务管理开销,无 ACID 事务),始终建议从模块化单体开始,并根据业务需求划分服务。

参考资料 https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/distributed-data