web-dev-qa-db-ja.com

flaskビルトインWebサーバーの制限は何ですか

私はWebサーバー管理の初心者です。 flaskビルトインWebサーバーは「本番」用に設計されていないため、テストとデバッグにのみ使用する必要があります...

しかし、アプリがたまにデータをサーバーに送信する1,000人のユーザーにしか触れない場合はどうでしょうか。

それが機能する場合、いつより洗練されたWebサーバーの設定に煩わされる必要がありますか? (おおよその指標を探しています)。

簡単に言えば、組み込みWebサーバーで実行できること(おおよそのしきい値)とできないことを見つけたいと思います。

どうもありがとう !

36
edelans

この質問に対する正しい答えは1つではありませんが、次の点に留意してください。

適切な量​​の水平スケーリングを使用すると、デバッグサーバーの使用を永久にスケールアウトし続けることができます。スケーリングを開始する必要がある場合(または「実際の」Webサーバーの使用に切り替える場合)は、ホストしている環境、ユーザーの期待などにも依存します。

おそらく遭遇する主な問題は、サーバーがシングルスレッドであるということです。これは、各リクエストを1つずつ順番に処理することを意味します。つまり、複数のリクエスト(ファビコン、画像などの静的アイテム、CSSファイル、Javascriptファイルなど)を提供しようとすると、リクエストに時間がかかります。特定のリクエストに長い時間がかかる場合(20秒など)、アプリケーション全体がその時間(20秒)応答しなくなります。もちろんこれはデフォルトに過ぎません。スレッド数を増やす(または他のプロセスでリクエストを処理する)ことができます。これにより、いくつかの問題が軽減される可能性があります。しかし、再び、「高」負荷の下でそれでも遅いことがあります。 「高」負荷と見なされるものは、アプリケーションと最大許容応答時間の予想に依存します。

別の問題はセキュリティです:セキュリティ(アプリケーション自体のデータのセキュリティだけでなく、それを実行するボックスのセキュリティも)について心配する場合は、開発サーバーを使用しないでください。あらゆる種類の攻撃に耐える準備ができていません。

最後に、開発サーバーは完全に失敗する可能性があります。長時間のプロセス(日、週、月)として使用するように設計されていないため、この容量で動作するように十分にテストされていません。

そのため、はい、制限があります。はい、まだ本番環境で使用することができます。もちろん、「実際の」Webサーバーの使用をお勧めします。 ApacheやNginxのようなものをインストールする必要があるという考えが気に入らない場合は、「pythonスクリプトを実行する」と同じくらい簡単なソリューションを使用できます。 WSGIスタンドアロンサーバー 。これは、python run_app.pyコマンドラインで。通常は、サーバーオブジェクトをインポートして作成する4-5行のpythonスクリプトを作成し、Flask app 、実行します。

gunicornは、コマンドラインで次のコマンドを実行するだけで実行でき、追加のスクリプトは必要ありません。

gunicorn myproject:app

...ここで、「myproject」はPython app Flaskオブジェクトを含むパッケージです。

51
Mark Hildreth

OPは長い間続いていますが、将来この質問に遭遇する人のために、ラップトップ上であってもApacheサーバーの設定は無料で非常に簡単であると付け加えます。構成ファイルのコメントを外したり、コメントアウトしたりするだけで、必要な数の機能を簡単に構成できます。それを行うにはもっと簡単なGUI方法があるかもしれませんが、設定を編集するだけで簡単です。

0
Todd Carney