센티널 규칙 지속성 관리 전략

  1. 센티널 세 가지 관리 모식

전송 방식 설명 장점 단점
기본 방식 API가 규칙을 클라이언트에 푸시하여 메모리에 저장, 확장 가능한 쓰기 데이터 소스(WritableDataSource) 활용 간단하며 의존성 없음 일관성 보장 불가, 규칙 지속성 없음, 재시작 시 규칙 소실
Pull 방식 확장 가능한 쓰기 데이터 소스(WritableDataSource), 클라이언트가 주기적으로 규칙 관리 센터에서 규칙 가져옴 (RDBS, 파일 등) 간단하며 의존성 없음, 규칙 지속성 일관성 및 실시간성 보장 어려움, 빈번한 폴링 성능 문제
Push 방식 확장 가능한 읽기 데이터 소스(ReadableDataSource), 규칙 중앙이 데이터 통일 푸시, 클라이언트가 리스너 등록으로 변경 감시 (Nacos, Zookeeper) 규칙 지속성, 일관성 보장 제3자 도구 의존성 증가
  1. 기본 모드 (테스트 환경 모드)

일관성 보장 불가, 규칙 지속성 없음, 재시작 시 규칙 소실됨.

  1. Pull 방식

클라이언트가 주기적으로 규칙 관리 센터에서 규칙을 폴링 방식으로 가져옴. 이 규칙 센터는 RDBMS, 파일, 심지어 VCS 등이 될 수 있음. 장점은 구현이 간단하지만, 변경을 즉시 반영하지 못하는 단점이 있음.

Pull 기반: 동적 파일 데이터 소스, Consul, Eureka.

  1. Push 방식 (프로덕션 환경 모드)

규칙 중앙에서 데이터를 통일 푸시하고, 클라이언트는 리스너 등록 방식으로 변화를 실시간 감시. Nacos, Zookeeper 등 구성 센터를 사용. 더 나은 실시간성과 일관성 보장.

Push 기반: ZooKeeper, Redis, Nacos, Apollo, etcd.

  1. 클라이언트와 Nacos 연동을 통한 규칙 지속성

5.1 클라이언트와 Nacos 구성 센터 연동

Springcloud 환경에서 Nacos 구성 센터 통합 가이드

5.2 pom.xml에 의존성 추가

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

5.3 설정 파일 (bootstrap.yml)

spring:
  application:
    name: 사용자-서비스
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        prefix: dubbo-user-api
        file-extension: yml
    sentinel:
      transport:
        dashboard: 127.0.0.1:6780
      eager: true # 지연 로딩 비활성화
      datasource:
        ds-user-flow-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: user-flow-rule
            groupId: user-sentinel
            namespace: sentinel
            rule-type: flow # AUTHORITY(권한 규칙) DEGRADE(서킷 브레이커 규칙) FLOW(트래픽 제어 규칙) GW_API_GROUP GW_FLOW PARAM_FLOW(핫스팟 규칙) SYSTEM(시스템 규칙)
        ds-user-degrade-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: user-degrade-rule
            groupId: user-sentinel
            namespace: sentinel
            rule-type: degrade # AUTHORITY(권한 규칙) DEGRADE(서킷 브레이커 규칙) FLOW(트래픽 제어 규칙) GW_API_GROUP GW_FLOW PARAM_FLOW(핫스팟 규칙) SYSTEM(시스템 규칙)

5.4 Nacos에 구성 파일 추가

5.4.1 user-flow-rule

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

5.4.2 user-degrade-rule

[
	{
		"resource": "/api/user/getName",
		"limitApp": "default",
		"count": 1,
		"timeWindow": 5,
		"grade": 0,
		"minRequestAmount": 3,
		"statIntervalMs": 1000,
		"slowRatioThreshold": 0.5
	}
]

5.5 요약

Nacos 구성 센터를 주 구성원으로, 센티널 대시보드를 임시 관리 플랫폼(긴급 문제 처리용)으로 사용하는 것이 적합함.

단점: 센티널 대시보드에서 조정된 정보는 Nacos 구성 센터로 동기화되지 않음.

  1. 센티널 대시보드와 Nacos 구성 센터 연동

트래픽 제어 규칙을 예시로 설명.

6.1 클라이언트 설정 조정

spring:
  application:
    name: 사용자-서비스
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        prefix: dubbo-user-api
        file-extension: yml
    sentinel:
      transport:
        dashboard: 127.0.0.1:6780
      eager: true # 지연 로딩 비활성화
      datasource:
        ds-user-flow-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            #dataId: user-flow-rule
            #groupId: user-sentinel
            #namespace: sentinel
            dataId: user-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # AUTHORITY(권한 규칙) DEGRADE(서킷 브레이커 규칙) FLOW(트래픽 제어 규칙) GW_API_GROUP GW_FLOW PARAM_FLOW(핫스팟 규칙) SYSTEM(시스템 규칙)

        ds-user-degrade-rule:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: user-degrade-rule
            groupId: user-sentinel
            namespace: sentinel
            rule-type: degrade # AUTHORITY(권한 규칙) DEGRADE(서킷 브레이커 규칙) FLOW(트래픽 제어 규칙) GW_API_GROUP GW_FLOW PARAM_FLOW(핫스팟 규칙) SYSTEM(시스템 규칙)

6.2 소스코드 다운로드

깃허브 주소: https://github.com/alibaba/Sentinel

소스코드 주소: https://github.com/alibaba/Sentinel.git

6.3 수정 (sentinel-dashboard)

6.3.1 pom.xml 파일 수정

        <!-- Nacos 규칙 발행자 샘플을 위한 의존성 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <!-- Nacos 연동 시 <scope>test</scope> 주석 처리 -->
        </dependency>

6.3.2 코드 이동

test 디렉토리의 nacos 폴더를 main 디렉토리의 해당 위치로 복사.

6.3.3 NacosConfig.java 수정

자신의 Nacos 구성 센터 주소 추가.

@Bean
public ConfigService nacosConfigService() throws Exception {
    return ConfigFactory.createConfigService("127.0.0.1:8848");
}

6.3.4 FlowControllerV2.java 수정

// Nacos 연동 수정 - 기존 코드 주석 처리
// @Autowired
// @Qualifier("flowRuleDefaultProvider")
// private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
// @Autowired
// @Qualifier("flowRuleDefaultPublisher")
// private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

// Nacos 연동 수정 - 새 코드 추가
@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

6.3.5 sidebar.html 수정

주석 처리된 코드 활성화

다음 코드 주석 처리

6.4 빌드 및 실행

java -Dserver.port=6780 -jar sentinel-dashboard.jar

6.5 대시보드에 규칙 추가

6.6 Nacos 구성 센터 확인

태그: 센티널 nacos 규칙 지속성 마이크로서비스 트래픽 제어

7월 10일 18:09에 게시됨