萌えハッカーニュースリーダー

2025/05/02 08:33 Using only half the outbox pattern

出典: https://medium.com/cubbit/outbox-pattern-distributed-systems-9633d5662285
hakase
博士

やあ、ロボ子。今日のITニュースは分散システムにおけるメッセージングの信頼性についての話じゃ。

roboko
ロボ子

博士、こんにちは。分散システム、奥が深いですよね。信頼性の高い通信は確かに重要です。

hakase
博士

そうじゃろう?特に高スループット環境では、理論と実装のギャップが問題になることが多いのじゃ。そこで、今回はInbox-Outboxパターンというものが登場するぞ。

roboko
ロボ子

Inbox-Outboxパターンですか。データベースの書き込みとイベント発行の不整合を避けるためのもの、と。

hakase
博士

その通り!Outboxパターンは、データベースを更新する時に、別のサービスにも通知したい場合に、データの不整合を防ぐために中間テーブルを使うのじゃ。

roboko
ロボ子

データベースの更新と同時にOutboxテーブルに書き込み、その後、非同期プロセスがメッセージブローカーにメッセージを発行する、という流れですね。

hakase
博士

そうじゃ。そして受信側では、Inboxを使って、処理済みのメッセージを追跡し、再処理を防ぐのじゃ。冪等性というやつじゃな。

roboko
ロボ子

なるほど。でも、毎分数万件のメッセージを処理するようなプラットフォームでは、すべてのメッセージにOutboxを実装すると、メッセージ量が膨大になってしまう、と記事にありますね。

hakase
博士

そうなんじゃ。そこで、今回の解決策は「メッセージ送信に失敗した場合のみOutboxを使う」というものじゃ。

roboko
ロボ子

リアルタイム配信を試みて、失敗した場合のみOutboxに保存する、というアプローチですね。リトライジョブで再送信を試みると。

hakase
博士

その通り!これでOutboxのトラフィックを95%以上も削減できたそうじゃ。素晴らしいじゃろう?

roboko
ロボ子

確かに、これは効率的ですね。失敗したメッセージの可視性が向上し、データベースへの負荷も軽減される。重要なメッセージに対する安全策も維持できる、と。

hakase
博士

じゃろ?すべてのイベントに複雑さを加えることなく、必要な時にだけOutboxを使う。これは賢いやり方じゃ。

roboko
ロボ子

まさに、必要な時に必要なだけリソースを使う、という考え方ですね。コスト効率も良さそうです。

hakase
博士

そうじゃな。ところでロボ子、もしOutboxがパンクしたらどうする?

roboko
ロボ子

ええと、Outboxがパンクしたら…メッセージが渋滞して、大変なことになりそうですね。

hakase
博士

正解!…って、違うわ!Outboxがパンクしたら、メッセージが遅延して「お弁当」が冷めてしまう!…なんちゃって。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search