单个数据库表应该只由单个微服务表示,这是微服务的基本规则吗?我在一次采访中被问到这个问题。我的第一反应是,应该是1比1。但后来我想我想多了,想也许在某些极端情况下,这可能是可以接受的。
那么,单个数据库表应该始终由单个微服务表示,这是微服务的基本规则吗?或者是否存在一些可以接受的边缘情况?如果这是一个基本原则,那么是否有任何类型的标准缩略词包含这个原则?例如,关系数据库具有ACID主体。
这不是一个基本规则。但是,这是管理数据最有效的方式。设计模式并不是一成不变的。你可以选择不同的处理方式。但是,每个微服务都应该是独立的。这就是我们使用微服务架构的原因。但是,假设您使用多个微服务更新一个表,那么它们(服务)就会相互依赖。松耦合不再存在。这些服务将在任何更改发生时相互影响。
这就是为什么,你可能想要遵循以下范例:
- Private-tables-per-service -每个服务拥有一组表
- schema -per-service——每个服务都有一个数据库模式该服务私有
- database -server-per-service -每个服务都有自己的数据库服务器。
更多信息请参考此处的数据管理部分:https://microservices.io/patterns/
它不仅仅是单个微服务的单独数据库,在开发微服务时还需要考虑其他因素,如代码库、配置、日志等。
请参阅下面的链接,详细说明
https://12factor.net/