この記事では、最も単純なものから最も複雑なものまで、Nginx の現在の制限構成を例を使って説明します。これは、簡潔な公式ドキュメントを補足するものです。 Nginx は、リーキー バケット アルゴリズムを使用して電流を制限します。アルゴリズムに興味がある場合は、まず Wikipedia で読んでみてください。ただし、このアルゴリズムを理解していなくても、この記事の読み方には影響はありません。 空のバケツ 最も単純な電流制限構成から始めましょう。 limit_req_zone $binary_remote_addr ゾーン=ip_limit:10m レート=10r/s; サーバー{ 場所 /ログイン/ { limit_req ゾーン=ip_limit; proxy_pass http://login_upstream; } }
レート制限は 1 秒あたり 10 リクエストです。アイドル状態の nginx に 10 リクエストが同時に到着した場合、それらはすべて実行できますか? リーキー バケットは、一定の割合でリクエストをリークします。 10r/s が一定速度であるのはなぜですか? 100 ミリ秒ごとに 1 つのリクエストがリークされます。 この構成では、バケットは空であり、リアルタイムでリークできないすべてのリクエストは拒否されます。 したがって、10 件のリクエストが同時に到着した場合、実行できるのは 1 件のリクエストのみで、他のリクエストは拒否されます。 これはあまり親切ではありません。ほとんどのビジネス シナリオでは、これらの 10 個のリクエストが実行できることが期待されます。 バースト 前のセクションの問題を解決するために設定を変更してみましょう。 limit_req_zone $binary_remote_addr ゾーン=ip_limit:10m レート=10r/s; サーバー{ 場所 /ログイン/ { limit_req ゾーン=ip_limit バースト=12; proxy_pass http://login_upstream; } } burst=12 リーキーバケットのサイズは12に設定されます 論理的にはリーキー バケットと呼ばれ、実行できないリクエストを一時的にキャッシュする FIFO キューとして実装されます。 この方法により、リーク速度はリクエストあたり 100 ミリ秒のままですが、一時的に実行できない同時リクエストを最初にキャッシュすることができます。キューがいっぱいになった場合にのみ、新しいリクエストは拒否されます。 このように、リーキーバケツは流れを制限するだけでなく、ピークの低減と谷の埋め立ての役割も果たします。 この構成では、10 個のリクエストが同時に到着した場合、それらは 100 ミリ秒ごとに 1 つずつ順番に実行されます。 実行はされましたが、キュー実行により遅延が大幅に増加し、多くのシナリオでは依然として許容できない状態です。 遅延なし 遅延が長すぎることによる遅延の増加の問題を解決するために、構成の変更を続けます。 limit_req_zone $binary_remote_addr ゾーン=ip_limit:10m レート=10r/s; サーバー{ 場所 /ログイン/ { limit_req ゾーン=ip_limit バースト=12 ノードレイ; proxy_pass http://login_upstream; } } Nodelay は、リクエストの実行を開始する時間を早めます。以前は、リクエストがバケットから漏れるまで実行が遅延されていました。現在は遅延がなく、リクエストがバケットに入るとすぐに実行が開始されます。 すぐに実行されるか拒否されるかのいずれかであり、電流制限により要求が遅延されることはありません。 リクエストは均一な速度でバケットから漏れ、バケットのスペースは固定されているため、平均して 1 秒あたり 5 件のリクエストが実行され、現在の制限の目的は達成されます。 しかし、これには欠点もあります。フローには制限がありますが、その制限はそれほど均一ではありません。上記の構成を例にとると、12 件のリクエストが同時に到着した場合、これらの 12 件のリクエストはすぐに実行され、後続のリクエストは均一な速度でのみバケットに入り、100 ミリ秒ごとに 1 件のリクエストが実行されます。一定期間リクエストがなく、バケットが空の場合、12 個の同時リクエストが同時に実行される可能性があります。 ほとんどの場合、この不均一な電流制限は大きな問題にはなりません。ただし、nginx には同時実行数を制御するパラメータ、つまり nodelay リクエストも用意されています。 limit_req_zone $binary_remote_addr ゾーン=ip_limit:10m レート=10r/s; サーバー{ 場所 /ログイン/ { limit_req ゾーン=ip_limit バースト=12 遅延=4; proxy_pass http://login_upstream; } } delay=4 はバケット内の5番目のリクエストから遅延を開始します このように、遅延パラメータの値を制御することで、同時に実行できるリクエストの数を調整し、リクエストをより均等に分散することができます。一部のリソースを消費するサービスでは、この数を制御する必要があります。 参照 nginx.org/en/docs/http/ngx_http_limit_req_module.html を参照してください。 要約する 上記は、編集者が紹介したNginxの現在の制限設定です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0 の新機能の落とし穴と解決策についての簡単な説明 (要約)
>>: Angularルーティングアニメーションと高度なアニメーション機能の詳細な説明
1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...
序文Nodejs はサーバーサイド言語です。開発中、登録やログインなどでは、判断のためにフォームを通...
この記事では、棒グラフの動的な表示を実現するためのvue echartsの具体的なコードを参考までに...
<br />当サイトのオリジナルコンテンツですので、転載の際は出典を123WORDPRE...
序文今日、nginx で非常に奇妙な問題に遭遇しました。フロントエンドの tomcat がページにジ...
1. データベース トランザクションによりデータベースのパフォーマンスが低下します。データの一貫性と...
1. Nginxのインストール手順1.1 公式サイトの紹介http://nginx.org/en/d...
目次1. オプションの連鎖2. NULL値の結合3. 再帰型エイリアス4. アサーション署名5. P...
目次1. 正規表現の作成2. 使用モード2.1 シンプルモードの使用2.2 特殊文字の使用3. 応用...
この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...
1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...
SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...
目次1. 大文字と小文字の区別を決定するパラメータ2. パラメータ変更に関する注意事項要約: 1. ...
1. マスタースレーブレプリケーションとは何ですか?マスター データベースの DDL および DML...
React は Vue とは異なります。ルートにメタ文字を設定することでルートインターセプションを実...