コアデータAPI

レート制限

アトミックなサーバー側のレート制限。1つのコマンドで使えるGCRA、またはスライディングウィンドウ、トークンバケット、リーキーバケットの名前付きリミッター。Luaは不要です。

リクエストごとのアトミックなコマンド
1
アルゴリズム
4
Luaスクリプト
0
ステップ 1 / 5
許可

ユーザー42に1分あたり10リクエストです。応答は、許可されたこと、上限、残り回数を示します。

サンプルセッションplaying
# 許可
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。

課題

制限のないAPIは、行儀の悪いクライアントが1つ現れるだけで障害に陥ります。チェックをアプリケーションのコードで行うと、読み取り、計算、書き込みが必要になり、同時リクエストがその隙間をすり抜けます。多くのチームは、アトミックにするためだけにLuaスクリプトを保守する羽目になります。

HotKVでの解決方法

GCRA.LIMITは判定と記録を1ステップで行うため、同時に動くクライアントが同じ状態で両方とも通過することはありません。また制限はウィンドウの境界でリセットされるのではなく、滑らかに回復します。名前で管理する制限には、RATELIMIT.CREATEでスライディングウィンドウ、トークンバケット、リーキーバケットのリミッターを設定でき、許可と拒否の統計も得られます。

ステップごとに

コマンドごとに何が起きるか

  1. 01

    許可

    ユーザー42に1分あたり10リクエストです。応答は、許可されたこと、上限、残り回数を示します。

    GCRA.LIMIT ratelimit:user:42 60000 10
  2. 02

    ボットからのバースト

    スクレイパーはバーストの許容量を使い切り、その後は待機時間を告げられます。拒否されたリクエストは何も変更しません。

    GCRA.LIMIT ratelimit:bot:7 60000 10
  3. 03

    プラン用の名前付きリミッター

    無料プランの顧客には、スライディングウィンドウで1分あたり100リクエストを割り当てます。

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    重み付きリクエスト

    エクスポートのエンドポイントは20ユニットを消費するため、許容量をより多く使います。

    RATELIMIT.CHECK free_plan customer:881 COST 20
  5. 05

    リミッターの動作を確認

    設定、追跡中のキー、許可と拒否のリクエストの合計がわかります。

    RATELIMIT.STATS free_plan
活用シーン

実際のシナリオ

公開API

各APIキーにプランごとの制限があり、行儀の良いクライアントにはバーストを、それ以外には正確なRetry-Afterを返します。

ログインと登録のフォーム

IPごと、アカウントごとの試行回数を制限し、クレデンシャルスタッフィングを遅らせます。

外部への呼び出し

パートナーのAPIやLLMプロバイダーへの呼び出しを、フリート内のすべてのワーカーを通じてクォータ内に収めます。

標準搭載

得られるもの

1つのコマンドでGCRA

バーストを許容する滑らかな回復、アトミックなチェックと更新、拒否時の再試行時間。

GCRA.LIMITGCRA.RESET

名前付きリミッター

スライディングウィンドウ、トークンバケット、リーキーバケットを一度作成し、キーごとにチェックします。

RATELIMIT.CREATERATELIMIT.CHECK

重み付きリクエスト

高コストな呼び出しを複数のリクエストとして数えられます。GCRA.LIMITはcountを、RATELIMIT.CHECKはCOSTを受け取ります。

COST

統計

リミッターごとの許可と拒否の合計。

RATELIMIT.STATS

よくある質問

レート制限にLuaスクリプトは必要ですか?

いいえ。GCRA.LIMITもRATELIMIT.CHECKも、チェック全体を1つのアトミックなコマンドで行います。

どちらを使うべきですか?

GCRA.LIMITは設定が不要で、すべてのプランで動作します。RATELIMIT.*の名前付きリミッターはアルゴリズムの選択と統計を追加するもので、PerformanceプランとScaleプランに含まれます。

拒否されたリクエストにはどんなコストがかかりますか?

何もかかりません。拒否されたGCRAの呼び出しはリミッターを変更しないため、再試行するクライアントがそれ以上不利になることはありません。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。