2

Python を複数のコンピューターの複数のプロセッサに分散させたい場合、どのような方法が最善でしょうか? 3 つの 8 コア サーバーがある場合、24 の Python プロセスを実行する必要があります。私はmultiprocessing ライブラリを使用しますが、オブジェクトを共有するには、マネージャーを使用するのが最善の方法のようです。すべてのノードを 1 つの大きなプロセスとして連携させたいので、1 つのマネージャーが理想的ですが、それではサーバーに単一障害点が生じます。より良い解決策はありますか?マネージャーのオブジェクト ストアを複製することは良い考えでしょうか?

また、管理者がすべてのデータベース クエリを実行する場合、データベースと同じマシンに管理者を配置することは理にかなっていますか?

4

3 に答える 3

3

どのようなものを提供しているか、どのようなデータベースを使用するか、どのようなレイテンシ/スループット要件があるかなど、より多くの情報が役立つと思います。多くのものは要件によって異なります。システムが読み取りが多く、書き込みがそれほど多くない典型的なサーバーであり、わずかに古いデータの読み取りに問題がない場合は、各プロセスのキャッシュに対してローカル読み取りを実行し、書き込みをプッシュするだけで済みます。データベース、結果をキャッシュにブロードキャストします。

まず、マネージャーが何をしなければならないかによると思います。結局のところ、システムが非常に些細なもので、壊滅的なハードウェア障害がなければ障害が発生しない場合は、単一障害点について心配しても意味がありません。ただし、1 つしかない場合は、データベースと同じマシンに配置するのが理にかなっています。レイテンシーを減らしても、一方がダウンしてもう一方がダウンした場合、システムは生き残れません。

于 2009-01-13T22:38:10.907 に答える
3

プロセスの分散には、次の 2 つの主な課題があります。

  1. 分割、分散、および再収集される作業を調整する (マッピングおよび削減と言うかもしれません)
  2. 相互に依存するプロセス間で適切なライブ データを共有する

#1 に対する答えは、実行している処理の種類によって大きく異なります。簡単に水平分割できる場合 (つまり、大きなタスクをいくつかの独立した小さなタスクに分割できる場合)、 HAProxyのようなロード バランサーが負荷を分散する便利な方法かもしれません。

タスクが簡単に水平に分割できない場合は、まずHadoopなどの既存のツールが機能するかどうかを確認します。分散タスク管理は、正しく行うのが難しい作業であり、車輪はすでに発明されています。

#2 については、プロセス間で状態を共有する場合、絶対最小値を共有し、それを明示的かつ明確に定義された方法でのみ共有すると、作業がずっと楽になります。個人的には、最小のタスクであっても、選択した RDBMS に支えられたSQLAlchemyを使用します。クエリ インターフェイスは強力であり、小規模プロジェクトでも大規模プロジェクトでも問題なく使用できます。

于 2009-01-13T22:45:17.333 に答える
0

あなたの質問の要点は、オブジェクトと状態を共有する方法です。より多くの情報、特にサイズ、頻度、変化率、およびデータのソースが非常に役立ちます。

マシン間の共有メモリについては、おそらくmemcachedを見たいと思うでしょう。データを保存して、任意のワーカー プロセスからすばやく簡単にアクセスできます。

シナリオがより単純なジョブ分散モデルである場合は、キュー サーバーを検討することをお勧めします。ジョブとそれに関連するデータをキューに入れ、ワーカーがキューからジョブを取得するようにします。Beanstalkdはおそらくキューに適した選択肢であり、ここに入門チュートリアルがあります。

于 2009-01-14T07:48:08.610 に答える