0

シングルコア 1GB RAM Digital Ocean VPS を最適化して、1 秒あたりにより多くのリクエストを処理しようとしています。いくつかの調整 (workers/gzip など) の後、1 秒あたり約 15 のリクエストを処理します。比較するものは何もありませんが、この数値は高くなる可能性があると思います。

スタックは次のように機能します。

VPS -> Docker コンテナー -> nginx (ssl) -> Varnish -> nginx -> uwsgi (Django)

これが長いチェーンであり、Docker がオーバーヘッドを引き起こす可能性があるという事実を認識しています。ただし、ほとんどすべてのリクエストは Varnish で処理できます。

これらは私のテスト結果です:

ab  -kc 100 -n 1000 https://mydomain | grep 'Requests per second'
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Requests per second:    18.87 [#/sec] (mean)

私は実際に3つの質問があります:

  • 1 秒あたり 18.87 リクエストが少ないというのは正しいですか?
  • シンプルな Varnished Django ブログ アプリの場合、適切な値 (指標) は何ですか?
  • このチュートリアルから推奨される調整 (システムに合わせて調整) を既に適用しました。さらに何を微調整できるか、ボトルネックをどのように把握するか。
4

1 に答える 1

2

まず、Docker についていくつかメモします。単一の docker コンテナーで複数のプロセスを実行するためのものではありません。Docker は VM に代わるものではありません。プロセスを分離して実行できるようにするだけです。したがって、docker ダイアグラムは次のようになります。

VPS -> docker nginx container -> docker varnish container -> docker django container

複数の Docker コンテナを簡単に使用するには、Docker-compose を使用することをお勧めします。完璧ではありませんが、素晴らしいスタートです。

それについての古いが、まだ基本的に容赦のないブログ投稿nsenterコマンドが利用可能になったため、一部の提案は関連性がなくなったことに注意してください。ただしdocker exec、ブログ投稿のほとんどはまだ正しいです。


パフォーマンスの問題に関しては、はい、1 秒あたり 18 リクエストはかなり低いです。ただし、この問題はおそらく nginx とは関係なく、おそらく Django アプリケーションとおそらく varnish にあります (ただし、非常にまれです)。

Django で PA の問題をデバッグするには、django-debug-toolbarを使用することをお勧めします。Django の問題のほとんどは、不要な SQL クエリが原因です。これらはデバッグ ツールバーで簡単に確認できます。ほとんどの問題を解決するにはselect_related()、 とを使用できますprefetch_related。より詳細な分析のために、アプリケーションのプロファイリングもお勧めします。cProfileは素晴らしいスタートです。また、PyCharm などの一部の IDE には組み込みのプロファイラーが含まれているため、アプリケーションをプロファイルして、最適化できる最も多くの時間を費やしている関数を確認するのは非常に簡単です。最後に、サードパーティのツールを使用してアプリケーションをプロファイリングできます。無料の newrelicアカウントでもかなりの情報が得られます。または、ブロックの新しいクールな子供であるopbeatを使用できます。

于 2015-12-12T15:55:46.087 に答える