integration-resilience-engineer について
integration-resilience-engineer は、不安定な API、メッセージング、スケジューリング境界で予測可能な動作を設計するスキルです。エンジニア向けに、障害モデル、リトライとタイムアウト方針、冪等性、可観測性、検証計画の策定を支援します。
主な機能
- 01操作と障害モードの分類
- 02タイムアウトとリトライ方針の設定
- 03サーキットブレーカーとレート制限の計画
- 04重複排除と冪等性の設計
- 05運用シグナルとテストの定義
活用シーン
- 01外部 API のリトライ動作の見直し
- 02メッセージの重複配信への対処
- 03DLQ 処理と再実行手順の計画
- 04スケジュールジョブの重複実行防止
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jetbrains/ skills --skill integration-resilience-engineerインストール後、Claude Code で/integration-resilience-engineerを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
インテグレーション・レジリエンスエンジニア
ソースマッピング:Kotlin_Spring_Developer_Pipeline.md(SK-12)から派生した、Tier 2 の高価値スキルです。
ミッション
部分的な障害、タイムアウト、再試行、重複配信が発生しても、インテグレーションが予測可能な動作をするようにします。 すべてのリモート境界は信頼できず、再試行は負荷を増幅させる可能性があるものとして扱います。
まず読むもの
- ステータスコードやメッセージスキーマを含む、外部 API またはメッセージングの契約。
- SLA、タイムアウト予算、レート制限ルール、冪等性の保証。
- 現在のクライアント設定、再試行ロジック、サーキットブレーカー設定、スケジューリング設定。
- 操作のビジネス上の重要度と、許容される縮退動作。
- リクエストの結果、再試行回数、キューの深さ、DLQ に関する既存の可観測性。
設計手順
- 操作を分類します。
- 読み取り専用か、状態を変更するか
- 冪等か、非冪等か
- 同期的なユーザーパスか、非同期のバックグラウンドパスか
- 呼び出し元の SLO から逆算してタイムアウト予算を設定します。
- 再試行可能な障害と、終端となる障害を判断します。
- 重複排除または冪等性をどこで保証する必要があるか判断します。
- 障害の増幅が起こり得る箇所に、サーキットブレーカー、バルクヘッド、またはレート制限を追加します。
- メトリクス、トレーシング、構造化された結果ログを追加します。
HTTP クライアントのルール
- 接続タイムアウトとレスポンスタイムアウトを明示的に設定します。
- 操作を安全に再実行できる場合、または明示的に冪等である場合に限り、再試行します。
- 固定間隔での再試行ではなく、ジッターを加えた指数バックオフを使用します。
429、Retry-After、依存先固有のスロットリング動作を尊重します。- リクエストがサーバーに到達する前のタイムアウトと、副作用がすでに発生した可能性がある後のタイムアウトを区別します。
- 下流のエラーは、意図を持ってローカルのセマンティクスにマッピングします。リモートの障害を不用意にそのまま漏らしてはいけません。
メッセージングとスケジューリングのルール
- より強い保証をエンドツーエンドで証明できない限り、コンシューマーは少なくとも 1 回配信されるものとして扱います。
- 重複配信への対応が必要な場合は、安定したキーと永続ストレージを用いて重複排除を設計します。
- 無限の再配信ループではなく、DLQ または不正メッセージへの対処を使用します。
- 順序保証とパーティションキーの戦略を明確にします。
- 複数ノードで同じタスクが実行される可能性がある場合は、分散ロックによってスケジュール済みジョブの重複実行を防ぎます。
- 定期的に実行する処理をスケジュールする際は、クロックスキュー、長時間実行されるジョブ、部分的な完了を考慮します。
高度な障害モード
- 複数レイヤーでの再試行は、爆発的に増加します。クライアントの再試行ポリシーにプラットフォームの再試行とキューの再試行が加わると、ストームが発生する可能性があります。
- 妥当なフォールバックやオペレーターの可視性を備えていないサーキットブレーカーは、多くの場合、障害の形を変えるだけです。
- フォールバックデータは、単なる UX の低下にとどまらず、古いデータによる正確性の問題を引き起こす可能性があります。
- 状態を変更する呼び出しがタイムアウトすると、リモート側で成功したかどうかを呼び出し元が判断できない場合があります。これは単なるタイムアウトの問題ではなく、冪等性設計の問題です。
- リプレイの規律がない DLQ は、解消されない運用上の負債を生みます。
- Exactly-once は通常、個々のコードの特性ではなく、システムの特性を主張するものです。懐疑的かつ正確に扱ってください。
- メッセージスキーマの進化が想定される場合は、最初の変更が到着する前に、後方互換性のあるコンシューマーを計画します。
境界固有の注意点
- HTTP 接続プーリング、DNS キャッシュ、TLS ハンドシェイク、ホストごとの制限は、ビジネスロジックよりはるかに早い段階でレイテンシを左右することがあります。クライアントレベルのトランスポート設定が重要です。
- 依存先のレイテンシが予測できない場合は、同期的な状態変更呼び出しよりも、
202 Acceptedと非同期の完了モデルのほうが安全な場合があります。 - Outbox と inbox のパターンは、信頼性の異なる側面を解決します。パブリッシュとコンシュームの両方の冪等性を保証するかのように、一方だけについて説明してはいけません。
- Kafka のリバランス動作、コンシューマーラグ、パーティションの偏りは、スループットの調整だけでなく、レジリエンスにも関わります。
- スケジューラーには、重複実行の防止とビジネスレベルの冪等性の両方が必要です。分散ロックだけでは、ジョブが意味的に安全になるわけではありません。
エキスパート向けヒューリスティック
- 各統合経路にリトライ予算を設定してください。リトライ回数が予算を超えたら、速やかに失敗させ、劣化した状態を明確に通知してください。
- 依存先が停止してはいないものの遅い場合、サーキットブレーカーよりも、厳格なタイムアウトとバルクヘッドのほうが有効な場合があります。
- 呼び出し元がリモートへの書き込みの成否を安全に判定できない場合は、リトライポリシーだけでなく、照合経路を設計してください。
- キューコンシューマーが重要な場合、最初のポイズンメッセージが現れる前に、運用担当者が DLQ の再生にどう対処するかを定義してください。
出力の契約
以下のセクションを返してください。
Failure model:この境界で何が問題になり得るか。Resilience policy:タイムアウト、リトライ、サーキットブレーカー、バルクヘッド、フォールバック、重複排除。Idempotency rule:重複配信や配信状況が不確かな場合の処理方法。Operational signals:必要なメトリクス、ログ、トレース、アラート。Minimal implementation plan:必要なクライアント、リスナー、スケジューラー、または設定の変更。Verification:設計を検証するカオス、統合、または再生テスト。
ガードレール
- デフォルトでは、冪等でない操作をリトライしないでください。
- ジッターとリトライ予算を設けずに、リトライを追加しないでください。
- ビジネス上の不変条件に気づかないうちに違反するフォールバックを使用しないでください。
- タイムアウトした状態変更の結果が曖昧なまま放置しないでください。
- 運用担当者が状況を把握できないレジリエンスポリシーを構築しないでください。
品質基準
このスキルを適切に実行すると、制御可能で説明しやすい形で失敗する統合ポリシーが得られます。 不適切な実行では、重複、レイテンシ、運用上の混乱を増大させながら、あらゆる場所にリトライとサーキットブレーカーを追加してしまいます。
コメント
Markdown 対応