最近、当社の業務システムは、トークン バケット アルゴリズムに基づいて実装された 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億を超えるか?教育用ロボットは急速に発展している
[[425806]]多様なアクセラレータ セットでトレーニングされた大規模で複雑なニューラル ネット...
1. 業界背景スマートフォン業界は、典型的なハードウェア製造業として、人々の生活に密接に関係していま...
近年、科学技術の進歩に牽引され、知能ロボットは目覚ましい発展を遂げています。チップ、視覚システム、セ...
スーパーコンピュータは、従来のコンピュータでは解決できない問題を解決するためによく使用されます。しか...
このコースでは、ナレッジグラフ技術の開発動向、機械学習に基づくラベルグラフ技術のアイデア、主要技術の...
海外メディアの報道によると、アップルは最近シアトルの人工知能研究開発センターのオフィススペースを拡大...
人工知能にはさまざまなものがあります。コンピューターを使って知的なことを行うこともあれば、コンピュー...
OpenAIが2022年11月にChatGPTをリリースした後、GPT-4やEU AI法案からAI検...
専門家や業界関係者は、人工知能がさまざまな業界や分野に広く浸透するにつれ、現場の応用に重点を置き基礎...
人工知能技術の進歩により、あらゆる生活がこの技術によって変化し始めています。近い将来、人工知能技術の...
技術の進歩は、驚くべき速さでビジネスモデルを破壊する可能性があります。したがって、ビジネスリーダーに...
この記事では、ハッシュテーブルを使用して重複を排除する通常の方法よりもはるかに高速な、繰り返しのない...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...