最近、当社の業務システムは、トークン バケット アルゴリズムに基づいて実装された Guava の RateLimiter 電流制限コンポーネントを導入しました。トークン バケットは非常に古典的な電流制限アルゴリズムです。この記事では、いくつかの古典的な電流制限アルゴリズムについて説明します。 電流制限とは何ですか?Wikipedia のコンセプトは次のとおりです。
簡単に訳すと、コンピュータ ネットワークでは、電流制限はネットワーク インターフェイスが要求を送受信する速度を制御することです。これにより、DoS 攻撃を防ぎ、Web クローラーを制限できます。 電流制限、フロー制御とも呼ばれます。これは、システムが高い同時実行性や大量のトラフィック要求に直面した場合、システムの安定性を確保するために、システムへの新しい要求のアクセスを制限することを意味します。現在の制限により、一部のユーザー リクエストが予定より遅れて処理されたり拒否されたりするため、ユーザー エクスペリエンスに影響します。したがって、通常はシステムの安定性とユーザー エクスペリエンスのバランスを取る必要があります。実際の例を見てみましょう。 ★人気の観光スポットでは、1日あたりの観光客の入場人数に制限を設けているところもあります。チケットは1日あたり5,000枚など、一定枚数のみ販売されます。メーデーや国慶節の連休中に遅く行くと、その日のチケットが売り切れていて、入場して遊ぶことができない場合があります。たとえ入場できたとしても、行列が長すぎて自分の命が危ぶまれるほどです。 ” 一般的な電流制限アルゴリズム固定ウィンドウ電流制限アルゴリズムまず、カウンターを維持し、単位時間をウィンドウとして扱います。カウンターは、このウィンドウで受信されたリクエストの数を記録します。
単位時間が 1 秒、電流制限しきい値が 3 であると仮定します。 1 秒の単位時間内の各リクエストごとに、カウンターは 1 ずつ増加します。カウンターの累積回数が現在の制限しきい値の 3 を超えると、後続のすべてのリクエストは拒否されます。 1 秒が経過すると、カウンターは 0 にクリアされ、再びカウントを開始します。以下のように表示されます。 疑似コードは次のとおりです。
しかし、このアルゴリズムには明らかな重大な問題があります。現在の制限しきい値が 5 リクエストで、単位時間ウィンドウが 1 秒であると仮定すると、単位時間の最初の 0.8 ~ 1 秒と 1 ~ 1.2 秒にそれぞれ 5 つの同時リクエストを行うとします。いずれも閾値を超えていないものの、0.8~1.2秒で計算すると同時接続数が10にも達し、単位時間1秒あたり5回以下の閾値の定義を超えてしまいます。 スライディングウィンドウ電流制限アルゴリズムスライディング ウィンドウ電流制限は、固定ウィンドウ臨界値の問題を解決します。単位時間を n 個の小期間に分割し、各小期間におけるインターフェースアクセス数を記録し、時間スライドに基づいて期限切れの小期間を削除します。 スライディング ウィンドウ アルゴリズムを図で説明すると次のようになります。 単位時間が依然として 1 秒であると仮定すると、スライディング ウィンドウ アルゴリズムはそれを 5 つの小さな期間に分割します。つまり、スライディング ウィンドウ (単位時間) は 5 つの小さなグリッドに分割されます。各グリッドは 0.2 秒を表します。 0.2 秒ごとに、時間ウィンドウは 1 グリッド右にスライドします。そして、それぞれの小周期には独立したカウンターがあり、リクエストが 0.83 秒で到着すると、0.8 ~ 1.0 秒に対応するカウンターが 1 増加します。 スライディング ウィンドウが重大な問題をどのように解決するかを見てみましょう。 現在の 1 秒以内の制限しきい値が依然として 5 件のリクエストであり、5 件のリクエストが 0.8 ~ 1.0 秒以内 (たとえば 0.9 秒) に発生し、黄色のグリッドに該当すると仮定します。 1.0 秒後、さらに 5 件のリクエストが届き、紫色のボックスに入ります。固定ウィンドウアルゴリズムであれば制限はありませんが、スライディングウィンドウであれば、小さなサイクルごとに 1 つの小さなグリッドを右に移動します。 1.0秒後、右に1つの小さなグリッドに移動します。現在の単位時間は0.2〜1.2秒です。このエリアのリクエストは5の制限を超えており、現在の制限がトリガーされています。実際、紫色のグリッド内のすべてのリクエストは拒否されています。 ヒント: スライディング ウィンドウを分割するグリッド期間が多いほど、スライディング ウィンドウのスクロールがスムーズになり、電流制限の統計がより正確になります。 スライディング ウィンドウ アルゴリズムの疑似コードは次のとおりです。
スライディング ウィンドウ アルゴリズムは固定ウィンドウの重大な問題を解決しますが、現在の制限に達すると、要求は直接かつ激しく拒否されます。この方法では、いくつかのリクエストが失われることになり、実際には製品にとってあまり好ましくありません。 リーキーバケットアルゴリズムリーキー バケット アルゴリズムは、電流制限に直面したときにより柔軟であり、直接的で失礼な拒否はありません。 その原理は非常に単純で、水の注入と漏水のプロセスと考えることができます。漏れやすいバケツには水が任意の速度で流れ込み、水は固定速度で流れ出ます。水がバケツの容量を超えると、あふれて廃棄されます。バケット容量が一定なので、全体のレートが保証されます。
リーキーバケットアルゴリズムの疑似コードは次のとおりです。
通常のトラフィックの間、システムは一定の速度でリクエストを処理します。これが私たちの望む動作です。ただし、トラフィックのバーストが発生した場合、リーキー バケット アルゴリズムは依然として従来の方法でリクエストを処理しますが、これは望ましいことではありません。トラフィックが急増した場合、システムがリクエストをできるだけ早く処理してユーザー エクスペリエンスを向上できることを期待しています。 トークンバケットアルゴリズムバーストトラフィックが発生した場合は、トークン バケット アルゴリズムを使用してフローを制限できます。 トークンバケットアルゴリズムの原理:
リーキーバケットアルゴリズムの疑似コードは次のとおりです。
トークン発行戦略が正しければ、システムの停滞は起こらず、マシンの利用率も向上します。 Guava の RateLimiter 電流制限コンポーネントは、トークン バケット アルゴリズムに基づいて実装されています。 この記事はWeChat公式アカウント「カタツムリを拾う少年」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、カタツムリを採る少年の公式アカウントまでご連絡ください。 |
<<: 図解された Raft コンセンサス アルゴリズム: ログを複製する方法は?
>>: 市場規模は22億を超えるか?教育用ロボットは急速に発展している
世界各国がインダストリー4.0の時代を迎える中、多くの業界団体がプロセス自動化の重要性を認識し始め、...
中国のAI研究者の数は過去10年間で10倍に増加したが、そのほとんどは海外、主に米国に居住している。...
著者についてCtrip アルゴリズムの専門家であるライアンは、パーソナライズされた推奨事項、スマート...
2017年、『エコノミスト』誌は、データが石油を上回り、世界で最も価値のある資源になったと宣言しまし...
[[429712]]この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載した...
最近、著名な国際データ調査機関であるガートナーが「市場ガイド:中国AIスタートアップ」調査レポートを...
科学研究の分野で働く人なら、P/NP 問題についてはある程度聞いたことがあるでしょう。この問題は、ク...
AI 研究の初期の頃から、チェッカー、チェス、囲碁、ポーカーから StarCraft II に至るま...
近年、セキュア アクセス サービス エッジ (SASE) テクノロジーは急速に発展し、産業界で広く使...
▲ 画像出典: IBM IBM Researchは10月24日、人間の脳の動作にヒントを得たというA...
[[430280]]特にリモートワークの増加と労働力不足により従来の労働パターンが変化する中、多くの...
自動運転は爆発的な成長を遂げている最先端分野です。水平的な視点で見ると、BATを含むインターネット大...
[[314175]] 2019-nCoVの最も危険な特徴は人から人へと感染する能力であり、中国では...