- [[🗃️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]]のソート済みセットデータ構造