doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

擬似スーパーバイザーによる再実行

注意点

メッセージングのミドルウェア(RabbitMQ、Kafkaなど)が利用できるならこのパターンは使わないほうがいいです。

スーパーバイザーとは

ETPとかAkkaとかで出てくる、Actorを監視するプロセス。Actorが失敗したら再起動など、事前に定義したストラテジーに基づいて処理します。

処理の流れ

オンライン処理の中である外部サービス(例:メール送信など)と連携を取りますが、外部サービスの信頼性が低いため、高い確率で失敗するとします。

  1. サービスは外部サービスにイベントを通知
  2. 外部サービスが失敗した時は「未送信イベント」としてデータストアに記録
  3. バッチが未送信イベントを対象に外部サービスへの連携をリトライする

f:id:doiluxng:20180103224045p:plain

いわゆるBackoffSupervisor的な、要は「連携が成功するまで何回でも繰り返す」をAkka、MQを使わずに実現しようとするとこうなりました。