私は、非常に大きな有向グラフ (500 万を超えるノード、平均でおそらく 30 のアウトバウンド エッジ) での幅優先検索を含む、オラクル オブ ベーコン タイプの Web サイトを作成しています。これは基本的にサイトが行うすべてのことですが、いくつかのほとんどがテキスト ページ (仕組み、連絡先情報など) を表示することは別として。現在、Python でテスト実装を実行していますが、データを効率的に表現するために Python 配列を使用しても、全体を保持するには 1.5 GB を超える RAM が必要です。明らかに Python は、このような低レベルのアルゴリズムの問題には不適切な言語です。そのため、Python/C バインディングを使用して、そのほとんどを C で書き直す予定です。これには約 300 MB の RAM が必要になると見積もっています。
私の現在の構成に基づいて、これは mpm_worker_module を使用するように設定されている apache 2.2.14 の mod_wsgi を介して実行されます。次に、各子ApacheサーバーはPythonセットアップ全体をロードし(C拡張をロードします)、300 MBを使用し、RAMは4GBしかありません。これは読み込みに時間がかかり、サーバー インスタンスの数を他の方法よりも少なく保つ可能性があるようです。私の理解が正しければ、このようなデータを多用する (クライアントとのやり取りを多用しない) タスクは、通常、SQL データベースまたはすべてのサーバー プロセスが照会できるようなものをセットアップすることによって、サーバーから切り離されます。しかし、自分のニーズに合ったデータベース フレームワークを知りません。
それで、どのように進めるのですか?Web サーバーから切り離されたデータベースをセットアップしたり、他の方法でアプリケーションを mod_wsgi よりも遠くに移動して、さらにいくつかのサーバー インスタンスを実行することは価値がありますか? もしそうなら、どうすればこれを行うことができますか?
私の第一印象は、サーバーではなくデータベースが常に制限要因になるということです。とにかく、典型的なApache mpm_worker_module構成にはServerLimit 16があるように見えるので、おそらくあと数台のサーバーしか取得できないでしょう。また、データベースをサーバーから分離した場合は、データベースの複数のインスタンスを実行する方法も必要になります (1 つだけでは、サポートしたいトラフィック レベルに対応できない可能性があることは既にわかっています)。それらがサーバーでうまくいくようにします。それで、私はおそらく自分の質問にほとんど答えましたが、これは一種の奇妙な状況なので、誰かがそれをよりしっかりと扱っているかどうか見る価値があると思いました. 不足しているものはありますか?この実装は理にかなっていますか? 前もって感謝します!
技術的な詳細: これは、Ubuntu 10.4 で Apache 2.2.14 を使用してサービスを提供する Django Web サイトです。