Springcloud Circuit Breaking에 대해 말하면 작년 주식 시장에서의 회로 파괴를 떠올리게합니다. 나는 많은 고통스러운 시간을 깨달았습니다. 랜덤 회로가 전체 시스템에 미치는 영향은 비참합니다. 글쎄, 다음에 심각한 문제에 대해 이야기합시다.
퓨즈
눈사태 효과
마이크로 서비스 아키텍처에는 일반적으로 호출 할 여러 서비스 계층이 있습니다. 기본 서비스의 실패로 인해 캐스케이드 고장이 발생하여 전체 시스템을 사용할 수 없습니다. 이 현상을 서비스 눈사태 효과라고합니다. 서비스 눈사태 효과는 "서비스 제공 업체"의 사용할 수없는 프로세스가 "서비스 소비자"의 이용 불가능을 초래하고 점차적으로 사용할 수없는 프로세스입니다.
아래 그림이 표시되는 경우 : A는 서비스 제공 업체이고 B는 A의 서비스 소비자이고 C 및 D는 B의 서비스 소비자입니다. A의 원인을 사용할 수 없음과 Avavale가 눈덩이처럼 C 및 D로 확대 될 때 Avalanche 효과가 형성됩니다.
회로 브레이커
퓨즈의 원리는 전력 오버로드 보호기와 같이 매우 간단합니다. 빠른 실패를 달성 할 수 있습니다. 일정 기간 동안 많은 유사한 오류를 감지하면 후속 호출이 빠르게 실패하고 더 이상 원격 서버에 액세스하지 못하므로 응용 프로그램이 지속적으로 실패 작업을 수행하려고 시도하지 않아 오류 수정을 기다리지 않고 응용 프로그램이 계속 실행되거나 CPU가 긴 시간이 발생할 때까지 대기 할 수 있습니다. 퓨즈를 사용하면 응용 프로그램이 오류가 고정되었는지 여부를 진단하고 고정 된 경우 응용 프로그램이 작업을 다시 호출하려고합니다.
퓨즈 모드는 쉽게 잘못된 작업으로 이어질 수있는 프록시와 같습니다. 이 프록시는 가장 최근 호출에서 발생한 오류 수를 기록한 다음 허용 작업을 사용하여 계속하거나 오류를 즉시 반환하기로 결정할 수 있습니다.
퓨즈 스위치의 상호 변환 논리는 다음과 같습니다.
퓨즈는 서비스의 고 가용성을 보호하기위한 마지막 방어선입니다.
Hystrix 기능
1. 회로 차단기 메커니즘
회로 차단기는 이해하기 쉽습니다. Hystrix 명령이 백엔드 서비스 실패가 특정 비율 (기본 50%)을 초과하도록 요청하면 회로 차단기가 열린 상태 (Open)로 전환됩니다. 현재 모든 요청은 백엔드 서비스로 보내지 않고 직접 실패합니다. 회로 차단기가 일정 기간 (기본 5 초) 동안 개방 상태에 남아 있으면 하프 오픈 상태 (하프 오픈)로 자동으로 전환됩니다. 현재 다음 요청의 반환 상태가 판단됩니다. 요청이 성공하면 회로 차단기가 폐쇄 회로 상태 (폐쇄)로 다시 전환됩니다. 그렇지 않으면 개방 상태 (열린)로 전환됩니다. Hystrix의 회로 차단기는 홈 회로의 퓨즈와 같습니다. 백엔드 서비스를 사용할 수 없으면 회로 차단기는 요청 링크를 직접 차단하여 시스템 처리량에 영향을 미치는 많은 유효하지 않은 요청을 보내지 않습니다. 회로 차단기는 자기 감지 및 복구 능력이 있습니다.
2. 폴백
폴백은 다운 그레이드 작업과 같습니다. 쿼리 작업의 경우 폴백 방법을 구현할 수 있습니다. 요청 된 백 서비스에서 예외가 발생하면 폴백 방법에 의해 반환 된 값을 사용할 수 있습니다. 폴백 방법의 반환 값은 일반적으로 기본값으로 설정되거나 캐시에서 나옵니다.
3. 자원 격리
Hystrix에서는 자원 분리가 주로 스레드 풀을 통해 달성됩니다. 일반적으로 사용할 때는 원격 서비스에 따라 여러 스레드 풀을 나눕니다. 예를 들어, 제품 서비스를 호출하는 명령은 스레드 풀에 배치되며 계정 서비스를 호출하는 명령은 B 스레드 풀에 배치됩니다. 이것의 주요 장점은 실행중인 환경이 분리되어 있다는 것입니다. 이런 식으로 서비스를 호출하는 코드가 버그를 띠거나 다른 이유로 인해 소비되는 스레드 풀이 있더라도 시스템의 다른 서비스에는 영향을 미치지 않습니다. 그러나 비용은 여러 스레드 풀을 유지하면 추가 성능 오버 헤드를 시스템에 가져옵니다. 성능 요구 사항이 엄격하고 서비스를 호출하는 클라이언트 코드에 아무런 문제가 없다고 확신하면 Hystrix의 신호 모드 (세마포어)를 사용하여 리소스를 분리 할 수 있습니다.
Hystrix를 Feign
회로 차단기는 서비스 호출 종료에서만 작동하기 때문에 이전 기사의 예제 코드를 기반으로 스프링 클라우드 소비자 프로젝트의 관련 코드 만 변경하면됩니다. Feign은 이미 Hystrix에 의존하기 때문에 Maven 구성을 변경할 필요가 없습니다.
1. 구성 파일
이것을 application.properties에 추가하십시오.
feign.hystrix.enabled = true
2. 콜백 클래스를 만듭니다
콜백을 구현하기 위해 HelloremoteHystrix 클래스 상속 및 HellorEMote를 만듭니다
@ComponentPublic Class HelloremoteHystrix는 HellorEMote를 구현합니다. {@Override public String Hello (@requestParam (value = "name") 문자열 이름) {return "hello" +name +",이 메시지를 실패했습니다. }}3. 폴백 속성을 추가하십시오
지정된 폴백 클래스를 Helloremote 클래스에 추가하고 서비스가 회로가되면 폴백 클래스의 내용을 반환하십시오.
@feignclient (name = "spring-cloud-producer", follback = helloremotehystrix.class) public 인터페이스 helloremote {@requestmapping (value = "/hello") public string hello (@requestparam (value = "name") 문자열 이름);}이것이 변화의 요점입니다. 매우 간단합니다.
4. 테스트
그런 다음 효과를 확인하기 위해 테스트합시다.
세 가지 프로젝트를 시작하여 Spring-Cloud-Eureka, Spring-Cloud-Producer 및 Spring-Cloud-Consumer를 시작하십시오.
브라우저를 입력하십시오 : http : // localhost : 9001/hello/neo
반환 : 안녕하세요 Neo, 이것은 첫 번째 메시지입니다
이는 회로 차단기 관련 정보를 추가 한 후 정상 액세스에 영향을 미치지 않음을 의미합니다. 다음으로 Spring-Cloud Producer 프로젝트를 수동으로 중지하고 다시 테스트합니다.
브라우저를 입력하십시오 : http : // localhost : 9001/hello/neo
반환 : 안녕하세요 Neo,이 메시지 보내기 실패
리턴 결과에 따르면 회로 차단기가 성공적으로 표시되었습니다.
샘플 코드
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.