Open2

【RPM/TPM/PRD/TPD】APIのレートリミット・アクセス制限について📝

まさぴょん🐱まさぴょん🐱

APIのレートリミット・アクセス制限について

APIのレートリミットとは、特定の時間内にクライアントがAPIに対して送信できるリクエストの数を制限する仕組みです。
この制限は、APIの安定性やパフォーマンスを保つために重要であり、過剰なリクエストによるサーバーの過負荷や、攻撃者からの保護を目的としています。

APIレートリミットの目的

  • 安定性の確保: レートリミットは、APIが過剰なリクエストに圧倒されるのを防ぎ、すべてのユーザーに対して公平なリソースの配分を実現します。これにより、レスポンスの遅延やサービスのダウンタイムを回避できます。

  • セキュリティの向上: 攻撃者やボットによるDoS攻撃(サービス拒否攻撃)を防ぐためにも、レートリミットは重要です。これにより、APIのリソースが不正に使用されるリスクを軽減します。

  • リソース管理: サーバーのリソース(CPU、メモリなど)を適切に管理し、過剰なトラフィックによるサービスのクラッシュを防ぎます。

レートリミットの実装方法

APIのレートリミットは、以下のような方法で実施されます。

  • ユーザーベースの制限: 特定のユーザーやIPアドレスからのリクエスト数を制限します。例えば、同じAPIキーを使用するユーザーが一定時間内に送信できるリクエストの数を制限することが一般的です。

  • ロケーションベースの制限: 特定の地域からのリクエストを制限することで、地域ごとのトラフィックを均等に分配します。これにより、特定の地域からの攻撃を防ぐことができます。

  • サーバーベースの制限: 複数のサーバーでサービスを提供する場合、各サーバーごとにアクセス数を制限し、全体の安定性を保ちます。

レートリミットの種類

レートリミットにはいくつかの種類があります。

  • ハードリミット: 上限に達すると、リクエストは完全に拒否されます。

  • ソフトリミット: 上限に達しても、一定のリクエストは許可される場合があります。

  • 動的リミット: サーバーの負荷やトラフィックに応じて、リアルタイムで制限が変動します。

APIのレートリミットは、システムの健全性を保つために不可欠な要素であり、適切に設定することで、ユーザーに対して安定したサービスを提供することが可能になります。

参考・引用

https://apidog.com/jp/blog/api-rate-limit/

https://kinsta.com/jp/knowledgebase/api-rate-limit/

まさぴょん🐱まさぴょん🐱

「RPM」と「レートリミット」について📝

レートリミットとは、APIを使用する際に、一定期間内に送信できるリクエストや処理できるデータ量の制限のことです。
これにより、サーバーの負荷を軽減し、全ユーザーが公平にサービスを利用できるようになります。

具体的には、以下のような制限があります:

  • TPM(Tokens Per Minute): 1分あたりに処理できるトークン数
  • RPM(Requests Per Minute): 1分あたりに行えるリクエスト回数
  • RPD(Requests Per Day): 1日あたりに行えるリクエスト回数
  • TPD(Tokens Per Day): 1日あたりに処理できるトークン数

https://qiita.com/shuzo_man/items/54c48b75e457afde2abd

https://ai.google.dev/gemini-api/docs/rate-limits?hl=ja

以下では、API やサービスの利用における「RPM」と「レートリミット」の意味と違い、関連する用語・対応策についてまとめます。

1. RPM(Requests Per Minute:1 分あたりのリクエスト数)

  • 定義
    あるサービスやエンドポイントに対して、1 分間 に許容されるリクエスト(Request)の最大数を表す指標。
  • 用途例
    • API プロバイダが「RPM=60」であれば、1 分間に最大 60 回の呼び出しを許可
    • Web サーバの負荷監視で「平均 RPM」をグラフ化し、トラフィックの変動を把握
  • メリット
    • 短時間のピークを把握しやすい
    • 1 分という区切りが短く俊敏なモニタリングに向く

2. レートリミット(Rate Limit)

  • 定義
    サービス側がクライアントごとに設定する「一定期間内の呼び出し回数の上限」。
  • 主な特徴
    項目 説明
    対象期間 秒/分/時間/日など様々
    制限値 期間内に許可されるリクエスト数(例:100req/60s, 1000req/1h)
    振る舞いポリシー 上限超過時の応答(HTTP 429, バックオフ要求など)
  • 目的
    • サービスの過負荷防止
    • 攻撃的なアクセスや暴走バグの影響緩和
    • 公平なリソース配分

3. RPM とレートリミットの関係

  • RPM は「レートリミットを示す数値の一例」
    レートリミット設定のうち「1 分あたりの上限」を RPM と呼ぶことが多い
  • 複数スパンの設定例
    ・短期リミット:100 rpm(※RPM = Requests Per Minute)
    ・長期リミット:1000 rph(※RPH = Requests Per Hour)
    
  • バースト vs スロットル
    • バースト許可:短時間に集中して多くのリクエストを送信できる許容量
    • スロットリング:超過時に意図的に処理速度を抑える仕組み

4. レートリミット超過時の一般的な対応

  1. HTTP ステータスコード 429(Too Many Requests) の受信
  2. Retry-After ヘッダや自前バックオフ(指数関数的バックオフ)で再試行
  3. キャッシュの活用
    • レスポンスをキャッシュして、API 呼び出し頻度を削減
  4. リクエスト分散
    • 並列実行数の制御
    • キューイングによる平準化
  5. 契約プランのアップグレード
    • より高いレートリミットを許可する有料プランへの切り替え

5. まとめ

  • RPM はレートリミットのうち「1 分あたりの制限値」を指すメトリクス
  • レートリミット は、期間と回数を組み合わせた API 利用制御の総称
  • 適切なバックオフやキャッシュを組み合わせ、安定した API 利用を実現しましょう

何か具体的なサービス(たとえば AWS API Gateway・Twilio・GitHub API など)での設定方法や、実装例が必要であれば教えてください。