1 : Hystrix 란 무엇입니까?
분산 환경에서 많은 서비스 종속성 중 일부는 필연적으로 실패합니다. Hystrix는 대기 시간 공차 및 결함 공차 로직을 추가하여 이러한 분산 서비스 간의 상호 작용을 제어하는 데 도움이되는 라이브러리입니다. Hystrix는 서비스 간의 액세스 포인트를 분리하고, 그 사이에 계단식 고장을 중지하고, 폴백 옵션을 제공함으로써 시스템의 전반적인 탄력성을 향상시킵니다.
Hystrix는 다음을 수행하도록 설계되었습니다
1 : 제 3 자 클라이언트 라이브러리 (일반적으로 네트워크를 통해)를 통해 액세스 할 수있는 의존성에 대한 보호 및 제어 대기 시간 및 실패를 제공합니다.
2 : 복잡한 분산 시스템에서 계단식 고장을 분리합니다.
3 : 결함을 신속하게 감지하고 가능한 빨리 회복하십시오.
4 : 가능한 한 우아하게 되감기와 다운 그레이드.
5 : 거의 실시간 모니터링, 경고 및 운영 제어를 활성화합니다.
2 : hystrix가 필요한 이유는 무엇입니까?
대규모 분산 시스템에서 클라이언트 또는 서비스는 외부 서비스에 따라 다릅니다. 서비스가 다운되면 서비스 호출 시스템 시간 초과 시간을 설정하여 필연적으로 해당 시간에 영향을 미칩니다. 동시성이 높은 경우 대부분의 서버의 스레드 풀이 차단되어 (차단) 전체 온라인 서비스의 안정성에 영향을 미칩니다.
(사진 공식 사진)
모든 것이 건강 할 때 요청은 다음과 같이 보일 수 있습니다.
많은 백엔드 서비스 시스템 중 하나가 다운되면 전체 사용자가 요청합니다.
여러 클라이언트가 동일한 예외 서비스를 호출하면 상황이 발생합니다.
3 : Hystrix는 어떤 문제를 해결합니까?
분산 아키텍처의 응용 프로그램에는 수십 개의 종속성이 있으며 각 종속성은 필연적으로 어느 시점에서 예외가 있습니다. 애플리케이션이 이러한 외부 고장에서 분리되지 않으면 스레드 풀 차단이 발생하여 시스템 눈사태가 발생할 수 있습니다.
예를 들어, 30 개의 서비스에 의존하는 응용 프로그램의 경우 각 서비스는 99.99%의 상승 시간이 있습니다.
30 = 99.7% 가동 시간 전력의 99.99%
10 억 요청의 0.3% = 3,000,000 실패
모든 종속성 가동 시간에도 2 시간 이상 다운 타임/월.
회로 파괴에 Hystrix를 사용할 때, 각각 의존성은 서로 분리되어 지연이 발생할 때 막힘을 제한합니다.
Four : Hystrix는 Feign과 결합되었습니다
프로젝트를 만듭니다. eureka_feign_hystrix_client를 만듭니다
pom.xml 파일 컨텐츠
<pectionies> <pectinement> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-feign </artifactid> </depectency> <groupid> org.springframework.cloud </groupid> <prection-starter-eureka </artifactid> <groupid> org.springframework.boot </groupid> <artifactid> Spring-boot-starter-web </artifactid> </fectionency> <pectionement> <groupid> org.spramframewort.boot </groupid> <artifactid> spring-boot-starter-actuator </artifactid> </felevency> <groupid> org.springframework.boot </groupid> <artifactid> 스프링-부트 스타터-테스트 </artifactid> <cope> test </scope> </dependency> </dependencies> <pectionalse> <pection> <groupId> org.springframoud.cloud> <Artifactid> Spring-Cloud-Dependencies </artifactid> version> brixton.sr5 </version> <type> pom </type> <cope> import </scope> </fectionency> </fectionements> </fectionencyManagement>
시작 파일을 만듭니다
FeignHyStrixApplication
@springbootApplication@enablediscoveryClient@enableFeignClientSpublic class feignHyStrixApplication {public static void main (string [] args) {springApplication.Run (feignHyStrixApplication.class, args); }}사용자 클래스 클래스
@FeignClient (value = "biz-service-0", follback = userclientHyStrix.class) public 인터페이스 userClient {@requestmapping (method = requestMethod.get, value = "/getUser") public user getUserInfo (); @requestmapping (method = requestMethod.get, value = "/getUser") public String getUserInfostr (); @requestmapping (method = requestmethod.get, value = "/info") public String info ();}Flash Breaker 클래스 사용자 ClientHyStrix를 만듭니다
@ServicePublic 클래스 userClientHyStrix userClient {@Override public user user getUserInfo () {throw new nullPointerException ( "user getUserInfo () 서비스가 불가능합니다 .."); } @override public string getUserInfostr () {return "userClientHyStrix getUserInfostr ()가 폴백 서비스가 사용할 수 없습니다 .."; } @override public String info () {return "userClientHyStrix info () inter helback service가 사용할 수 없습니다 .."; }}네트워크에서 예외가 발생하면 여기에서 구현 클래스로 직접 이동할 수 있습니다.
액션 클래스를 만듭니다
Usercontroller
@autowired userclient userclient; @requestMapping (value = "/getUserInfo", method = requestMethod.get) 공개 사용자 getUserInfo () {return userClient.getUserInfo (); } @requestmapping (value = "/getUserInfostr", method = requestMethod.get) public String getUserInfostr () {return userClient.getUserInfostr (); } @requestmapping (value = "/info", method = requestMethod.get) public String info () {return userClient.info (); }시작 : eureka_register_service (Register Center) 프로젝트를 시작하십시오
그런 다음 우리가 쓴 FeignHyStrixApplication을 실행하십시오
현재 Biz-Service-0 서비스가 실행되지 않았다는 것을 알았으므로 http://127.0.0.1:8005/getuserinfostr을 열었습니다.
나타나다
userclientHystrix getUserInfostr ()가 폴백입니다. 서비스를 사용할 수 없습니다. .
이것은 우리의 커스텀 회로 리턴 결과입니다
페이지를 끊을 필요가 없다면 이것이 나타납니다.
Whitelabel 오류 Pagethis Application은 명시적인 매핑 /오류가 없으므로 폴백으로 표시됩니다. WED 3 월 22 일 14:32:21 CST 2017 예상치 못한 오류 (유형 = 내부 서버 오류, 상태 = 500) .getUserInfo 실패 및 폴백 실패였습니다.
코드 주소 : https://github.com/zhp8341/springclouddemo
또한 일부 Hystrix 관련 원리를 읽었습니다. 나는 그것들을 모두 읽지 않았기 때문에 아직 글을 쓰지 않았습니다. 이 기사는 Feign의 사용 및 학습을 기반으로합니다.
관심이 있으시면 공식 Hystrix 세부 정보를 확인할 수 있지만 조금 어려워 보입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.