2

私は実際には何の問題もありません。ちょっと興味があるだけです。ボトル ( http://bottlepy.org/ )に基づいて Python Web フレームワークを作成します。今日は、ボトル WSGI サーバーと apache サーバーのパフォーマンスを比較するために少し比較を試みます。apache 2、python 2.7、ボトル開発バージョン (0.12) を使用して、lubuntu 12.04 で作業し、次の驚くべき結果を得ました。

左: Apache、右: ボトル WSGI

ボトルのドキュメントに記載されているように、含まれている WSGI サーバーは開発目的のみを目的としています。問題は、開発サーバーが展開サーバー (apache) よりも速いのはなぜですか?

私の知る限り、開発サーバーは「デバッグ」機能を提供するため、通常は低速です。

また、PHP アプリケーションを開発しているときに、100 ミリ秒未満で応答がないことはありません。しかし、ほら、ボトル内でわずか13ミリ秒です。 ボトルは非常に速い応答を提供します

誰でもこれを説明できますか?これは私には意味がありません。展開サーバーは、開発サーバーよりも高速である必要があります。

4

2 に答える 2

1

開発用サーバーは必ずしも本番用サーバーよりも高速であるとは限らないため、このような回答は少し誤解を招きます。

この場合の本当の理由は、プロセスにヒットした最初のリクエストでの Web アプリケーションの遅延ロードが原因である可能性があります。特に、Apache を正しく構成しないと、サイトに多くのトラフィックがない場合、この遅延読み込みにかなりの時間がかかる可能性があります。

これらの問題のいくつかを扱っている私の PyCon トークを見に行くことをお勧めします。

特に prefork MPM を使用していないことを確認してください。優先的に mod_wsgi デーモン モードを使用します。

于 2013-08-10T07:49:47.740 に答える
0

展開サーバーは、開発サーバーよりも高速である必要があります。

真実。そして、それは一般的に高速です...「典型的な」Webサーバー環境では。これをテストするには、20 の同時クライアントをスピンアップして、サーバーの各バージョンに対して継続的な要求を行うようにします。一度に 1 つのリクエストしかテストしていないことがわかります。これは、典型的な Web 環境ではありません。1 秒あたり数十または数百の同時リクエストで、異なる結果が表示されると思います (ここではレイテンシーとスループットの両方を考えています)。

別の言い方をすれば、1 秒あたり 10、20、100 リクエストの場合でも、Apache からは最大 200 ミリ秒のレイテンシが発生する可能性がありますが、Bottle のサーバーからのレイテンシはさらに悪化します。

ちなみに、Bottle のドキュメントでは並行性について言及しています

組み込みのデフォルト サーバーは、wsgiref WSGIServer に基づいています。この 非スレッドHTTP サーバーは、開発や初期の運用にはまったく問題ありませんが、サーバーの負荷が増加するとパフォーマンスのボトルネックになる可能性があります。

また、Apache は Bottle 参照サーバーよりも多くのことを行っており (.htaccess ファイルのチェック、子プロセス/スレッドへのディスパッチ、堅牢なログ記録など)、これらすべての機能が必然的にリクエストのレイテンシーに追加されることにも注意してください。

最後に、Apache のインストールを調整したかどうかお尋ねします。MPM の調整、ロギングの簡素化、.htaccess チェックの無効化などにより、現在よりも高速になるように構成できる可能性があります。

お役に立てれば。また、並行ベンチマークを実行する場合は、結果を共有してください。

于 2013-08-10T05:24:10.687 に答える