SpringCloud 기사: 센티넬 미들웨어의 간단한 사용

목차

1. Sentinel 미들웨어에 대한 간략한 소개

 1.1 일반 프로세스

2. Sentinel 미들웨어 사용 방법

2.1 pom 종속성 소개

2.2 application.yml 파일 구성

2.3 테스트 사용

2.4, @SentinelResource 주석 속성


1. Sentinel 미들웨어에 대한 간략한 소개

        Sentinel은 분산 서비스 아키텍처를 위한 고가용성 트래픽 보호 구성 요소로 주로 트래픽을 진입점으로 사용하여 개발자가 전류 제한, 트래픽 셰이핑, 회로 차단기 성능 저하, 시스템 부하 보호, 핫스팟 보호.섹스.

        서비스를 압도할 수 있는 많은 수의 즉각적인 요청이 서비스에 도달하지 않도록 하십시오.

Sentinel은 다음과 같은 특징을 가지고 있습니다.

  • 풍부한 애플리케이션 시나리오 : Sentinel은 seckill(즉, 버스트 트래픽이 시스템 용량이 견딜 수 있는 범위 내에서 제어됨), 메시지 피크 쉐이빙 및 밸리 필링과 같은 지난 10년 동안 Alibaba의 Double Eleven 트래픽 프로모션의 핵심 시나리오를 수행했습니다. , 클러스터 트래픽 제어 , 다운스트림 사용할 수 없는 애플리케이션의 실시간 융합 등
  • 완벽한 실시간 모니터링 : Sentinel은 실시간 모니터링 기능도 제공합니다. 콘솔에서 애플리케이션에 연결된 단일 시스템의 두 번째 수준 데이터 또는 규모가 500 미만인 클러스터의 집계된 실행 상태를 볼 수 있습니다.
  • 광범위한 오픈 소스 에코시스템 : Sentinel은 Spring Cloud, Dubbo 및 gRPC와의 통합과 같은 다른 오픈 소스 프레임워크/라이브러리와의 기본 통합 모듈을 제공합니다. 해당 종속성을 도입하고 간단한 구성을 수행하기만 하면 Sentinel에 빠르게 액세스할 수 있습니다.
  • 완벽한 SPI 확장 지점 : Sentinel은 사용하기 쉽고 완벽한 SPI 확장 인터페이스를 제공합니다. 확장 인터페이스를 구현하여 로직을 빠르게 사용자 정의할 수 있습니다. 예를 들어 사용자 정의 규칙 관리, 동적 데이터 소스의 적응 등이 있습니다.

 1.1 일반 프로세스

전류 제한, 다운그레이드 및 부하와 같은 제어 방법에 관계없이 일반적인 프로세스는 다음과 같습니다.

  • StatisticSlot은 다양한 차원의 런타임 지표 모니터링 정보를 기록하고 계산하는 데 사용됩니다.
  • 책임 체인은 SystemSlot, FlowSlot, DegradeSlot 등의 규칙 검증과 같은 후속 슬롯의 진입 방법을 차례로 트리거합니다.
  • 후속 슬롯이 통과하고 BlockException이 발생하지 않으면 리소스가 성공적으로 호출되었음을 의미하며 실행 스레드 수 및 전달된 요청 수와 같은 정보가 추가됩니다.

        데이터 통계와 관련하여 주로 ArrayMetric, BucketLeapArray, MetricBucket, WindowWrap 및 기타 클래스와 관련됩니다.

2. Sentinel 미들웨어 사용 방법

2.1 pom 종속성 소개

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
   <version>2.1.0.RELEASE</version>
</dependency>

2.2 application.yml 파일 구성

spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8888 #配置自己的服务器或本地路由

2.3 테스트 사용

1. 서비스 계층은 다음 방법을 정의합니다.

public interface ITestService {

    Boolean test();
}

2. impl 레이어는 다음 메서드를 구현합니다.

제한할 메서드에 @SentinelResource 주석을 추가합니다.

@SentinelResource(value = "test",blockHandler = "exceptionHandler")
    @Override
    public Boolean test() {
        return true;
    }
 
    public ResultUtil exceptionHandler(BlockException ex){
        return ResultUtil.success("请求过于频繁");
    }

3. 컨트롤러 테스트 작성

@GetMapping("/test")
    public ResultUtil test(){
        return ResultUtil.success(userService.test());
    }

그런 다음 프로젝트를 서버에 배포하고 시작하고 Postman을 사용하여 방금 작성된 테스트 인터페이스를 호출합니다.

2.4, @SentinelResource 주석 속성

@SentinelResource 주석에는 다음 속성이 포함됩니다.

(1) 골짜기

        리소스 이름은 필수 항목으로 해당 규칙은 리소스 이름을 통해 찾아야 하므로 이를 설정해야 한다. 콘솔에 표시될 리소스 이름을 정의하고 흐름 제어 및 회로 차단기 다운그레이드 규칙을 정의할 때 리소스 이름을 지정합니다.

(2) 항목 유형

        항목 유형, 옵션: EntryType.IN 및 EntryType.OUT(기본값은 EntryType.OUT)
(3) blockHandler

        BlockException을 처리하는 함수의 이름에 해당, 선택 사항.

(4) blockHandler클래스

        blockHandler 함수는 기본적으로 원래 메서드와 동일한 클래스에 있어야 합니다. 다른 클래스의 함수를 사용하려면 blockHandlerClass를 해당 클래스의 Class 객체로 지정할 수 있으며 해당 함수는 정적 함수여야 하며 그렇지 않으면 파싱할 수 없습니다.

(5) 폴백

        함수 이름, 선택 사항, 저하된 함수에만 유효(DegradeException). 폴백 함수의 접근 범위는 퍼블릭이어야 하고 매개변수 유형과 반환 유형은 원래 메서드와 일치해야 하며 원래 메서드와 동일한 클래스에 있어야 합니다. 비즈니스 예외는 폴백 로직에 들어가지 않습니다.

(6) 폴백 클래스

        fallbackClass의 적용은 blockHandlerClass와 유사하며 fallback 함수는 기본적으로 원래 메서드와 동일한 클래스에 있어야 합니다. 다른 클래스의 함수를 사용하려면 해당 클래스의 Class 객체로 fallbackClass를 지정하면 됩니다.해당 함수는 정적 함수여야 하며 그렇지 않으면 파싱할 수 없습니다.

(7) defaultFallback

        defaultFallback 메소드가 구성되지 않은 경우 기본적으로 여기에 제공됩니다. 기본 fallback 함수 이름인 optional은 일반적으로 일반적인 fallback 로직에 사용됩니다. 기본 fallback 함수는 모든 유형의 예외에 사용할 수 있습니다(여기에서 제외된 예외 유형 제외). exceptionsToIgnore) 처리, fallback 및 defaultFallback이 모두 구성된 경우 fallback만 적용됩니다.

(8)무시할 예외

        제외할 예외를 지정하는 데 사용되며, 예외 통계에 포함되지 않거나 폴백 논리에 입력되지 않지만 그대로 throw됩니다.

추천

출처blog.csdn.net/qq_54247497/article/details/131498601