サラダアーキテクト

ソフトウェアブログ

2024-12-23

ポーリングとウェブフックのどちらを使うべきか?(Polling or Webhooks)

IT用語, アーキテクチャ, インターフェース

ポーリング (Polling)

まず、英語の通常の文脈ではポーリング(Polling)とは「ある事について他人がどう考えているかを知るためにそれぞれ皆に質問すること」または「世論調査」の事を言います。

例文:

The teacher is polling the class to see which book we should read next.

先生はクラスに次に読む本を尋ねています。

 

ITアーキテクチャの文脈ではポーリング(Polling)とは、外部サービスに対して一定の間隔で繰り返し問い合わせを行い、最新の情報を取得する方法の事を指します。

システムAとシステムBがあり、システムAはシステムBから情報を取得します。システムAはシステムBに対して、「情報をください」とお願いします。システムB側で情報が用意できていれば「情報は〇〇です」と返しますが、情報が用意できていない場合は「まだ準備中です」と返します。

Polling repeat

いつどのタイミングでシステムBがその情報を用意できるかがわからない場合、システムAは情報を得られるまで何度も繰り返し更新情報が得られるまでシステムBに問い合わせることになります。

Webhook

 

このポーリングの仕組みには問題が存在します。

1)システムAは定期的に繰り返しシステムBに問い合わせないとならない、なぜならば、いつシステムBの情報が更新するのかがわからないからです。一回問い合わせても最新情報が準備できていなければ終わりになりません。何度も問い合わせをしないと行けないという手間がかかります。システムAは問い合わせる作業を幾度も行う事になり、システムBは幾度も「まだ準備中です」という返事を行う事になります。

 

2)タイミングの問題です。システムAが情報が得られるのはシステムBが自分の問い合わせに返事する時のみです。という事はシステムBの更新情報をリアルタイムで得ることができないのです。あくまでも問い合わせへの返事として情報が得られるのです。問い合わせをしなければ返事はもらえません。

 

なるべくリアルタイムに情報を得ようとして問い合わせする間隔を短くすると、問い合わせの回数が増える事になります。そして無駄な問い合わせの回数を省くために間隔を長くすると、よけいシステムBの最新情報を得るのに遅れが出てしまい、リアルタイム性に乏しくなります。

 

ウェブフック(Webhook)

ウェブフックの仕組みは通知システムに似ている仕組みです。

システムA側にエンドポイント(endpoint)を用意します。このエンドポイントは外部からの問い合わせを受け入れます。それを外部システムからのコールバック(callback)とします。

システムAはシステムBに「情報が用意できたらこちらのエンドポイントに送って来てね」と伝えます。

システムBは情報が用意でいたら直ぐにシステムAのエンドポイントに対して「情報は〇〇です」と情報を送ります。

ポーリングの仕組みの様に定期的に繰り返しシステムAからシステムBへ情報を要求するわけではありません。

Webhook

システムAはシステムBのにエンドポイントの情報を渡して準備が出来るのを待つだけです。

システムBは変更があるとエンドポイントに対し最新情報をコールバックで提供します。

一度コールバック用のエンドポイントを設定するとシステムAはシステムBへ問い合わす必要がありません。システムBが能動的にシステムAへ情報提供をしてくれるのです。

このため、ウェブフックはリアルタイムに最新の情報を取得するのに有効的な仕組みです。

では、ポーリングとウェブフックのどちらを使うべきか?

ウェブフックは高スループット環境においてリソースの利用効率が高いと言えます。しかし、ネットワーク上の問題が発生した場合に通知を見逃してしまうリスクがあります。情報をコールバックする為にリトライする必要があるのでオーバーヘッドがポーリング方式より大きくなります。

おすすめは、ウェブフックは即時のデータ配信を必要とするアプリケーションで利用をして、ポーリングはウェブフックを使用できないようなインフラ上の制限がある場合に利用する事です。