1

マシン1にPythonプロセス1があり、マシン2にPythonプロセス2があるとします。どちらのプロセスも同じであり、ロードバランサーによって送信されたデータを処理します。

両方のプロセスがデータベースと対話する必要があります。私の場合はPostgresなので、各プロセスは通信するデータベースを認識している必要があり、各マシンに適切なモデルが必要です。

理想は、接続、データベースモデルの変更、データベースへのリクエストなど、データベース関連のものを処理する別のプロセスを持つことです。プロセス1とプロセス2が行うべきことは、必要なJSONデータがあると言うことです。このテーブルに保存または更新するか、json形式のこのデータが必要です。

不可能を求めているかもしれませんが、分散プロセスが可能な限り最も分離された方法でリレーショナルデータベースと対話することになると、少なくとも生活を少し楽にするPythonソリューションはありますか?

4

2 に答える 2

2

RESTfulインターフェイスの背後にSQLAlchemyを配置できます。

Python REST (Web サービス) フレームワークのPython の推奨事項の単純な RESTful サーバーは次のとおりです。

于 2012-04-06T14:38:34.877 に答える
1

あなたが興味を持っているのがデータベース接続情報であるなら、私は最近このためのサービスを書きました。各プロセスには構成にトークンが設定されており、それらを使用してサービスにデータベース接続情報を照会します。データレイヤーはその情報を使用して接続を作成し、DSNは保存されません。サーバー側では、token->DSNマッピングのディクショナリを維持するだけです。

bpgergoの提案で接続プールを行うこともできますが、それでも認証または識別方法を含める必要があります。そうすれば、ネットワークへの侵入があった場合、悪意のあるクライアントがクライアントの1つになりすますことができない可能性があります。

サービスの実装はいくつかの部分に分かれています。

  • フォームの呼び出しをサポートするRESTfulサービスhttp://192.168.1.100/getConnection?token=mytokenstring
  • 次のようなマッピングを格納するKey-Valueストレージシステム{'mytokenstring': {'dbname': 'db', 'ip': '192.168.1.101', 'user': 'dbuser', 'password': 'password', ..}
    • このシステムはフロントエンドネットワーク上にあるべきではありませんが、Web層が危険にさらされている場合、このアプローチではデータベースの保護は得られません。
  • インスタンス化時に、適切なトークンを使用してdsnを取得し、新しいdb接続を作成するdbオブジェクト。
    • 可能であれば、ページの応答の残りの部分でこの接続オブジェクトを再利用する必要があります。サービスからの応答時間は速くなりますが、db接続にはさらに多くのオーバーヘッドが必要になります。

実装後は、トークンの背後にあるdsn情報を切り替えるときに、スキーマの非互換性を処理するために注意が必要です。トークンをユーザーセッションに固定するなどして、これを解決できる場合があります。

于 2012-04-06T14:46:56.140 に答える