Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django rest框架跨微服务共享数据库关系_Python_Django_Database_Django Rest Framework_Microservices - Fatal编程技术网

Python 使用Django rest框架跨微服务共享数据库关系

Python 使用Django rest框架跨微服务共享数据库关系,python,django,database,django-rest-framework,microservices,Python,Django,Database,Django Rest Framework,Microservices,我有两个django REST API项目,我已将它们解耦到微服务体系结构中,其中一个是处理身份验证(我使用基于JWT令牌的身份验证)和管理用户信息的(SSO)服务,另一个是工资单服务 问题是用户与工资单服务中的某个模型有关系。具体来说,我在工资单服务中有一个Employee类,它有一个user\u id字段。在这里,我将添加一个用户UUID,我将从查询SSO服务中获得该用户 考虑到每个服务都有自己的数据库,如何跨micro服务共享数据库 不建议在有边界的上下文中共享数据库,因为每个微服务都应该

我有两个django REST API项目,我已将它们解耦到微服务体系结构中,其中一个是处理身份验证(我使用基于JWT令牌的身份验证)和管理用户信息的(SSO)服务,另一个是工资单服务

问题是
用户
与工资单服务中的某个模型有关系。具体来说,我在工资单服务中有一个
Employee
类,它有一个
user\u id
字段。在这里,我将添加一个用户
UUID
,我将从查询SSO服务中获得该用户


考虑到每个服务都有自己的数据库,如何跨micro服务共享数据库

不建议在有边界的上下文中共享数据库,因为每个微服务都应该能够更改其保存数据的方式。 允许多个微服务管理数据库将导致您陷入死星陷阱模式

但是,您可能希望将身份验证上下文中的用户数据副本/更新发送到您的工资单服务。这样,你就可以 拥有独立的数据持久性策略。实现这一点的一种方法是在身份验证上下文上实施事件发射策略, 此事件发射策略将负责广播在用户居住的身份验证上下文上所做的数据更改
另一个有边界的上下文可以侦听,以便它们可以在自己的持久层上存储用户数据的副本。

如果您确实需要从一个服务访问两个数据库,Django确实支持配置;这不适合您的用例吗?虽然在我看来,在使用微服务时,从身份验证服务的端点获取所需的任何用户数据可能更合适,而不是直接到数据库破坏体系结构。在服务之间共享数据库通常被认为不是一个好的选择。但最后,这取决于程序员。以下两篇文章对这两种模式进行了广泛的解释。这将帮助你做出决定。最后,如果您想共享数据库,Django支持@kungpu提到的多个数据库的配置