Webhook Cast のレート制限 #
概要 #
アクションが Webhook である Cast はレート制限の設定を持ちます。 レート制限の設定値とは Cast の URL が指す Cast 対象サービスに対して一定期間内に送出できるリクエストの回数の上限を表します。 Act に登録されているデバイスたちがこの上限以上の Act Log を送出しようとした場合、Actcast は上限を超える分を Cast 対象サービスにリクエストすることなく破棄します。
なぜレート制限が必要なのですか? #
例えば人の顔を認識してその人の属性を送出するアプリにバグがあり、ポスターに映った人の顔を誤検知して毎秒 10 回 Act Log を送出し続けるといったことが起きる可能性があります。 その際、レート制限を設定していなければ Cast 対象サービスに対して予期せぬ負荷がかかることになります。
こうした可能性から Cast 対象サービスを保護するため、レート制限が必要です。
レート制限による影響を事前に評価する #
Act および Cast は「デバイスから上げられたデータを対象サービスに配送する」という中間者の役割をします。 「Cast 対象サービスに無闇やたらに負荷をかけない」ことと「データを落とさずに配送する」ことはトレードオフであり、ユーザがどちらにすべきかを Actcast に伝える必要があります。 (安全側に倒し、デフォルトでは前者になっています。) これは何を目的とするアプリなのかや、データを何のために使いたいか、アプリを利用するシチュエーションによって変わってきます。
例を見ましょう。
例 1: 自宅のラズパイ 1 台に「ハムスターの給水器の水の量が減ってきたら通知するアプリ」を入れる。
この場合は通知は漏らさずに欲しい(ハムちゃんの喉が乾いちゃう!)ですが、多くとも 1 日に 1 回程度でしょう。レート制限に引っかかることはまずありません。
例 2: 子供の帰宅時間や外出を検知するために自宅の玄関のラズパイ 1 台に「玄関前の人を検出して通知するアプリ」を入れる。(アプリは多くとも 1 秒に 1 回しか Act Log を送出しない。)
この場合は通知が漏れても問題はなさそうですが、人を検出し続けているときは多くの通知が来ます。レート制限を適切に設定しておけば不要な通知を減らせます。
例 3: Amazon Rekognition と電子ロックを組み合わせて、「顔認識で扉の施錠を管理するアプリ」を作る。ひとつの扉にひとつのデバイスを取り付ける。1 デバイスからは最大 10 リクエスト/分のデータが送出される。同時に 100 デバイス稼働する。
この場合は、レート制限に引っかかってデバイスからのデータが適切に配送されないと、「カメラに顔を見せているのに扉が開かない」ということになります。これは良くないですね。
例 4: 「スーパーの混雑状況を表示するために、ある区画にいる人数を取得するアプリ」を使う。デバイスからは 15 分おきにデータが送出される。1 店舗あたり 20 デバイス。全国 5000 店舗。
これはどうでしょう…?
データが落ちたら困りますか? 1 秒間に何回くらいデータが上がってくるでしょうか?
データが落ちても困らない場合、特に考えることはありません。
そうでない場合、Actcast を利用するにあたって事前に「Act から最大どのくらいのリクエストが投げられるか」を試算しておき、レート制限に引っかからないかを確かめておく必要があります。
秒間リクエスト数 (RPS) は次の式で評価できます:
RPS (request / sec) = アプリが 1 秒間に送出するデータ数 (request / sec / device) * デバイス数 (device)。
例えば上記の例 3 では
RPS = 10/60 * 100 = 約 17 回/秒。
例 4 では
RPS = 1/(60 * 15) * (20 * 5000) = 約 111 回/秒。
注意として、これは概算であり、最大値や期待値です。 例 3 では時間帯によってかなり差が出るでしょう。 例 4 ではデバイスからの送信タイミングが重なった場合はより多いリクエストが投げられるでしょう。 大事なのは、レート制限に引っかかったときに何が起きるかをユーザ自身が考え、必要であればそれを事前に回避することです。
秒間リクエスト数の上限を上げたい場合、Webhook Cast の設定画面 からレート制限の設定値を下げて Cast を設定します。 一切制限をかけたくない場合は、次節に従って制限を解除します。
レート制限を解除する #
レート制限を解除するためには、以下のふたつが必要となります:
- Cast 対象サービスに課される条件: Cast 対象サービスが「レート制限なしでリクエストを送出してもよい」ことを Actcast に対して宣言する。
- ユーザによるアクション: ユーザが Cast の設定で「レート制限なし」を設定する。
Cast 対象サービスが「レート制限なしでリクエストを送出してもよい」ことを Actcast に対して宣言する #
この節の想定読者は Cast 対象サービスの開発者です。
Cast 対象サービス, Actcast option を参照してください。
ユーザが Cast の設定で「レート制限なし」を設定する #
- Webhook Cast の設定画面 を開きます。
Rate Limit (s)
以外の設定項目を埋めます。Rate Limit (s)
を空欄にします。- Finish で設定を保存します。
エラーが起きずに保存ができれば、設定完了です。制限なしでの Webhook Cast が開始されます。
エラーが起きた場合、Cast 対象サービスがレート制限なしでの Webhook Cast をサポートしていない可能性があります。 Cast 対象サービスにお問い合わせください。