Kush's Wiki

レートリミット

commited date: 2024-12-27

#Security #API Architecture

以下のような目的でAPIの使用回数を制限する、制限を超過した時はHTTPの場合一般に429エラーを返す処理

  • STRIDEにあるようなDenial of Service(サービス拒否)からアプリケーションを保護する
  • カスケード障害の可能性を制限する
  • リソースの使用量を測定し従量課金に利用できる

レートリミットの実装アルゴリズムには以下のようなものがある

  • 固定ウインドウ(Fixed window)
    • 固定期間内の制限
  • スライディングウインドウ(Sliding window)
    • 直近の期間内の制限
  • トークンバケット方式(Token bucket)
    • 総リクエスト数(トークンのバケツ)を定義しリクエストごとにトークンが利用される。バケツは定期的に充填される
  • リーキーバケット方式(Leaky bucket)
    • リクエストが処理される速度は固定で、バケツから溢れ出るリクエストを漏れ(リーキー)として扱う

APIゲートウェイを利用している場合、ゲートウェイに配置するとよい