회로 차단기 (Circuit Breaker)

Jun Hwang

서킷 브레이커 (회로 차단기)

개요

Tyk에는 경로 기반 옵션으로 회로 차단기 패턴이 내장되어 있습니다. 회로 차단기는 비율 기반이므로, '샘플 크기x의 y% 만큼'이 실패하면 차단기가 트립됩니다. 게이트웨이는 사전 정의된 기간(복구 기간) 동안 해당 서비스에 대한 모든 인바운드 요청을 중지합니다. API 정의에서 return_to_service_after 옵션을 사용하거나 대시보드를 통해 설정하여 이 기간을 구성합니다. 회로 차단기에는 문제가 해결되었는지 확인할 수 있는 반개방 상태도 있습니다. 이는 return_to_service_after에 구성된 시간이 발생하기 전에 업스트림에 실제 요청을 함으로써 수행됩니다. 기본적으로 Tyk 회로 차단기는 반개방 상태를 활성화했습니다. 원하는 동작이 return_to_service_after에 구성된 시간이 소비된 후에만 확인하는 것이라면 disable_half_open_state를 true로 설정하여 이를 비활성화할 수 있습니다. 이것은 또한 수정 또는 로깅 작업을 수행하기 위해 연결할 수 있는 이벤트를 트리거합니다. 회로 차단기가 트립되면 503 "서비스를 일시적으로 사용할 수 없음 (Service temporarily unavailable)" 오류가 반환됩니다.

회로 차단기는 호스트 전체에서 작동합니다(즉, 하나의 API에 대한 타겟이 여러 개인 경우 샘플은 모든 업스트림 요청에 있음)

회로 차단기는 단일 호스트에서 개별적이며, 백엔드 데이터를 중앙 집중화하거나 풀링하지 않습니다. 이것은 속도를 위한 것입니다. 이는 여러 Tyk 노드가 사용되는 로드 밸런싱된 환경에서 다른 노드가 샘플링 속도 제한에 도달하게되면서 일부 트래픽이 누출될 수 있다는 것을 의미합니다.

이벤트

회로 차단기가 트립되면 event_handlers 섹션에서 작업을 정의할 수 있는 BreakerTriggered 이벤트가 발생합니다 (자세한 내용은 이벤트 데이터 및 이벤트 유형 참조):

event_handlers: {  
  events: {  
    BreakerTriggered: [  
      {  
        handler_name: "eh_web_hook_handler",  
        handler_meta: {  
          method: "POST",  
          target_path: "http://posttestserver.com/post.php?dir=tyk-breaker",  
          template_path: "templates/breaker_webhook.json",  
          header_map: {  
            "X-Tyk-Test-Header": "Tyk v1.BANANA"  
          },  
          event_timeout: 10  
        }  
      }  
    ]  
   }  
 }

템플릿에 반환된 상태 코드는 다음과 같습니다:

*// BreakerTripped is sent when a breaker trips
BreakerTripped = 0

// BreakerReset is sent when a breaker resets
BreakerReset = 1*

서비스 검색 모듈 (Service Discovery)을 사용하는 경우에는 차단기가 작동할 때마다 Tyk는 노드 목록을 새로 고치려고 시도한다는 점을 기억하십시오.

API 정의로 구성하기

API 정의에서 회로 차단기를 활성화하려면 버전의 extended_paths 목록에 새 섹션을 추가해야 합니다:

"circuit_breakers": [  
  {  
    "path": "get",  
    "method": "GET",  
    "threshold_percent": 0.5,  
    "samples": 5,  
    "return_to_service_after": 60  
  }  
]
  • ‘path’: 일치시킬 경로

  • ‘method’: 일치시킬 메서드

  • ‘threshold_percent’: 차단기가 트립되기 전에 오류가 발생할 수 있는 요청의 비율입니다. 0.0에서 1.0 사이의 값이어야 합니다.

  • ‘samples’: 회로 차단기 창에 대해 취할 샘플 수입니다.

  • ‘return_to_service_after’: 서비스로 복귀하기 위한 차단기의 냉각 기간(초)입니다.

대시보드로 구성하기

API 경로에 회로 차단기를 설정하려면 API의 엔드포인트 디자이너 섹션에 새 엔드포인트를 추가한 다음 회로 차단기 플러그인을 선택합니다.

endpoint designer.png

플러그인이 활성화되면 메뉴에서 차단기를 클릭하여 다양한 구성 옵션을 설정할 수 있습니다.

plugin config.png

  • Trigger threshold percentage (트리거 임계값 백분율): 차단기가 트립되기 전에 오류가 발생할 수 있는 요청의 백분율로서, 0.0에서 1.0 사이의 값이어야 합니다.
  • Sample size (requests) (샘플 크기 - 요청): 회로 차단기 창에 대해 취할 샘플 수입니다.
  • Return to service in sec. (서비스 복귀 시간 - 초): 서비스 복귀를 위한 차단기의 냉각 기간(초).