假设我在机器1上有Python进程1,在机器2上有Python进程2.这两个进程是相同的,并且由负载均衡器发送过程数据。
这两个进程都需要与数据库进行交互 - 在我的例子中是Postgres,因此每个进程都需要知道它应该与哪个数据库通信,它需要在每台机器上都有正确的模型等。它只是耦合得过于紧密。
理想的做法是让一个单独的进程处理数据库之类的东西,比如连接,跟上数据库模型的变化,对数据库的请求等等。我的进程1和进程2应该做的只是说我有一些JSON数据需要在此表上保存或更新,或者我需要以json格式的数据。
也许我问的是不可能的,但是有没有任何Python解决方案,至少可以让分布式流程以最分离的方式与关系数据库进行交互,从而使生活更轻松一些?
答案 0 :(得分:2)
您可以在SQLAlchemy界面后面添加RESTful。
这是Python Recommendations of Python REST (web services) framework?
中的简单RESTful服务器答案 1 :(得分:1)
如果它是您感兴趣的数据库连接信息,我最近为此编写了一个服务。每个进程都在配置中设置了令牌,并使用这些令牌查询服务以获取数据库连接信息。数据层使用该信息创建连接,不存储任何DSN。在服务器端,您只需维护令牌 - > DSN映射字典。
您可以使用bpgergo的建议进行连接池,但您仍应包含身份验证或识别方法。这样,如果存在网络入侵,恶意客户端可能无法冒充其中一个客户端。
服务实现分为几个部分:
http://192.168.1.100/getConnection?token=mytokenstring
{'mytokenstring': {'dbname': 'db', 'ip': '192.168.1.101', 'user': 'dbuser', 'password': 'password', ..}
等映射的键值存储系统
实施后,在令牌后面切换dsn信息时,需要注意处理架构不兼容问题。您可以通过将令牌固定到用户会话等来解决此问题。