雪崩
マイクロサービスアーキテクチャでは、通常、複数のサービス層の呼び出しを持っている、基本的なサービスの障害がカスケード故障につながり、システム全体は、アバランシェ効果サービスと呼ばれる現象使用できない恐れがあります。サービスアバランシェ効果は使用できない「サービスコンシューマ」の「サービスプロバイダ」の結果であることは利用可能と徐々にプロセスを大きく使用できないではありません。
それは以下に示されている場合:サービスプロバイダAのように、Bは、サービスコンシューマAであり、C及びDはBサービスコンシューマです。使用不能Bに使用できません、そして拡大雪だるま式のCおよびDに利用できない、アバランシェ効果が形成されています。
ヒューズ(CircuitBreaker)
ヒューズ原理は、電力過負荷保護として、非常に簡単です。失敗することがあり、それは時間をかけて多くの同様のエラーを検出した場合に失敗迅速に実装することはできません常に操作を実行しようとするアプリケーションを防ぐために、リモートサーバーにアクセスし、もはや、失敗、それを呼び出した後に、より迅速に強制されますアプリケーションは、エラー訂正、またはタイムアウトのための長い待ち時間を生成するために、CPU時間の無駄を待たずに実行を継続するように。ヒューズはまた、既に修正されたアプリケーションは、再度操作を呼び出そうとした場合、エラーが、修正されたかどうかを診断するためのアプリケーションを有効にすることができます。
これらのエラーが発生しやすいのヒューズモード動作のような演技。このエージェントは、最近のコールが発生したエラーの数を記録することができるその後、使用することを決定し、オペレータが継続することを可能にする、またはすぐにエラーを返します。ヒューズスイッチ論理変換は以下の通り:
ヒューズは、防衛の最後の行保護サービスの可用性です。
Hystrixプロパティ
1.回路遮断器機構
回路遮断器は、よくバックエンドサービス要求がHystrixコマンド量が一定の割合(デフォルト50%)を超えて失敗した場合、回路遮断器が開状態(オープン)に切り替わり、ことが理解される。この場合、すべての要求をバックエンドサービスの障害に直接送信されていません回路ブレーカが(バック、リクエストが成功した場合は、この場合の状況を返すように要求を決定します。自動的に半開状態(ハーフオープン)に切り替わります(デフォルトでは5秒)、一定期間後に開いた状態のままで、回路ブレーカーのスイッチの開閉状態CLOSED)、またはオープン状態(オープン)に切り替える。Hystrix回路ブレーカーがヒューズに私たちの家族のようなものですバックエンドサービスが利用できない一度、回路ブレーカが無効な要求を大量に送信することを避けるために、、リクエストの直接チェーンを切断するシステムのスループットに影響を与えますそして、回路遮断器は、自己テストおよび回復する能力を持っています。
2.Fallback
バックエンドサービスリクエスト例外は、あなたが値をフォールバック方式のリターンを使用することができたときにフォールバック同等のダウングレード。クエリ操作のために、我々は、フォールバック方式を実現することができます。戻り値は、通常はデフォルト値を設定したり、キャッシュのフォールバック方式からさ。
3.リソースの分離
我々は、複数のスレッドに分割されます際に通常使用されて、分離を達成するために、スレッドプールのリソースによって主にHystrixでリモートサービスコールをベースとプール。例えば、商品やサービスを呼び出すスレッドプール、コマンド呼び出しアカウントサービスプットをコマンドスレッドプールにB。これの主な利点は、動作環境を離れて設定されたことである。このようなサービスは、呼び出し元のコードのバグかによる他には、自分の時間のスレッドプールが使い果たされる原因となる場合でも、他のサービスシステムには影響しませんが、存在します。しかし、複数のスレッドを維持するためのコストは、追加のパフォーマンス・オーバーヘッドをもたらすでしょうプールシステムをもたらすことです。そこに厳格な性能要件であり、サービスを呼び出すためのクライアントコードは問題ではないと考えている場合、あなたは(Hystrix信号パターンを使用することができますリソースを分離するセマフォ)。
実現
前回の記事では、装うを使用して、実装がより便利な方法を理解するのに役立ちます装う呼び出し、サービスに呼び出します。
プロバイダノードがダウンし、アクセスできなくなったときに次の春の雲は問題がある、それはサービスの例外処理を行うことを意味し、ヒューズを与えてやります
クラスタの麻痺につながる、アバランシェ効果を防止するための契約を確認します。私たちは、発信者の消費者がそれを変換するサービスを提供する必要があります。
でサポート装うがあるためとHystrixを持っているので、新しい追加の輸入に依存しません
application.ymlオープンヒューズ
装う: hystrix: 有効:真
MessageRemoteHyx.javaヒューズは、コール・インタフェース装うを継承します
@Component パブリック クラスMessageRemoteHyxを実装MessageRemote { @Override パブリックマップハロー(){ 地図の地図 = 新規HashMapの()。 map.put(" メッセージ"、" Hello Worldのは誤りです!! " ); リターンマップ。 } }
MessageRemoteインタフェースが追加します
フォールバック= MessageRemoteHyx.class
@FeignClient(名= " PROVIDER "、フォールバック= MessageRemoteHyx.class ) パブリック インターフェースMessageRemote { @RequestMapping(値 = " /プロバイダ/ハロー" ) (ハローMAP)。 }
まず、装う通常の呼のHelloWorldサービスを介して
今すぐ手動でプロバイダを遮断し、再び呼び出します
再びプロバイダを開始した後、多少時間がかかる(5秒後にデフォルトを、セミオープン状態を回し、サービスにアクセスしようとした成功した場合、ヒューズをオフにします)