Skip to content
Latchkey

デッドレター(失敗したjob)とは? 解説

デッドレターとは、何度も失敗しすぎてシステムがリトライをあきらめ、人間の対応のために脇へ置く作業の保管場所です。

リトライは永遠に成功し続けることはできません。ある時点で、システムは特定の項目について立ち止まり、敗北を認めなければなりません。メッセージキューに由来するデッドレターパターンは、これを捉えます - リトライを使い果たした後、失敗した項目はデッドレターキューへ移され、失われることも、後続のすべてをブロックすることもありません。

パターン

workerがメッセージの処理を試みます。リトライ上限を超えて失敗し続ける場合、際限なくリトライする(キューをブロックしてしまう)のでも、破棄する(データを失ってしまう)のでもなく、システムはそれをデッドレターキューへ振り分けます。そこで検査を待つ一方、通常の処理は妨げられずに続きます。

なぜ存在するのか

デッドレターの送り先がないと、常に失敗する単一の毒入り項目が、キューを永久に詰まらせるか、静かに消えてしまうかのどちらかになります。デッドレターキューは安全弁です - 失敗を隔離し、健全な作業を妨げることなく、可視化され回復可能な状態にします。

CIとの類推

自己修復型のpipelineでも同じ論理が当てはまります。一時的に失敗するjobはリトライされますが、リトライ予算を超えて失敗し続けるjobを永遠にリトライすべきではありません。これがデッドレターのケースです - リトライを止め、本物の失敗として印を付け、人間の目に触れるようにします。これ以上のリトライは役に立たないからです。

デッドレター化した作業をどうするか

  • 検査して、実際の持続的な原因を突き止めます。
  • 毒入り項目(決して成功しない)を、長時間の障害と区別します。
  • 根本原因を修正し、その後任意で再実行またはreplayします。
  • 静かな失敗が蓄積しないよう、デッドレターの量についてアラートを出します。

Latchkeyの視点

限定されたリトライは、誠実な自己修復の中心です。Latchkeyの自己修復型マネージドrunnerは、一度きりの乱れがあなたのbuildを失敗させないよう、一時的および機械的な障害をリトライしますが、永遠にはリトライしません - 上限を超えて失敗し続けるjobは、静かにループするのではなく、本物の失敗として浮かび上がります。

重要なポイント

  • デッドレターは、リトライを続けるには失敗しすぎた作業を保持します。
  • 毒入り項目がキューを詰まらせたり、静かに失われたりするのを防ぎます。
  • CIでは、リトライが尽きて人間が必要になるケースです。
  • 誠実な自己修復には、無限のリトライではなく、リトライの上限があります。

関連ガイド