Cinderella API v1 の制限追加について

2020-09-06

要約

Cinderella API v1 (以下APIv1)に、新たな2種類の利用制限を設けます。

  1. 以下の条件いずれかを満たした場合、HTTPステータスコード 429 [too many requests] が返却されます。この制約は APIv2 と共通です。
    • 高頻度でアクセスした場合。目安としてアクセス間インターバル5秒未満。
    • 応答サイズ(Content-Lengt)が数MBを超えるアクセスを連続して行った場合。
  2. 「プロデューサー検索」および「プロダクション検索」での検索時の最大応答件数を、2000 件に制限します。

これらの制約はすべて適用済です。

影響を受けるのは APIv1 利用ユーザのうち1%程度です。

経緯

かんたんに箇条書きで記載しておきます。

  • 昨今、Web ポータルを含めた pink-check.school 全体のアクセス数は伸び続けている。8月は昨年比で3倍近くの利用があった。
    (ゲームの状況的にも伸びる要素が思いつかないですし…理由はまったくわかりません)
  • そのため、最近は Web サーバのリソース使用率が比較的高い状態で推移していた。CPUが1コアのWebサーバは、Load average が常時 1.0 くらいに達している。通常、PMFやアニバーサリーアイプロの期間中は平時比でさらに3倍近いアクセスがあるため、現状のサーバリソースでは耐えられないかもしれない。
  • Web サーバを一段階スケールアップすれば問題は解決するが、これ以上、観測と直接関係ない部分を財布で殴るのは避けたい。毎月かかる固定費はこれ以上増やせない。
  • サーバへのアクセス数は Web ポータルと APIv1 でほぼ同じだが、使用されているリソース量を計測したところ、およそ 2:7 で APIv1 の方が負荷が高いと推測できる結果が取れた。
  • APIv1 の利用状況を調査したところ、極一部のクライアントが、高頻度で、しかも数十MBの応答が必要なアクセスをしていることがわかった。これら資源を過剰利用しているアクセスを分散させることができれば問題はほぼ解決すると想定した。(⇒利用制限 1. )
  • そもそも、プロデューサー(現在638,731件)やプロダクション(同44,314件)の全量を返却できてしまう APIv1 の実装が悪い。(⇒利用制限 2. )

API はなるべく多くの方に活用して頂けるよう門戸を開いていますが、限られたリソースで提供していることをご理解いただき、配慮したアクセスをお願い致します。

なお、全量取得のためには CSV を準備しています。こちらは静的処理ですので比較的低負荷です。1日1回の更新ですのでリアルタイム性はありませんが、カレントデータである必要がない大量データの取得には、ぜひこちらも活用してください。