- [[🗃️Rate Limiting]]を実現するシステムの設計
- 実現方法
- サーバー側に制御を入れる
- [[🗃️ミドルウェア]]として実現する
- [[🗃️APIゲートウェイ]]
- 方式
- トークンバケット
- リーキーバケット
- 固定ウィンドウカウンタ
- スライディングウィンドウログ
- スライディングウィンドウカウンタ
- どの実装方式にしても、カウンターが必要
- [[🗃️RDB(リレーショナルデーターベース)]]だと、アクセスの遅さからよくない
- インメモリキャッシュが一般的。[[🗃️Redis]]など
- 使える[[🗃️Redis]]コマンド
- INCR: 格納されたカウンターを1増加する
- EXPIRE: カウンターにタイムアウトを設置する
- Lyftは、レート制限のコンポーネントをOSS化している
- レートリミッターは[[🗃️HTTPヘッダー]]を返す
- [[🗃️X-Ratelimit-Limit]]
- [[🗃️X-Ratelimit-Retry-After]]
- [[🗃️X-Ratelimit-Remaining]]
- [[🗃️レースコンディション(競合状態)]]
- ロックは解決策の1つ
- しかし速度を著しく低下させる
- 2つの方策がある
- Lua Script
- [[🗃️Redis]]のソート済みセットデータ構造