Pull型アーキテクチャ
Pull型アーキテクチャとは
システム開発における Pull型アーキテクチャ とは、データや処理の流れが「受信側(Consumer)が能動的に取得しにいく」設計思想です。対義語は Push型(送信側が能動的に配信する)です。
Push型との比較
| 観点 | Pull型 | Push型 |
|---|---|---|
| 主導権 | Consumer(受信側) | Producer(送信側) |
| タイミング | Consumerが任意のタイミングで取得 | Producerが発生時に配信 |
| 代表例 | ポーリング、GraphQL、RSS | Webhook、Server-Sent Events、Push通知 |
| 結合度 | 疎結合になりやすい | 密結合になりやすい |
Pull型の代表的なパターン
1. ポーリング (Polling)
ConsumerがProducerに対し、定期的にリクエストを送り新規データを確認する。
Consumer ──[GET /jobs?status=pending]──> Server
Consumer ──[GET /jobs?status=pending]──> Server (定期繰り返し)用途: バッチ処理のジョブキュー監視、外部API連携
2. メッセージキュー (Message Queue)
ConsumerがキューからメッセージをPullする形式。
Producer --> [Queue] <-- Consumer (Pull)代表ミドルウェア:
- Apache Kafka(Consumer Groupがoffsetを管理しPull)
- Amazon SQS
- RabbitMQ(Pull/Push両対応)
3. イベントソーシング + Pull
イベントストアに蓄積されたイベントをConsumerが任意に読み取る。
Pull型のメリット
- Consumerの処理能力に合わせて取得量を制御できる(バックプレッシャーの実現)
- Producerがconsumerの状態を知る必要がない(疎結合)
- Consumer側のスケールアウトが容易
- 障害時の復旧が容易(再度Pullし直せばよい)
Pull型のデメリット
- リアルタイム性が低下しやすい(ポーリング間隔の問題)
- 不要なリクエストが増える(データがなくてもポーリングが発生)
- ポーリング間隔の設計が難しい(短すぎると負荷増大、長すぎると遅延)