【とーくんばけつ】

トークンバケット とは?

公開:
💡 「前払い貯金」で突発的な混雑をさばくレート制御

バケツにトークンを一定速度で補充し、リクエスト時にトークンを消費することで、バーストを許容しながら平均レートを制御するアルゴリズム。

📌 このページのポイント
トークンバケット 一定速度で補充 バケツ(残高) T T T T T リクエスト到着 リクエスト 消費 ✓ 許可 処理を実行 ✗ 拒否 (残高0) 429エラー 満杯で補充停止・上限あり T = トークン(許可証)
トークンバケットのイメージ:貯まったトークンを消費してリクエストを処理する
ひよこ ひよこ
ペンギン先生、トークンバケットってどんな仕組みなの?
ペンギン先生 ペンギン先生
バケツにトークン(許可証)が一定速度でポタポタ補充されるイメージだよ。リクエストが来るたびにトークンを1枚消費して、バケツが空なら「今は無理」と断るんだ。
ひよこ ひよこ
バケツが満杯のときはどうなるの?
ペンギン先生 ペンギン先生
溢れた分は捨てられるよ。上限があるから「貯めすぎ」は防げる。でも貯まってるあいだに一気に使えるのがポイントで、これをバースト許容って言うんだ。
ひよこ ひよこ
じゃあ普段ゆっくりしか使わない人は、たくさん貯めて一気に使えるんだね!
ペンギン先生 ペンギン先生
そう!API制限でよくある「1分100リクエスト」も、均一に1秒1.67件ではなく、残高があれば最初の数秒で一気に処理できる柔軟さを持てるんだよ。
ひよこ ひよこ
リーキーバケットとはどう違うの?
ペンギン先生 ペンギン先生
リーキーバケット(穴あきバケツ)は出力を必ず一定速度に平滑化するよ。トークンバケットは「入力速度の上限を設ける」設計で、バーストを許容する点が大きな違いだね。
ひよこ ひよこ
実際のシステムでは何に使われてるの?
ペンギン先生 ペンギン先生
AWS API GatewayやNginxの帯域制限、Redisで実装するAPIレート制限によく使われるよ。実装はシンプルで「最後の補充時刻」と「現在残高」の2変数だけで管理できるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「トークンバケット」って出てきたら「貯まったトークンを使ってリクエストを処理するレート制御」と思えればだいたいOK!
📖 おまけ:英語の意味
「Token Bucket」 = トークンバケット
💬 バケツ(bucket)にトークンを溜めて使う仕組みで、残高があれば一時的に多くのリクエストを処理できる「貯金」型レート制限だよ
← 用語集にもどる