ビルドレジリエンスとは?わかりやすく解説
ビルドレジリエンスとは、一時的および機械的な障害を吸収し、あらゆる小さな不調で赤くなるのではなく、それでも信頼できる結果を届けるパイプラインの能力です。
信頼性とは障害がないことではありません。世界はそのためにはあまりに不安定です。レジリエンスとは、障害があっても動き続ける能力です。レジリエントなパイプラインは、実際にはコードとは関係のない障害から回復し、本当にコードに起因する障害のためだけに赤を残しておきます。
レジリエンス vs 信頼性
信頼性は物事がどれだけ頻繁にうまくいくかであり、レジリエンスは物事がうまくいかないときにシステムがどれだけうまく対処するかです。ネットワーク、registry、runner を決して障害を起こさないようにすることはできませんが、そうした障害から優雅に回復するパイプラインを構築することはできます。レジリエンスが現実的な目標です。
ビルドをレジリエントにするもの
- 決定論的で隔離されたテスト。結果がタイミングや状態で変わらないように。
- 適切にサイジングされた runner。リソース起因の kill が稀になるように。
- 本当に一時的な障害に対する自動的かつ上限付きの retry。
- cache とミラー。単一の上流の不調を乗り越えられるように。
- 障害を分類する可観測性。適切なものだけが retry されるように。
自己修復の役割
自己修復はレジリエンスの能動的な中核です。一時的または機械的な障害を検知して自動的に回復する仕組みであり、瞬間的な不調が赤いビルドや人手による中断になることを防ぎます。それがなければ、あらゆる一時的な障害が手動の回復作業になります。
レジリエンスが意味しないこと
レジリエンスは本当の障害を隠すことではありません。レジリエントなパイプラインは、決定論的な問題では依然として速く大きく失敗します。ただ環境ノイズをコードのバグであるかのように扱うのをやめるだけです。目指すのは、より高いシグナル対ノイズ比であって、真陽性の見逃しを減らすことではありません。
Latchkey の視点
一時的なインフラに対するビルドレジリエンスこそ、Latchkey が提供するものです。自己修復するマネージド runner が、メモリ不足による kill、ネットワークの不調、registry のタイムアウトといった一時的および機械的な障害を検知して自動的に retry するため、一度きりの不調でビルドが失敗することはなく、それでいて本物のコードの障害は依然として速く失敗します。
重要なポイント
- ビルドレジリエンスとは、障害を完全に避けるのではなく、障害に対処することです。
- レジリエンスは信頼性とは異なり、回復に関するものです。
- 決定論性、適切なサイジング、retry、cache、可観測性がそれを築きます。
- 自己修復が能動的な中核であり、本当の障害を隠すことはありません。