봄 클라우드 알리바바 | 센티넬 : 교통 방어 군인 분산 시스템 동적 전류 제한 규칙
이전 기사 센티넬 자세의 사용에 대한 자세한 계정, 작은 파트너가보기에 다음 링크에 액세스 할 수 있습니다 보지 못했다 :
하지만 여전히 점은 규칙이 현재 사용중인 메모리의 존재를 제한하는 구성하는 것입니다 매우 중요합니다 우리의 일일 생산 요구를 충족시킬 수 없다, 우리는 우리가 센티넬 콘솔 손실에 구성된 각 규칙 적용 후 다시 시작 여기, 우리는 센티넬 규칙 영구적 인 방법을 소개합니다.
센티넬은 규칙을 수정하기 위해 우리를 위해 두 가지 방법을 제공합니다 :
- 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 콘솔에서 최선을 다하는 것이 좋습니다.