SpringCloud Circuit Breakingと言えば、昨年の株式市場での回路が破壊されたことを思い出させます。私は多くの痛みを伴う時代に気づきました。システム全体に対するランダム回路破壊の影響は悲惨です。さて、次に深刻な問題について話しましょう。
ヒューズ
雪崩効果
マイクロサービスアーキテクチャには、通常、呼び出す複数のサービスレイヤーがあります。基礎となるサービスの障害により、カスケード障害が発生する可能性があり、これによりシステム全体が利用できなくなります。この現象は、サービス雪崩効果と呼ばれます。サービス雪崩効果は、「サービスプロバイダー」の利用不能が「サービス消費者」の利用不能につながり、徐々に利用不能を増幅するプロセスです。
以下の図が次のように示されている場合、Aはサービスプロバイダーであり、BはAのサービス消費者であり、CとDはBのサービス消費者です。Aの利用不能はBの利用不能であり、利用不能が雪玉のようにCとDに拡大する場合、雪崩効果が形成されます。
サーキットブレーカー
ヒューズの原理は、電力過負荷プロテクターのように非常に単純です。迅速な障害を達成できます。一定期間にわたって多くの同様のエラーを検出すると、その後の呼び出しが迅速に失敗し、リモートサーバーにアクセスしなくなるため、アプリケーションが絶えず故障操作を実行しようとすることができなくなり、アプリケーションがエラーの修正を待たずに実行し続けるか、CPU時間を長い時間を浪費することなく実行し続けます。ヒューズは、アプリケーションがエラーが修正されているかどうかを診断することもできます。また、それが修正された場合、アプリケーションは操作を再度呼び出そうとします。
ヒューズモードは、間違った操作に簡単につながる可能性のあるプロキシのようなものです。このプロキシは、最新の呼び出しで発生したエラーの数を記録し、Allow操作を使用するか、すぐにエラーを返すことを決定します。
ヒューズスイッチの相互変換のロジックは次のとおりです。
ヒューズは、サービスの高可用性を保護するための最後の防衛線です。
Hystrix機能
1。回路ブレーカーメカニズム
サーキットブレーカーは理解しやすいです。 Hystrixコマンドがバックエンドサービスの障害を特定の割合(デフォルト50%)を超えると要求すると、回路ブレーカーはオープン状態(オープン)に切り替わります。現時点では、バックエンドサービスに送信せずにすべてのリクエストが直接失敗します。回路ブレーカーが一定期間開いた状態に残った後(デフォルト5秒)、ハーフオープン状態(ハーフオープン)に自動的に切り替わります。この時点で、次のリクエストの返品ステータスが審査されます。リクエストが成功した場合、回路ブレーカーは閉回路状態(閉鎖状態)に戻ります。 Hystrixのサーキットブレーカーは、ホームサーキットのヒューズのようなものです。バックエンドサービスが利用できなくなると、回路ブレーカーはリクエストリンクを直接遮断し、システムスループットに影響を与える多数の無効な要求を送信しないようにします。サーキットブレーカーには、自己検出と回復する能力があります。
2.降伏
フォールバックは、ダウングレード操作に相当します。クエリ操作の場合、フォールバックメソッドを実装できます。要求されたバックサービスで例外が発生すると、フォールバックメソッドによって返される値を使用できます。フォールバックメソッドの返品値は、通常、デフォルト値によって設定されるか、キャッシュに由来します。
3。リソースの分離
Hystrixでは、リソースの分離は主にスレッドプールを介して達成されます。通常、それを使用するとき、私たちは呼び出すリモートサービスに従って複数のスレッドプールを分割します。たとえば、製品サービスを呼び出すコマンドはスレッドプールに配置され、アカウントサービスを呼び出すコマンドはBスレッドプールに配置されます。これの主な利点は、実行中の環境が隔離されていることです。このようにして、サービスを呼び出すコードがバグされている場合、または他の理由により消費されるスレッドプールが消費されたとしても、システムの他のサービスには影響しません。ただし、複数のスレッドプールを維持することで、システムに追加のパフォーマンスが向上するというコストがあります。厳密なパフォーマンス要件があり、サービスを呼び出すクライアントコードに問題がないと確信している場合は、Hystrixの信号モード(セマフォ)を使用してリソースを分離できます。
フィーンヒストリックス
サーキットブレーカーはサービスコールエンドでのみ動作するため、前の記事のサンプルコードに基づいて、Spring-Cloud-Consumerプロジェクトの関連コードを変更するだけです。 FeignはすでにHystrixに依存しているため、Maven構成に変更を加える必要はありません。
1。構成ファイル
これをApplication.Propertiesに追加します:
feign.hystrix.enabled = true
2。コールバッククラスを作成します
HelloreMoteHystrixクラスの継承とHelloreMoteを作成して、コールバックを実装します
@componentpublic class helloremotehystrixはhelloremote {@override public string hello(@requestparam(value = "name")string name){return "hello" +name +"、このメッセージは失敗しました"; }}3.フォールバック属性を追加します
指定されたフォールバッククラスをHelloreMoteクラスに追加し、サービスが回転したときにフォールバッククラスのコンテンツを返します。
@feignclient(name = "Spring-Cloud-Producer"、Fallback = helloremotehystrix.class)public interface helloremote {@requestmapping(value = "/hello")public string hello(@requestparam(value = "name")文字列名);}}これが変化のポイントであり、非常に簡単です。
4。テスト
次に、それをテストして効果を確認しましょう。
Spring-Cloud-Eureka、Spring-Cloud-Producer、Spring-Cloud-Consumerの3つのプロジェクトを開始します。
ブラウザ:http:// localhost:9001/hello/neoを入力します
戻り:こんにちはネオ、これは最初のメッセージです
これは、回路ブレーカー関連の情報を追加した後、通常のアクセスに影響しないことを意味します。次に、Spring-Cloud-Producerプロジェクトを手動で停止し、再度テストします。
ブラウザ:http:// localhost:9001/hello/neoを入力します
返信:こんにちはネオ、このメッセージは失敗しました
リターン結果によると、回路ブレーカーは正常に示されました。
サンプルコード
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。