Architecture 具有共享数据库的微服务
我已经建立了两个微服务,它们都具有对共享数据库的读写访问权限。一项服务创建/更新用户详细信息。另一个服务直接从数据库读取用户数据并生成报告。现在的问题是,如果第二个微服务出于某种原因必须更新某些用户数据,我应该使用第一个微服务更新用户数据,还是直接从第二个微服务更新数据库中的用户数据,因为它已经具有对共享数据库的写访问权限。这种用例有最佳实践吗?共享数据库模式被认为是一种反模式,因为您的微服务相互交错,两者都依赖于您的单个数据库 通过将api放在控制流程的服务之上,您可以让其他服务通过其端点收集信息。这会给你更好的隔离Architecture 具有共享数据库的微服务,architecture,microservices,Architecture,Microservices,我已经建立了两个微服务,它们都具有对共享数据库的读写访问权限。一项服务创建/更新用户详细信息。另一个服务直接从数据库读取用户数据并生成报告。现在的问题是,如果第二个微服务出于某种原因必须更新某些用户数据,我应该使用第一个微服务更新用户数据,还是直接从第二个微服务更新数据库中的用户数据,因为它已经具有对共享数据库的写访问权限。这种用例有最佳实践吗?共享数据库模式被认为是一种反模式,因为您的微服务相互交错,两者都依赖于您的单个数据库 通过将api放在控制流程的服务之上,您可以让其他服务通过其端点收集
基本上,这将解决您的问题。如果您有两个微服务需要读写相同的数据来实现其目标,问题不在于您使用什么技术或技术(共享数据库连接或公开REST api),而在于为什么会发生这种情况 在共享数据之前,请考虑以下两个选项:
这一主张确实需要引用。既然可以直接使用db(基本上可以充当api),为什么还要构建api?为什么错过交易?用传统编程语言编写的api可能会像表/视图/存储过程一样发生变化。我希望看到确凿的证据表明,与共享数据库相比,使用api建立多个数据库(具有高可用性和它所需要的所有其他功能)是一种更好的方法,而不仅仅是关于分离关注点的意见。@JanSommer我稍后将发送一些参考资料-您可以自己决定是否信任源。给你一个简单的提示:1)总是有例外,2)在云中为ms设置数据库只是一个简单的表-不是一个麻烦3)一些分布式数据库引擎,虽然从技术上讲,单个数据库不被认为是共享数据库模式,4)事务、触发器、SP在使用合适的ORM时不会丢失,5)访问数据库的支持不如典型(web)API 6)共享数据库模式不能扩展到更多服务;零钱多。对不起,空间不足。我稍后会更新答案,因为这只是介绍。