雪崩
マイクロサービスアーキテクチャでは、一つのサービスに分割するサービスによれば、各RPCサービスによって、サービス間で呼び出すことができます。
可用性を確保するために、単一のサービスは、多くの場合、展開をクラスタ化します。
多数の要求の流入は、サーブレットコンテナのスレッドのリソースが完成消費される場合は、ネットワーク上の理由として、あるいは自分自身の理由のために、サービスの単一のサービスの問題が発生した場合、このサービスを呼び出すために、100%が利用可能保証するものではありませんが、スレッドは、この時点で、ブロックされます、サービスの麻痺になります。
サービスおよびサービスの障害の間の依存関係広がっていく、全体のマイクロシステムにサービスを提供しますが、悲惨な深刻な影響を持っている、これは「なだれ」効果のサービス障害です。
この問題を解決するために、業界では、ヒューズのモデルを作りました。
春クラウド内Hystrixを使用して
1、サービスプロバイダ実装Hystrix
依存追加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
@EnableHystrixでアプリケーションノートの増加
@EnableHystrix
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
Main.main(args);
}
}
@HystrixCommandサービス注釈の増加
増加が呼び出すメソッドで構成され、その後、呼び出しはHystrixエージェントを通過します@HystrixCommand。
@Service(version = "${user.service.version}")
public class UserServiceImpl implements UserService {
@Value("${dubbo.protocol.port}")
private String port;
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
})
@Override
public String sayHi() {
// return "Hello Dubbo, i am from port:" + port;
throw new RuntimeException("Exception to show hystrix enabled.");
}
}
sayHiメソッドは例外ではなく、いわゆるディスプレイ・サーバ500エラーなどをスロー。これは、ページの異常に表示された情報が表示されます。例外はhystrixが有効に示すこと。
hystrixを達成するために2、サービスコンシューマ
Hystrixやサービスプロバイダーはほぼ同じことを達成するためには、唯一の呼び出し方法にコメントを@HystrixCommand追加と方法fallbackMethodを指定する必要があります
@RestController
public class UserController {
@Reference(version = "${user.service.version}")
private UserService userService;
@HystrixCommand(fallbackMethod = "hiError")
@RequestMapping(value = "hi")
public String sayHi() {
return userService.sayHi();
}
public String hiError() {
return "Hystrix fallback";
}
}
こんにちは呼び出し方法は、ブラウザがHystrixフォールバックを表示します。代わりに500エラーの
3、ヒューズダッシュボード
2つのリノベーションプロジェクトと同じようにHystrixダッシュボードプロバイダとコンシューマプロジェクトを増やします。
増加依存
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
@EnableHystrixDashboardでアプリケーションノートの増加
@EnableHystrix
@EnableHystrixDashboard
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
Main.main(args);
}
}
サーブレットの設定hystrix.streamの作成
@Configuration
public class HystrixDashboardConfiguration {
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}
テストHystrixダッシュボード
のアクセス、ブラウザでhttp:// localhostを:9090 / hystrixインタフェースは次のようされています。