봄 클라우드 알리바바 | 센티넬 : 교통 방어 군인 분산 시스템 동적 전류 제한 규칙

봄 클라우드 알리바바 | 센티넬 : 교통 방어 군인 분산 시스템 동적 전류 제한 규칙

이전 기사 센티넬 자세의 사용에 대한 자세한 계정, 작은 파트너가보기에 다음 링크에 액세스 할 수 있습니다 보지 못했다 :

하지만 여전히 점은 규칙이 현재 사용중인 메모리의 존재를 제한하는 구성하는 것입니다 매우 중요합니다 우리의 일일 생산 요구를 충족시킬 수 없다, 우리는 우리가 센티넬 콘솔 손실에 구성된 각 규칙 적용 후 다시 시작 여기, 우리는 센티넬 규칙 영구적 인 방법을 소개합니다.

센티넬은 규칙을 수정하기 위해 우리를 위해 두 가지 방법을 제공합니다 :

  • API에 의해 직접 수정 (loadRules)
  • 다른 데이터 소스를 데이터 소스로 구성된 변형

loadRules () 메소드는 종종 파일, 데이터베이스 또는 어떤 중앙의 구성에 저장된 규 오브젝트 메모리 상태 필요하지만. 데이터 소스 인터페이스는 모든 구성 소스를 고정 할 수있는 능력을 우리에게 제공한다. 직접 규칙을 수정하는 API를 통해 비교, 데이터 소스 인터페이스는보다 안정적인 접근 방식 구현합니다.

데이터 소스 확장 일반적인 구현은 다음과 같습니다 :

  • 풀 모드 : 클라이언트가 주기적으로 조사 규칙을 당기는 규칙 관리 센터에 주도권을,이 규칙 등등 RDBMS, 파일의 중심, 심지어 VCS 될 수있다. 이 작업을 수행하는 방법은 단점이 적시에 변화를 얻을 수없는, 간단하다;
  • 푸시 모드 : 센터 통합 규칙은 사용 Nacos, 사육사 및 기타 유통 센터 등의 변경을 수신 등록 된 청취자의 방법으로 클라이언트를 밀어 넣습니다. 이 방법은 더 나은 실시간 및 일관성을 유지할 수 있습니다.

센티넬은 현재 다음 데이터 소스 확장을 지원합니다 :

  • 당겨 기반 (1.7.0 이후) 파일, 영사
  • 푸시 기반 : 사육사, 레디 스, Nacos, 아폴로

여기, 우리는 센티넬 동적 규칙이 Nacos에 따라 무엇에 초점을 맞 춥니 다.

1. 센티넬 동적 규칙 기반 전투 Nacos

1.1 하위 프로젝트 sentinel_nacos를 만들

다음과 같이 프로젝트의 pom.xml을 사용합니다 :

목록이 : 알리바바 / 센티넬 - springcloud 하이 / sentinel_nacos / pom.xml 파일
***

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

1.2 application.yml 프로파일은 다음과 같이 :

목록이 : 알리바바 / 센티넬 - springcloud 하이 / sentinel_nacos / SRC / 메인 / 자원 / application.yml
***

server:
  port: 10000
spring:
  application:
    name: spring-cloud-sentinel-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.44.129:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8720
      datasource:
        ds:
          nacos:
            server-addr: 192.168.44.129:8848
            dataId: spring-cloud-sentinel-nacos
            groupId: DEFAULT_GROUP
            rule-type: flow
            namespace: 8282c713-da90-486a-8438-2a5a212ef44f
  • spring.cloud.sentinel.transport.dashboard: 액세스 주소 센티넬 콘솔.
  • spring.cloud.sentinel.datasource.ds.nacos.server-addr: Nacos 접속 주소.
  • spring.cloud.sentinel.datasource.ds.nacos.dataId: 그룹 ID 저장 규칙을 nacos.
  • spring.cloud.sentinel.datasource.ds.nacos.groupId: DataId 저장 규칙을 nacos.
  • spring.cloud.sentinel.datasource.ds.nacos.rule-type: 규칙 저장, 비어 있지의 유형을 정의하는 데 사용됩니다.
  • spring.cloud.sentinel.datasource.ds.nacos.namespace: 네임 스페이스 nacos 규칙을 저장.

이 예에서 버전 반복적 인 관계 구성 정보가 반드시 모든 버전에 적용되지 않기 때문에, 당신은 분석 할 수 있습니다 DataSourcePropertiesConfiguration, NacosDataSourceProperties그리고 AbstractDataSourceProperties더 정확한 것 자세한 구성을 얻기 위해 세 가지 구성.

예를 들어,이 구성 예에서 유래 NacosDataSourceProperties하고 AbstractDataSourceProperties.

NacosDataSourceProperties소스는 다음과 같이 :

public class NacosDataSourceProperties extends AbstractDataSourceProperties {

    private String serverAddr;

    @NotEmpty
    private String groupId = "DEFAULT_GROUP";

    @NotEmpty
    private String dataId;

    private String endpoint;
    private String namespace;
    private String accessKey;
    private String secretKey;

    // 代码省略...
}

AbstractDataSourceProperties소스는 다음과 같이 :

public class AbstractDataSourceProperties {

    @NotEmpty
    private String dataType = "json";
    @NotNull
    private RuleType ruleType;
    private String converterClass;
    @JsonIgnore
    private final String factoryBeanName;
    @JsonIgnore
    private Environment env;
}

여기 만 비어없이 기본 값을 구성 ruleType, 관련 ruleType값을 볼 수 있습니다 com.alibaba.cloud.sentinel.datasource.RuleType,이 열거 타입입니다.

다음과 같이 1.3 인터페이스는 테스트 클래스 HelloController.java을 만들 수 있습니다 :

代码清单: 알리바바 / 전초 springcloud 높이 / sentinel_nacos / SRC / 메인 / 자바 / COM / springcloud / sentinel_nacos / 컨트롤러 / HelloController.java
***

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(HttpServletRequest request) {
        return "Hello, port is: " + request.getLocalPort();
    }
}

1.4 구성 Nacos 구성 센터

구성 내용은 표시 :

참고 일관성 그룹 ID 데이터 및 프로그램이 구성되는 것을 특징으로하는 구성. 다음과 같이 채워 형식 선택 JSON :

[
    {
        "resource": "/hello",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

상기 구성 룰은, 어레이 내의 각 객체는 다음과 같이 각각의 객체 속성을 설명 보호 자원 오브젝트의 각각에 대해 정렬되는 배열 형태임을 알 수있다 :

  • 자원 : 자원 이름, 즉, 규칙을 제한하는 객체의 역할.
  • limitApp : 기본이 경우 통화 소스가 아닌 경우, 흐름 제어에 대한 소스를 호출합니다.
  • 등급 : 제한 임계 유형 또는 QPS 스레드 모드의 수는 0이 제한 동시 현재 수, 유량 제어 나타내는 QPS 따라 수행을 나타낸다.
  • 수 : 제한 임계 값
  • 전략 : 자원 자체, 또는 기타 관련 자원 (refResource) 항에 따른 결정 또는 링크 입구에있어서
  • controlBehavior : 흐름 제어 효과 (직접 거부 / 대기 / 슬로우 스타트 모드)
  • clusterMode : 여부 클러스터 모델

1.5 테스트

일반 프로젝트의 발기인, 여러 HTTP에 액세스하기 위해 브라우저를 엽니 다 // 로컬 호스트 : 10000 / 안녕하세요, 속도는 중 일부가 발견, 아래에 표시된 페이지를 제한 후되었을 수 제한 :

Blocked by Sentinel (flow limiting)

전면 제한하는 구성은, 우리가 트래픽 제한 규칙을 보면, 센티넬 콘솔을 열 데이터의 조각 그림과 같이 우리가 Nacos에서 설정 한 데이터이다이 성공 :

참고 :

센티넬에서 두 장소가 인터페이스 흐름 제어를 수정, Nacos 후 동적 규칙을 통합, 하나는 센티넬의 콘솔로하는 Nacos 콘솔이있다.

그러나 센티넬 Console 룰 수정 현재 버전에서, 유통 센터 Nacos에 동기화되지 않습니다 것을 기억하고 Nacos의 구성 규칙을 수정, 클라이언트가 리스너가 될 것입니다 센티넬 콘솔을 동기화 할 . 동적 규칙의 통합이 저장된 후 그래서, Nacos는주의해야 할 두 가지 작업을 수행합니다

  • 구성 값 Nacos을 수정하지 않습니다, 서비스가 메모리에만 존재를 다시 시작하면 원래 값을 복원 센티넬 콘솔은 규칙을 수정합니다.
  • Nacos 콘솔은 규칙을 수정합니다 : 메모리 서비스의 규칙이 업데이트되어, 다시 시작 남아 후에 Nacos 지속적 규칙이 업데이트됩니다.

나는 차단 규칙이 동작을 수정 센티넬 콘솔에서 직접 직접 규칙 변경을 피하려고 Nacos 콘솔에서 최선을 다하는 것이 좋습니다.

2. 샘플 코드

Github- 샘플 코드

Gitee- 샘플 코드

추천

출처www.cnblogs.com/babycomeon/p/11525661.html