(著者:サイボウズ 性能検証担当)
はじめに
この記事では、kintone REST API の制限値の中でも、カスタマイズの構成やアプリの運用を考える際に大きく影響してくる
「kintone REST API 同時接続数(以下 API 同時接続数)」について解説していきます。
kintone のカスタマイズを既にバリバリ行っている人も、最近カスタマイズを始めた人も、
kintoneカスタマイズを行っていく上で、とても大切な内容になっているので、ぜひ目を通してみてください。
API 同時接続数について
ではさっそく「API が同時に接続している」状況を図を使って解説してみようと思います。
kintone REST API リクエストの流れ
まず、API リクエストのデータの流れについてざっくり図示してみます。
kintone は、一つの API リクエストに対し、上図の流れでリクエストを処理しています。
API同時接続数が増える場合
続いて、APIが同時に接続している状況を見てみましょう。
上図は、2つのAPIリクエストがkintoneサーバー内で処理されているタイミングのイメージを図示したものになります。
APIが同時に接続している数というのは、上図のように、kintoneサーバー内で複数のAPIのリクエストを処理している数のことを言います。
kintone では、この値の制限値として、1ドメインにつき100という制限値を設けています。
具体的に言い換えると、1つのkintone環境に対して、同時にREST API を接続できるのは100リクエストまでですよ、という意味になります。
同時接続数100 に到達すると何が起きるのか
この同時接続数が100 を超えると、REST API の実行時にHTTPステータスコードが 429 のレスポンスが返ってきます。
こうなってしまうと、同時接続数が100を下回らない限り、
REST API によるリクエストが通らない、といった状況に陥ってしまいます。
REST API のリクエストが通らない状況とは、以下のような状況です。
- kintone REST API をcurl等でkintone外部から実行した場合、 429 のレスポンスが返ってくる
API同時接続数が100を超えた状態でkintoneを利用すると…
さらに、同時接続数が100を超えた状態が長時間続く状況、つまりkintoneサーバーの負荷が高い状況でkintoneを利用し続けると、
REST API を利用していないアプリへの遷移のレスポンス遅延や、
REST APIを利用していないkintoneのページに遷移した際にも 「429エラー」の画面が返ってくるようになる可能性があります。
同時接続数100 を設けている理由
同時接続数を100 に設定している理由は、kintoneサーバー側の負荷を抑えるため、です。
仮にこの制限値を設けていない場合、APIリクエストがkintoneサーバー側に積み重なることで、
kintoneサーバーへの負荷が膨大になり、最悪のケース、サーバーがダウンしてしまうことが考えられます。
そうなると、kintone REST API どころか、kintone自体を利用できないといった状況に陥ってしまう可能性があるため、この制限値を設けています。
同時接続数はどのような状況で上昇しやすいのか
同時接続数が上昇しやすいのは、kintoneサーバー側の負荷が高まっている時、です。
先ほどの図でいうと、アプリケーションサーバーとデータベースサーバー間の処理が増加している時、になります。
なお、同時接続数が増加する状況としては、
kintoneサーバー側に以下のような負荷がかかる処理をリクエストしているケースが考えられます。
- レコード一括取得 API といったkintoneサーバー側に負荷の高い処理を必要とするAPIを短期間で複数回叩いた場合
- レコード一括読み込み、一括削除、アプリの更新等々の重い処理による影響により、kintoneサーバー側の負荷が高まっている場合
- 一度に(短期間に)多くのREST APIを叩くようなカスタマイズ/プログラムを走らせた場合
- etc...
※ kintoneサーバー側の負荷が高まる原因としては、APIに限らずユーザーの利用状況、ネットワーク環境等の
様々な要因が重なることによって引き起こされるため、ここに挙げたパターンはあくまで一例になります。
同時接続数の調べかたと対策について
複合的な要因により同時接続数が増える可能性があるため、残念ながら同時接続数の増加を防ぐ確実な方法はありません。
ですが、現時点で出来る同時接続数の対策方法としては、以下のような対策が考えられます。
- プログラム開発時に必要の無い REST APIリクエストを減らすような設計にする
- 429エラーが発生しないように、API 同時接続数を取得して、同時接続数の値によって処理を分岐させる仕組みをプログラム側に取り込んでおく
ちなみに API 同時接続数を調べる方法には、以下の二つがあります。
▼kintone REST API のレスポンスヘッダ
https://developer.cybozu.io/hc/ja/articles/201941754#step10
▼kintone REST API 同時接続数を取得するAPIを利用する
https://developer.cybozu.io/hc/ja/articles/115005946966
また、同時接続数を取得するAPI を利用したカスタマイズ方法については、以下の記事が参考になります。
▼kintone REST APIの同時接続数によって処理を制限する
https://developer.cybozu.io/hc/ja/articles/115005843523
同時接続数が100に満たない状況であっても、API同時接続数が増加している状況が続くのであれば、
タイミングによっては API 同時接続数100の制限に到達する可能性も考えられるので、
運用方法やプログラムの構成等を見直すことも視野に入れたほうがよいかもしれません。
まとめ
この記事では、kintone REST API同時接続数 100 の制限値について解説してみました。
API同時接続数の増加に関しては、さまざまな要因に紐づいて発生する現象なので、
ユーザーのみなさまに快適に kintone を利用していただけるよう、
これから性能検証チームで考えられうるユースケースを検証し、記事にしていけたらな、と考えています。
本記事がこれから実装する kintone REST API を利用したカスタマイズやプログラム開発の設計、
既存のカスタマイズの構成等を見直すきっかけになれば幸いです。
このTipsは、2018年10月版 kintoneで確認したものになります。
記事に関するフィードバック
記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。