マイクロアーキテクチャを構築する春クラウドサービス:保護サービスのフォールトトレラントHystrixのサービス低下

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/IT_Luobin/article/details/102756503

マイクロサービスアーキテクチャでは、システムは、アプリケーション間の各ユニットは、サービス登録およびサブスクリプションベースを介して相互に依存して、サービス単位の数に分割されます。各ユニットは別のプロセスで実行されているので、呼び出しに依存した方法をリモート実行することにより、その呼び出しの失敗や遅延がネットワーク上の理由または依存サービス自分の問題ため発生する可能性があり、これらの問題は、直接呼び出し側の外交サービスにつながるあり呼び出し側の要求が増加している場合も、この時点で遅延させ、最終的にはバックログに応じてタスクを形成するために、証明書利用者を待っているの故障があるだろう、スレッドのリソースは、最終的には自分自身のサービスの麻痺、あるいは失敗した最終のさらなる普及につながる、解放することができませんシステム全体の麻痺が生じます。そのようなフレームワークは、このような重大な危険が存在する場合は、なおさら不安定性の伝統的な建築と比較。これサーキットブレーカやその他の保護サービスのシリーズを作成し、この問題を解決するには。

これらの問題に対応して、春クラウドHystrixにおけるサービス保護スレッドの分離、回路ブレーカ、などのシリーズを達成するために。また、フレームワークは、遅延や失敗のより堅牢な耐障害性を提供​​し、それらのリモートノードシステム、サービス、およびサードパーティのライブラリへのアクセスを制御することを目指し、HystrixのオープンソースNetflixのフレームワークに実装基づいています。Hystrixは、サービス低下、サービスヒューズ、スレッド分離、要求キャッシング、要求のマージとサービスの監視および他の強力な機能を有しています。

次に、我々は簡単な例から学び、春クラウドHystrixに使用し始めました。

手を試してみてください

あなたは春のクラウドHystrixはブレーカーを達成使用を開始する前に、私たちは前に実装するための基礎として取得何か、を含みます:

  • eureka-serverプロジェクト:登録サービスセンター、ポート:1001
  • eureka-clientプロジェクト:サービスプロバイダは、開始ポート2001の2つの例です

今、私たちは、消費者サービスの実施に先立って、それをコピーすることができます:eureka-consumer-ribbon命名しますeureka-consumer-ribbon-hystrixここでは、でそれらを変更し始めます。

最初のステップ:pom.xmlノードの依存関係を導入spring-cloud-starter-hystrix依存:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

ステップ2:アプリケーションのメインクラスを使用し@EnableCircuitBreakerたり@EnableHystrixの注釈付きオープンHystrixの使用を:

@EnableCircuitBreaker
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	public static void main(String[] args) {
		new SpringApplicationBuilder(Application.class).web(true).run(args);
	}

}

注:ここでは、また、春のクラウドアプリケーションを使用することができます@SpringCloudApplication示す注釈が以下に具体的に定義され、主クラスの注釈を修正しています。私たちは、注釈が私たちの3引用上の注意事項が含まれていることを見ることができ、これは、標準のアプリケーションが春のクラウドサービスの発見と回路ブレーカを含むべきであることを意味します。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {
}

第三段階:サービス消費の変換、新しいConsumerServiceクラス、およびその後にController最後の論理マイグレーション。最後に、特定の機能に論理的な増加を実行するための@HystrixCommandサービスをダウングレードする方法を指定するには、注釈を、例えば:

@RestController
public class DcController {

    @Autowired
    ConsumerService consumerService;

    @GetMapping("/consumer")
    public String dc() {
        return consumerService.consumer();
    }

    class ConsumerService {

        @Autowired
        RestTemplate restTemplate;

        @HystrixCommand(fallbackMethod = "fallback")
        public String consumer() {
            return restTemplate.getForObject("http://eureka-client/dc", String.class);
        }

        public String fallback() {
            return "fallback";
        }

    }

}

のは、上記のHystrixがもたらす確認するために、いくつかの基本的な機能を見てみましょう。私たちは、最初のカバーのサービスは、アクセスを起動され、localhost:2101/consumerその後、次のような、通常のリターンを得ることができ、: Services: [eureka-consumer-ribbon-hystrix, eureka-client]

サービス低下のロジックをトリガーするために、我々は、プロバイダサービスを提供することができますeureka-client:論理のような、いくつかの遅延を追加します

@GetMapping("/dc")
public String dc() throws InterruptedException {
    Thread.sleep(5000L);
    String services = "Services: " + discoveryClient.getServices();
    System.out.println(services);
    return services;
}

再起動しeureka-clientた後、次にアクセスしてみてくださいlocalhost:2101/consumer、そして、我々が得た結果は返されます:fallback私たちeureka-clientのコンソール、あなたは、サービスコンシューマは、サービス要求のタイムアウト例外をトリガしながら、返す前にHystrixCommandで指定されたサービスコンシューマアノテーションをサービスプロバイダーの出力の結果が返されなければならなかった見たが、原因5秒の遅延にすることができます実行ロジックが劣化するので、リクエストリターン結果fallbackセルフサービスのような機構は、基盤を保護するために役立った、だけでなく、サービスの劣化メカニズムの自動切り替えが異常で提供します。

おすすめ

転載: blog.csdn.net/IT_Luobin/article/details/102756503