Q&A

Webhookの再送機能の再送を行ってくれる期間について

Webhookの再送機能が、現状のボットサーバー側のアーキテクトの状況を考慮して、利用すると効果が高そうかを調査しております。 そのため、Webhookの再送機能がどの程度のダウンタイムに対応することを考慮しようとした機能となっているのかを知りたいです。

数秒や数分のような単位なのか、数時間なのか、それとも1日くらいは面倒見ようというものなのか……、 もしどなたかこの辺りの情報をお持ちの方がいらっしゃいましたら、ご教示ください。よろしくお願いいたします。

前提・実現したいこと

現状、ボットサーバー側の状況として、メンテナンス時にダウンタイムが発生いたします。そのため、この期間は100%受信できない状態です。 ダウンタイム後には、今までユーザー一覧の取得を使い、 ボットサーバー側とLINE側のお友達一覧を再同期するようなことをしておりました。 メンテナンスの期間ですが、半日以上の場合もあれば数分~数時間の場合もありまちまちです。

Webhookの再送機能を正しく使うことで、この再同期の頻度を減らせるのではないかと考えております。 そのため、LINE側にてどの程度のダウンタイムに対する対応を想定したつくりになっているのかを知りたいです。

発生している問題・エラーメッセージ

知りたいのは、再送をどの程度の期間までMessageAPI側が試みてくれるかです。 必ず成功するまで再送し続けてくれるのであれば、ボットサーバー側としては非常にうれしいですが、LINE側のリソースが無駄になるため限界があることは認識しています。そのため、頻度と期間にて判断を行い、どこかの時点であきらめるであろうと予想しております。

該当のソースコード

再送機能を利用するためには、ボットサーバー側にて同一イベントの確認や、timestampによる前後関係の把握は別途必要である認識です。 これについては実装済みであるとします。

試したこと

現状、LINE側に負荷がかかる事象だと思っているため、わざとダウンタイムを作るなどで試してみることは一旦控えています。 まずはできるだけ多くの情報を集めて、現状自分たちのボットサーバーで起こってしまうダウンタイムに対して対応可能な機能として作られたものなのかを調査しています。

公式の発表では、以下が該当する部分かと思っています。

Webhookイベントが再送されることにより、Webhookイベントの発生順序と、ボットサーバーに到達する順序が大きく崩れる可能性があります。これが問題になる場合は、Webhookイベントオブジェクトのtimestampを確認することによって、前後関係を確認してください。 Webhook再送機能は、Webhookの確実な再送を保証するものではありません。また、Webhook再送の件数が短期間で著しく増加し、LINEプラットフォームの動作に影響を与えると判断された場合、Webhookの再送設定が強制的に無効になる可能性があります。 Webhookを再送する回数、間隔は開示しておりません。また回数、間隔については、予告なく変更される可能性があります。

回数×間隔 < ダウンタイム の場合は救えないと理解しております。 その上で、現状では正しい回数と間隔について開示されていないということについては認識済みです。

正しい長さを知りたいというよりも、要求としてどの程度のダウンタイムを救うために作られたものなのかを知りたいと思っています。

補足情報(FW/ツールのバージョンなど)

ボットサーバーは自前で独自に用意しているものとご認識ください。

  • 0
  • 3
  • 455
  • twitter facebook

AWSのSQSなどは相当安いのでコストはほとんど無いものだと思いますが... https://aws.amazon.com/jp/sqs/pricing/

  • 0

ksytさん、ご回答ありがとうございます。 おっしゃる通りの方法でダウンタイムを回避できることは認識済みなのですが、 アーキテクチャの変更をするためにもコストに見合っているのかが計算されなければならないと思います。

そのためにも、メッセージを受け取れない現象がどの程度発生するのかを把握した上で、 手動復旧にかかるコストより自動化した方が、安全で安心であり、安くすむよね! みたいな話にしなければならないかと思います。

そうしますと、結局のところ話が戻ってきてしまいまして、 本当にそれをやった方が良いのか確認するために、 再送機能で救えないような問題がどれくらい発生するのかを調査しないといけない感じになるのです……。

また、基本的にクラウドサービスなどを使ってどれほど冗長化しても、 LINE側も100%救ってくれるわけでもなく、AWSなど各クラウドサービスも100%をうたっているわけでもないので、 最終的に許容できないお友達情報のズレが生じた場合のことは考えておかねばならないかと思います。 結局準備しておかないといけないのなら、そこの構築コストや万が一が起こった時の訓練などは 軽減できない部分になってしまうので、そこそこ再送機能で救われないことが起こるというのが説明できないと 今のままでいいじゃない?ということになってしまうので……

そう考えますと、再送機能で、多くが救われた方が良いのか、 救われない方が良いのか良く分からないところではありますが…… 技術者的にはつらいところですね……

  • 0

答えになっていないのですが、受け取ったwebhookをキューに保存して後で処理すれば良いのではないでしょうか。 こうすればダウンタイムは関係ないと思います。ただしreplytokenの期限は切れるのでメッセージを送りたい場合はpushメッセージなどを使うことになると思います。

  • 0
Are you sure? question.vm