バックエンド・API・データ · 上級

外部サービスへの呼び出しの信頼性

一行でいうと: すべての発信呼び出しはいずれか失敗する——唯一の質問は、そのとき何が起きるかを計画していたかどうかだ。

四つのメカニズム

タイムアウト。すべての呼び出しで、常に。時間制限のない呼び出しはシステムが窒息するまでリソースを保持する。

成長する遅延でのリトライ。安全に繰り返せるアクションのみ、一時的なエラーのみ。バリデーションエラーのリトライは無駄だ。

サーキットブレーカー。一連の失敗の後、しばらく試みるのをやめる。あなたと既に苦しんでいるサービスを保護する。

縮退モード。サービスが利用できないとき、システムが何を表示するか:キャッシュされたデータ、部分的な機能、または明確なメッセージ。

重複の問題

タイムアウトで呼び出しが失敗したとき、アクションが実行されたかどうかは不明だ。影響のあるすべてのアクション——課金、送信、作成——で、相手側が繰り返しを検出できるユニークキーを送る。それなしに、リトライは二重請求になる可能性がある。

何を監視するか

外部サービスごとに別々のエラー率と応答時間、サーキットブレーカーの状態。あなたの側で「システムが遅い」として現れるベンダーの障害は、何時間もの不必要な調査を無駄にする。

さらに深く

クリティカルな依存と副次的なものを分離し、副次的なものがメインパスを落とせないことを確認する。同期パスの分析や充実サービスは、ビジネス上の正当化なしの障害点だ。