LoginSignup
7
3

More than 1 year has passed since last update.

非同期に使われるPub/SubモデルのPush方式とPull方式ってどう違うの?

Posted at

SubscriptionからSubscriberへのメッセージ伝達の方法は2つ

  • Push方式
  • Pull方式

ほとんどのメッセージキューでは、メッセージの取得に、プッシュオプションおよびプルオプションの両方を利用できます。

例えば、AWSのSQSやGCPのCloud Pub/Subとかがそうですね。

こういった、メッセージング方式をPub/Sub Messaging
といいます。
参考:https://aws.amazon.com/jp/pub-sub-messaging/

Push方式

  1. PublisherがMessageをPublishします。
  2. Message QueueがPOSTリクエストをSubscriberに対して送ります。

というのが、Push方式で、SubscriberはHTTPエンドポイントを提供するのが一般的です。

Pull方式

  1. PublisherがMessageをPublishします。
  2. SubscriberがGETリクエストをSubscriptionに対して送ります。

というのが、Pull方式で、Subscriberはwokerプロセスとして、メッセージキューに対してリクエストを定期的に送るというのが一般的です。

どっちがいいの?

どちらがいいかは要件によりますが、キーワードは「時間的疎結合」だと思っています。

そもそも、非同期の処理を使っているということは、アプリケーションコードが論理的には、直接別のプロセスに依存しないようになっていると思います。

ところが、Push方式の場合は、時間的密結合になります。
Pull方式の場合は時間的疎結合になります。

時間的密結合というのは、PublisherがMessageをPublishする瞬間にSubscriberがActiveであることに依存するかどうかです。

Push方式であれば、受け取り手がいなくなり、メッセージは棄却されます。(不整合を防ぐために幾つかの工夫は可能。例えば、リトライ。または、デッドレターキューを利用する方法)
Pull方式であれば、SubscriberがActiveになった時にMessageは Consumeされるので、時間的に疎結合にすることができます。

その分、時間効率がいいのは、Push方式です。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3