【发布时间】:2017-12-19 15:09:11
【问题描述】:
根据bounded context,我们确定了两种微服务实现,我们分别称它们为Service A和Service B。这些微服务中的每一个都有不同的存储库(由于单一职责和更好的所有权的好处)。现在,这些存储库中的每一个都使用自己的数据库架构(选择是为了更好地分离持久性并减少数据库实例的维护)。
之前,我们将数据库迁移脚本(用于持续交付)提取到单独的单个存储库(包含 Service A 和 Service B 的架构的脚本)并在 CI 下的单个作业下运行它们。现在,随着我们处理更多故事,我们开始面临一些挑战,其中一些如下所列:
- 对单个架构的更改会触发整个数据库的构建,从而触发所有微服务的下游触发,从而增加我们的反馈时间
- 我们通常无法实现
true持续交付,因为架构更改还需要对Service代码进行相应更改,因此需要谨慎部署PRs - 此外,还有一些常见的表,例如
Users,这两种模式都需要使用,目前这两种模式都在复制这些表。
所以我的问题/疑问是:
- 我们是否应该像服务一样根据架构分离数据库迁移存储库。
- 我们是否应该为数据库迁移脚本设置单独的存储库?我们是否应该在他们各自的
Service存储库代码中加入它们? - 我们是否应该进一步提取公用表
a level up并为Eventual Consistency提高Domain Events
任何指针/建议都会有很大帮助。谢谢。
【问题讨论】:
标签: github database-design relational-database microservices continuous-delivery