SpringCloud-Hystrix 구성 요소 사용 방법

https://github.com/Netflix/Hystrix
분포 식 환경 에서 많은 서비스 의존 항목 은 실패 할 수 밖 에 없다.Hystrix 는 지연 용인 과 잘못 사용 논 리 를 추가 하여 분포 식 서비스 간 의 상호작용 을 제어 하 는 데 도움 을 주 는 라 이브 러 리 입 니 다.Hystrix 는 격 리 서비스 간 의 방문 점,이들 간 의 직렬 고장 을 중단 하고 예비 옵션 을 제공 함으로써 이 를 실현 할 수 있다.이 모든 것 은 시스템 의 전체적인 탄력 을 향상 시 킬 수 있다.
통속 적 인 정의:Hystrix 는 분포 식 시스템 의 지연 과 용 오 를 처리 하 는 오픈 소스 라 이브 러 리 로 분포 식 시스템 에서 많은 의존 이 불가피 하 게 호출 실패,시간 초과,이상 등 을 할 수 있다.Hystrix 는 문제 에 의존 하 는 상황 에서 전체 서비스 실 패 를 초래 하지 않 고 직렬 고장(서비스 눈사태 현상)을 피하 고 분포 식 시스템 의 탄력 을 높 일 수 있다.
1.봉사 눈사태
1.서비스 눈사태 가 마이크로 서비스 간 에 서비스 호출 을 하 는 것 은 특정한 서비스 고장 으로 인해 직렬 서비스 고장 현상 을 눈사태 효과 라 고 한다.눈사태 효 과 는 제공 자가 사용 할 수 없 기 때문에 소비 자가 사용 할 수 없고 점차적으로 확대 할 수 없 는 과정 을 묘사 한 것 이다.
2.도해 눈사태 효 과 는 다음 과 같은 호출 링크 가 존재 한다.

이때 Service A 의 유량 변동 이 매우 커서 유량 이 갑자기 증가 합 니 다!그렇다면 이 경우 Service A 가 요청 을 견 딜 수 있다 고 해도 Service B 와 Service C 가 갑 작 스 러 운 요청 을 견 딜 수 있 는 것 은 아니다.이때 Service C 가 요청 을 견 디 지 못 해 사용 할 수 없 게 된다.그러면 Service B 의 요청 도 막 히 고 Service B 의 스 레 드 자원 을 천천히 소모 하면 Service B 는 사용 할 수 없 게 됩 니 다.이어서 Service A 도 사용 할 수 없 을 것 이다.이 과정 은 다음 과 같다.

2.서비스 중단
1.서비스 가'퓨즈'자 체 를 녹 이 는 것 은 스위치 장치 이다.특정한 서비스 유닛 이 고장 이 난 후에 차단기 의 고장 감 측 을 통 해 특정한 이상 조건 이 촉발 되 고 전체 서 비 스 를 직접 녹 인 다.호출 방법 에 대해 기대 에 부합 되 고 처리 가능 한 예비 응답(FallBack)을 되 돌려 줍 니 다.장시간 기다 리 거나 호출 방법 으로 처리 할 수 없 는 이상 을 던 지면 서비스 호출 자의 스 레 드 가 장시간 점용 되 지 않 고 고장 이 분포 식 시스템 에서 만연 하거나 눈사태 가 발생 하지 않도록 보장 합 니 다.목표 서비스 상황 이 호전 되면 호출 을 재 개 합 니 다.서비스 융단 은 서비스 눈사태 를 해결 하 는 중요 한 수단 이다.
2.서비스 퓨즈 그림

3.서비스 강등
1.서비스 강등 설명
  • 서비스 스트레스 가 급증 할 때 현재 의 업무 상황 과 데이터 에 따라 일부 서비스 와 페이지 에 대해 전략 적 으로 등급 을 낮 추고 이 부분 서버 의 압력 을 통 해 핵심 임무 의 진행 을 확보한다.또한 일부 심지어 대부분의 임무 고객 들 이 정확 한 대응 을 받 을 수 있 도록 보장 한다.즉,현재 요청 이 처리 되 지 않 거나 오류 가 발생 하여 기본 값 으로 되 돌아 오 는 것 입 니 다.
  • 통속:시스템 의 변두리 서비스 보증 시스템 핵심 서비스의 정상 적 인 운행 을 닫 는 것 을 서비스 강등
  • 이 라 고 한다.
    타 오 바 오 삭제 주소 확인 수령 삭제 주문서 취소 지불 절약 cpu 메모리

    4.강등 과 융단 총화
    1.공통점
  • 의 목적 은 매우 일치 하 는데 모두 가용성 신뢰성 을 고려 하여 시스템 의 전체적인 느 리 고 심지어 붕 괴 를 방지 하기 위해 사용 하 는 기술 수단 이다.
  • 의 최종 표현 은 비슷 하 다.이들 에 게 최종 적 으로 사용자 로 하여 금 일부 기능 이 일시 적 으로 도달 하지 못 하거나 사용 할 수 없다 는 것 을 체험 하 게 한다.
  • 입 도 는 일반적으로 서비스 등급 이다.물론 업계 에서 도 더 세밀 한 방법 이 적지 않다.예 를 들 어 데이터 지구 층(조회 허용,삭제 허용)을 실현 하 는 것 이다.
  • 의 자치 적 요구 가 매우 높다.퓨즈 모델 은 보통 서비스 가 전략 을 바탕 으로 하 는 자동 트리거 이다.강등 은 인공 적 으로 관여 할 수 있 지만 마이크로 서비스 구조 에서 사람 에 의 해 불가능 하고 스위치 의 사전 설정,배치 센터 는 모두 필요 한 수단 이다.
  • 2.공통점
  • 트리거 원인 이 다 르 고 서비스 가 끊 기 는 것 은 보통 특정한 서비스(하류 서비스)고장 으로 인 한 것 이 고 서비스 등급 이 떨 어 지 는 것 은 전체적인 부하 에서 고려 하 는 것 이다.
  • 관리 목표 의 차원 이 다 르 기 때문에 용 단 은 하나의 구조 급 의 처리 이 고 모든 마이크로 서 비 스 는(등급 이 없 는)필요 하 며 등급 을 낮 추 는 것 은 보통 업무 에 대해 등급 의 구분 이 있어 야 한다(예 를 들 어 등급 을 낮 추 는 것 은 보통 최 외곽 서비스 부터)
  • 3.퓨즈 를 정리 하면 반드시 강등 이 발생 하기 때문에 퓨즈 도 강등 이다.차이 점 은 퓨즈 는 호출 링크 에 대한 보호 이 고 강등 은 시스템 과부하 에 대한 보호 처리 이다.
    5.서비스 융단 의 실현
    서비스 융단 의 실현 방향
  • Hstrix 의존 도 를 도입 하고 퓨즈(차단기)
  • 을 엽 니 다.
  • 시 뮬 레이 션 강등 방법
  • 호출 테스트 진행
  • 1.프로젝트 에 hystrix 의존 도입
    
           
    <!--  hystrix-->
    <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    2.차단기 켜 기
    
    @SpringBootApplication
    @EnableCircuitBreaker //       
    public class Products9998Application {
     public static void main(String[] args) {
      SpringApplication.run(Products9998Application.class, args);
     }
    }
    3.Hystrixcand 주 해 를 사용 하여 차단
    
    //    
    @GetMapping("/product/break")
    @HystrixCommand(fallbackMethod = "testBreakFall" )
    public String testBreak(int id){
     log.info("     id : "+ id);
     if(id<=0){
     throw new RuntimeException("     !!!");
     }
     return "      id: "+id;
    }
    
    //        
    public String testBreakFall(int id){
     return "       : "+id;
    }

    4.방문 테스트
  • 정상 매개 변수 방문
  • 오류 매개 변수 방문


  • 오류 매개 변 수 를 계속 사용 하면 정상 적 인 매개 변 수 를 사용 하여 접근 하 는 것 도 비합법적 입 니 다.차단기 가 작 동 되 었 으 나 시간 이 지나 면 자동 으로 닫 히 고 접근 도 합 법 적 입 니 다.
    5.위 에서 보 여 주 는 과정 에서 일정한 조건 의 차단 기 를 터치 하면 자동 으로 열 리 고 시간 이 지나 면 다시 닫 힌 다 는 것 을 알 수 있 습 니 다.그러면 차단기 가 켜 지 는 조건 은 무엇 입 니까?
    6.차단기 오픈 조건 홈 페이지:https://cloud.spring.io/spring-cloud-netflix/2.2.x/reference/html/
    A service failure in the lower level of services can cause cascading failure all the way up to the user. When calls to a particular service exceed circuitBreaker.requestVolumeThreshold (default: 20 requests) and the failure percentage is greater than circuitBreaker.errorThresholdPercentage (default: >50%) in a rolling window defined by metrics.rollingStats.timeInMilliseconds (default: 10 seconds),회로 가 열 리 고 호출 이 이 루어 지지 않 습 니 다.오류 및 개방 회로 의 경우 개발 자가 폴 백 을 제공 할 수 있 습 니 다.
    원문 을 번역 한 후 닫 힌 조건 을 정리 합 니 다.
    1 일정한 밸브 값 을 만족 시 킬 때(기본 10 초 간 20 개 요청 횟수 초과)
    2,실패 율 일정 시(기본 10 초 간 50%초과 요청 실패)
    3,이상 밸브 값 에 도달,차단기 가 열 립 니 다
    4.열 렸 을 때 모든 요청 은 5,1 시간 후에(기본 값 은 5 초)퍼 가기 하지 않 습 니 다.이때 차단기 가 반 열 린 상태 이 고 그 중의 한 요청 을 퍼 가기 합 니 다.
    성공 하면 차단기 가 꺼 지고 실패 하면 계속 켜 집 니 다.4 와 5 를 반복 하 다.

    7.기본 적 인 서비스 FallBack 처리 방법 이 모든 서비스 방법 을 위해 강등 을 개발 하면 우리 에 게 대량의 코드 가 불필요 하고 유지 에 불리 할 수 있 습 니 다.이 럴 때 기본 서비스 강등 처리 방법 을 추가 해 야 합 니 다.
    
    @GetMapping("/product/hystrix")
    @HystrixCommand(defaultFallback = "testHystrixFallBack") //  HystrixCommand            
    public String testHystrix(String name) {
     log.info("     : " + name);
     int n = 1/0;
     return "  [" + port + "]    ,       :" + name;
    }
    //      
    public String testHystrixFallBack(String name) {
     return port + "           !!!,     : "+name;
    }
    

    6.서비스 강등 의 실현
    아니면 이전 프로젝트 의 기초 위 에서
    1.클 라 이언 트 openfeign+hystrix 서비스 강등 실현
  • Hstrix 도입 의존
  • 프로필 오픈 feign 지원 hystrix
  • feign 클 라 이언 트 호출 에 fallback 지정 강등 처리
  • 개발 강등 처리 방법
  • 2.openfeign 지원 서비스 강등 오픈
    
    feign.hystrix.enabled=true #  openfeign    
    3.openfeign 클 라 이언 트 에 Hystrix 를 추가 합 니 다.
    
    //     ProductClientFallBack       ,            ,               
    //         openfeign  ,value       
    @FeignClient(value = "products",fallback = ProductClientFallBack.class)
    public interface ProductClient {
    
     @GetMapping("/product/findOne")
     Map<String, Object> findOne(@RequestParam("productId") String productId);
    
    }
    
    4.fallback 처리 류 개발
    
    package com.md.fallback;
    
    @Component
    public class ProductClientFallBack implements ProductClient {
    
     @Override
     public Map<String, Object> findOne(String productId) {
      HashMap<String, Object> map = new HashMap<>();
      map.put("status","false");
      map.put("msg","         ,       ");
      return map;
     }
    }
    정상 방문

    그리고 제품 서 비 스 를 직접 닫 고 방문 합 니 다.

    주의:서버 의 강등 과 클 라 이언 트 의 강등 이 동시에 열 리 면 서버 의 강등 방법 에 대한 반환 값 은 클 라 이언 트 방법 강등 의 반환 값 과 일치 해 야 합 니 다!!!
    7.Hystrix Dashboard
    0.Hystrix Dashboard 의 주요 장점 은 모든 Hystrix Command 에 대한 도량 을 수집 한 것 이다.Hystrix 계기판 은 모든 차단기 의 운행 상황 을 효율 적 인 방식 으로 표시 한다.

    UI 페이지 가 있 는 구성 요소 일 뿐 새로운 프로젝트 를 만 들 거나 이전 springcloud 환경 에 따라 만 들 수 있 습 니 다.
    1.프로젝트 에 의존 도입
    
    <!--  hystrix dashboard   -->
    <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
    </dependency>
    2.입구 클래스 에서 hystrix dashboard 열기
    
    @SpringBootApplication
    @EnableHystrixDashboard //      
    public class Hystrixdashboard9990Application {
    	public static void main(String[] args) {
    		SpringApplication.run(Hystrixdashboard9990Application.class, args);
     }
    }
    설정 파일 에 포트 번호 9990 을 지정 합 니 다.
    3.Hstrix dashboard 응용 http://localhost:9990(dashboard 포트)/hystrix 시작

    4.모니터링 프로젝트 의 입구 클래스 에 모니터링 경로 설정[새 버 전 구덩이]을 추가 하고 모니터링 프로젝트 를 시작 합 니 다.
    
    @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;
    }

    5.모니터링 인터페이스 로 모니터링

    뒤에 Hstrix.stream 은 고정 되 어 있 습 니 다.
    6.모니터링 을 클릭 하여 일치 loading,콘 솔 을 열 면 오류 가 발생 합 니 다[특별 구덩이]
    
    #     
    -     springcloud jquery     3.4.1,   monitor.ftlh   ,js     :
    	$(window).load(function() 
    - jquery 3.4.1        
    
    -        monitor.ftlh       :
    	$(window).on("load",function()
    	
    -   jar   ,       ,      。

    8.Hystrix 유지보수 중단
    공식 주소:https://github.com/Netflix/Hystrix
  • 번역:Hystrix(버 전 1.5.18)는 안정 적 이 고 넷 플 릭 스 가 기 존의 응용 에 대한 수 요 를 만족 시 킬 수 있 습 니 다.이 동시에 우리 의 중점 은 응용 프로그램의 실시 간 성능 에 반응 하 는 더욱 적응성 있 는 실현 으로 옮 겨 졌 다.미리 설정 한 설정(예 를 들 어 자가 적응 과 병행 제한)이 아니다.Hystrix 와 같은 의미 있 는 상황 에서 저 희 는 기 존의 응용 프로그램 에서 Hystrix 를 계속 사용 하고 새로운 내부 프로젝트 에서 resilience4j 와 같은 개방 적 이 고 활발 한 프로젝트 를 이용 할 계획 입 니 다.우 리 는 다른 사람들 도 이렇게 할 것 을 건의 하기 시작 했다.
  • Dashboard 도
  • 이 폐기 되 었 다.
    스프링 클 라 우 드-하 이 스 트 릭 스 구성 요소 의 사용 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.스프링 클 라 우 드-하 이 스 트 릭 스 구성 요소 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기