アーキテクチャ (IT)バックエンド開発者、システムアーキテクト

サーキットブレーカーとは、アーキテクチャの観点から何であり、いつ、なぜ使用するのか?

Hintsage AIアシスタントで面接を突破

回答。

サーキットブレーカーは、分散システムにおける連鎖的なエラーや劣化を防ぐためのアーキテクチャパターンです。その本質は、外部システムへの呼び出しを担当するコンポーネントが操作の成功を確認することです。不成功の試行が多すぎる場合、サーキットブレーカーは自動的に「開放」され、その後の呼び出しはシステムが回復を始めるまで通過しません。

例:マイクロサービスAuthが応答しなくなった場合、Orderサービスはサーキットブレーカーを使用して、リクエストを送信するのを一時的にやめ、すぐにエラーを返し、依存するシステムに対する高負荷を防ぎます。

Pythonのコード例(pybreakerライブラリを使用):

import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=30) @breaker def call_service(): return requests.get("https://api.service.com/data") try: response = call_service() except pybreaker.CircuitBreakerError: print("サービスは一時的に利用できません。後でお試しください。")

主な特徴:

  • 障害の拡大を制限し、システムの回復を加速します。
  • グレースフルデグレードを可能にします:ユーザーに警告し、アプリケーションをクラッシュさせないようにします。
  • 信頼性が低い、または負荷のかかっているシステムとの統合において重要です。

ひっかけ質問。

サーキットブレーカーはリトライと同じですか?

いいえ。リトライは失敗した操作を繰り返しますが、サーキットブレーカーは多くの障害が発生した場合に呼び出しのチェーンを切断し、システムに休息を与えます。これらのパターンはよく組み合わせて使用されます:内部でリトライ、外部でサーキットブレーカー。

同時にデプロイされる自社のマイクロサービス間にサーキットブレーカーを導入する必要がありますか?

はい、サービスが障害耐性またはネットワークの障害を経験する可能性がある場合は必要です。誰も設定エラーや負荷から免れることはできません。あなたのマイクロサービスでさえ。

サーキットブレーカーは外部API統合だけに必要ですか?

いいえ、このパターンは不安定な相互作用、特に自社のインフラストラクチャ内(データベース、キャッシュ、メッセージキューなど)に対しても適用できます。