2012-04-04 19 views
2

私は、非常に大きな有向グラフ(それぞれ500万ノード以上、平均30アウトバウンドエッジ)で幅広い最初の検索を含むBaconタイプのWebサイトを作成しています。これは本質的にすべてのサイトで行われますが、表示の他にほとんどテキストページ(それがどのように動作するか、連絡先情報など)があります。私は現在、Pythonで実行されているテスト実装を持っていますが、効率的にデータを表現するためにPython配列を使用しても、全体を保持するには1.5GB以上のRAMが必要です。明らかに、Pythonはこのような低レベルのアルゴリズム問題に対しては間違った言語ですので、Python/Cバインディングを使用してC言語のほとんどを書き直す予定です。私はこれが約300 MBのRAMを取ると推定しています。大規模なmod_wsgiアプリケーションを使用したApacheサーバーインスタンスの最大化

現在の設定に基づいて、これはmpm_worker_moduleを使用するように設定されたapache 2.2.14のmod_wsgiを介して実行されます。それぞれの子Apacheサーバは、Python全体の設定(C拡張をロードする)を300 mbでロードし、4 GBのRAMしか持たない。これはロードするのに時間がかかります。そうしないと、サーバーインスタンスの数が潜在的に少なくなる可能性があります。私が正しく理解していれば、このようなデータ重い(そしてクライアント対話重視ではない)タスクは、通常、SQLデータベースや、すべてのサーバープロセスが照会できるソートなどを設定することによって、サーバーから離脱することになります。しかし、私のニーズに合ったデータベースフレームワークはわかりません。

だから、どのように進めますか?データベースをWebサーバーから離して設定しようとするのは価値があるのでしょうか。それとも、何か他の方法では、mod_wsgiよりもさらに遠くにアプリケーションを移動させます。もしそうなら、どのようにこれを行うことができますか?

私の最初の印象は、サーバーではなくデータベースが常に制限要因になることです。典型的なApacheのmpm_worker_module構成はServerLimit 16を持っているようですので、おそらくさらにいくつかのサーバーしか入手できません。そして、もし私がサーバーからデータベースを離婚したら、データベースの複数のインスタンスを実行するための何らかの方法も必要です(私は既にサポートしたいトラフィックレベルではそれをカットしないでしょう)それらをサーバーで使いやすくする。だから私はたぶん私自身の質問にほとんど答えましたが、これは奇妙な状況なので、誰かがそれにしっかりと対処しているかどうかを見る価値があると思いました。私が行方不明のものは何ですか?この実装は理にかなっていますか?前もって感謝します!

技術的な詳細:Ubuntu 10.4でApache 2.2.14を使用して提供するDjangoのWebサイトです。

答えて

1

まず、mod_wsgiのデーモンモードを見て、組み込みモードを使用しないと、Apacheの子プロセスとは別にPython WSGIアプリケーションプロセスの数を制御できます。第二に、メモリの空いたビットを別々のバックエンドプロセスに入れる方が良いでしょう。バックエンド・プロセスと通信するためにXML-RPCやその他のメッセージ・キューイング・システムを使用したり、何らかの方法でCeleryを使用できるかどうかを確認することもできます。

+0

私はすでにデーモンモードになっていると思いますが、その機能を持っているかどうかはわかりませんでした。私はそれを深く見なければならないでしょう、そして私は将来のために他の提案を念頭に置いていきます。ありがとう、それはとても役に立ちました! – TomNysetvold

+0

あなたの説明に基づいて私はデーモンモードを使用していないことを示唆しています。デーモンモードがどのように動作するのか、それともあなたの理解は間違っています。使用しているものを確認するには、http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode –

関連する問題