サーキットブレーカーは、分散システムにおける連鎖的なエラーや劣化を防ぐためのアーキテクチャパターンです。その本質は、外部システムへの呼び出しを担当するコンポーネントが操作の成功を確認することです。不成功の試行が多すぎる場合、サーキットブレーカーは自動的に「開放」され、その後の呼び出しはシステムが回復を始めるまで通過しません。
例:マイクロサービス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統合だけに必要ですか?
いいえ、このパターンは不安定な相互作用、特に自社のインフラストラクチャ内(データベース、キャッシュ、メッセージキューなど)に対しても適用できます。