有没有任何Python解决方案可以让分布式进程以最不耦合的方式与关系数据库交互?

2024-05-23 15:12:13 发布

您现在位置:Python中文网/ 问答频道 /正文

假设机器1上有Python进程1,机器2上有Python进程2。两个进程是相同的,并且进程数据由负载平衡器发送。在

这两个进程都需要与一个数据库交互——在我的例子中是Postgres,因此每个进程都需要知道它应该与哪个数据库通信,它需要在每台机器上有正确的模型等等。这只是耦合太紧密了。在

我需要在JSON数据库中保存一些数据,或者说我需要在数据库中保存一些数据。在

也许我在问一个不可能的问题,但是有没有任何Python解决方案可以让分布式进程以最不耦合的方式与关系数据库交互时,至少让生活变得简单一点?在


Tags: 数据模型机器数据库json进程方式分布式
2条回答

您可以在RESTful接口后面放置一个SQLAlchemy。在

这是一个用Python Recommendations of Python REST (web services) framework?编写的简单RESTful服务器

如果您感兴趣的是数据库连接信息,我最近为此编写了一个服务。每个进程在配置中都设置了令牌,并使用这些令牌来查询服务中的db连接信息。数据层使用该信息创建连接,不存储DSN。在服务器端,您只需维护一个token->;DSN映射的字典。在

您可以按照bpgergo的建议进行连接池,但仍应包括身份验证或标识方法。这样,如果有网络入侵,恶意客户端可能无法模拟其中一个客户端。在

服务实现分为几个部分:

  • 支持http://192.168.1.100/getConnection?token=mytokenstring形式调用的RESTful服务
  • 一种存储映射的键值存储系统,如{'mytokenstring': {'dbname': 'db', 'ip': '192.168.1.101', 'user': 'dbuser', 'password': 'password', ..}
    • 这个系统不应该在前端网络上,但是如果你的web层被破坏了,这种方法不会给你的数据库带来任何保护。在
  • 一种db对象,在实例化时,使用适当的令牌检索dsn并创建新的db连接。
    • 如果可以的话,应该在页面响应的其余部分重用此连接对象。服务的响应时间会很快,但是数据库连接需要更多的开销。在

一旦实现,在令牌后面切换dsn信息时,需要小心处理模式不兼容问题。您可以通过将令牌固定到用户会话等来解决此问题

相关问题 更多 >