🙌

ポーリング型JOB実行システムについて

に公開

ポーリング型JOB実行システムとは

ポーリング型JOB実行システムとは、ワーカーが定期的にサーバやDBへ問い合わせを行い、実行対象のJOBがあれば取得して処理する方式。

JOBは即時実行されず、一度DBに登録され、ワーカーが「取りに行く」形で処理される。

メリット

  • 実装がシンプル
  • 運用コストが低い
  • DB中心で完結できる

採用した背景

  • 即時性はそこまで不要
  • JOBの種類が増える前提
  • DBトランザクションで完結させたい
  • 運用負荷を抑えたい

実装時の注意点

多重実行防止

READY → IN_PROGRESS の更新は必ず排他的に行う。

ワーカー障害対策

IN_PROGRESS のまま一定時間更新されていないJOBは再実行可能に戻す仕組みを用意する。

冪等性

同じJOBが複数回実行されても問題が起きないよう、更新処理は冪等にする。

メッセージキュー(SQSなど)との比較

ポーリング型(今回の設計)

Producer
  ↓ JOB登録
DB(jobs)
  ↑ 定期的に取得
Worker
  • DBが JOBキューの役割
  • ワーカーが 取りに行く
  • Pull型

メッセージキュー型(例:SQS)

Producer → Queue → Worker
  • キューが 配送責務を持つ
  • Workerは Pushされる
  • イベント駆動

今回は即時性はそこまで必要ではなく、またSQSなどを構築・運用するコストなども含め、ポーリング型を採用。

Discussion