根据我的经验,在微服务之间共享相同的数据不是一个好的做法。
以下是(可能不完整的)一组原因:
-
很难说哪个微服务才是真正的数据所有者。从建筑的角度来看这是不好的
-
模式更改的成本要高得多,因为契约没有很好地定义。例如,如果在一个微服务中删除列,则第二个微服务可能会停止工作,即使第一个微服务的代码已针对更改进行了调整。
在其他情况下,它仍然可以工作,但性能可能会恶化(例如,由第一个微服务的维护者删除索引,因为它与在其中完成的查询无关,可能会导致第二个微服务的性能恶化)
-
如果某个微服务缓存了某些数据,并且可以在同一个微服务的不同实例之间保持数据同步,那么如果另一个微服务直接更新数据库,并且没有将更改通知第一个微服务,则很难保持正确的同步。
-
如果数据库是性能瓶颈,那么如果这些微服务具有不同的可伸缩性策略,那么这两个微服务都将受到影响,特别是难以处理的问题
-
迁移到不同数据库的成本(如果需要的话)将要高得多,因为必须在两个微服务中更改代码
-
如果使用orm,比如jooq(任何需要代码生成的工具),那么很难理解将生成的文件放在哪里?两种微服务?在其中一个里面?如何共享数据模型
-
通常为每个微服务构建的度量会很棘手,因为如果我们测量对数据库中某个表的访问,我们不确定另一个微服务也不会访问该表。
既然这么说了,毕竟这是一个不使用这种做法的建议,从技术上讲,没有理由不使用这种做法。所以最终决定权在你。
我可以从个人经验中说,在我的一个项目中,我们停止了管理微服务之间的共享数据库,从我的观点来看,这是朝着正确方向迈出的一步。