Tyk Uptime Test 가이드

Jun Hwang

테스트 개요

버전 1.9부터 Tyk는 설정된 간격으로 사용자 정의 엔드포인트를 능동적으로 폴링하여 트래픽을 관리하는 기본 서비스 및 호스트에 대한 일종의 내장형 "업타임 인식"을 지원합니다.

Tyk의 가동 시간 인식은 기존 가동 시간 모니터링 도구를 대체하기 위한 것이 아니라 API 게이트웨이로서의 Tyk 역할의 일부로 작동 중지 상태인 비정상 노드를 우회하는 방법을 제공하여 이를 보완하도록 설계되었습니다.

업타임 테스트의 동작 원리

가동 시간 테스트가 Tyk 클러스터에 추가되면 단일 노드가 스스로를 마스터로 선택하고 마스터는 Dead man's switch를 사용하여 이 상태를 유지합니다. Redis에서 키를 활성 상태로 유지함으로써 마스터는 몇 초마다 재선되거나 확인됩니다. 한 노드가 중지되거나 실패하면 다른 노드가 실패를 감지하여 자신을 마스터로 선택합니다.

그런 후, 마스터 노드는 클러스터(샤드 그룹)에 할당된 가동 시간 테스트를 실행합니다.

가동 시간 테스트를 실행하는 노드에는 노드 구성 가능 간격 루프에 의해 결정된 몇 초마다 테스트를 동시에 실행할 수 있도록 정의된 작업자 풀 (pool)이 있습니다. 실행 중인 가동 시간 테스트 수에 따라 이 작업자 풀은 필요에 따라 늘리거나 줄여야 합니다.

최초 설정

가동 시간 테스트를 구성하려면 관련 섹션을 tyk.conf에 추가하십시오.

"uptime_tests": { "disable": false, // disable uptime tests on the node completely "poller_group":"", "config": { "enable_uptime_analytics": true, "failure_trigger_sample_size": 3, "time_wait": 300, "checker_pool_size": 50 } }

disable: false로 설정하면 Tyk에 가동 시간 테스트를 실행하도록 지시합니다. 가동 시간 테스트를 노드에서 실행하지 않으려면 true로 설정하면 해당 노드에서 비활성화 됩니다 (이것은 가동 시간 테스트를 별도의 Tyk 인스턴스 그룹에서 실행 중인 경우에 유용할 수 있습니다).

poller_group: 이 필드는 가동 시간 테스트의 다른 그룹을 정의하는 데 사용됩니다. 동일한 poller_group이 있는 모든 게이트웨이는 해당 그룹의 마스터로 선출될 후보가 됩니다. 이는 Tyk 인스턴스들의 분할 또는 분할 그룹 (segmented or sharded group)에서 가동 시간 테스트를 실행하는 경우에 유용할 수 있습니다.

enable_uptime_analytics: Tyk는 가동 시간 테스트에 의해 생성된 데이터 기록을 지원하며, 대시보드에서 이를 표로 만들 수 있습니다. 가동 시간 분석을 활성화하려면 true로 설정하십시오. 그러나 가동 시간 테스트는 지속적으로 실행되기 때문에 많은 양의 데이터를 생성할 수 있습니다. 이 데이터를 관리하지 않으려는 일부 사용자는 이 값을 false로 설정하여 비활성화할 수 있습니다.

failure_trigger_sample_size: 여기에서 테스트가 실패하거나 설정된 횟수를 통과한 후 HostDown 또는 HostUp 이벤트를 트리거하도록 Tyk에 지시합니다; 이 예에서는 3. 숫자를 더 높은 값으로 설정하면 오탐을 방지할 수 있지만 검증으로 인해 리드 인시던트 시간이 늘어날 수 있습니다.

time_wait: 테스트 실행 사이의 시간(초)입니다. 이 예에서는 300초로 설정됩니다.

checker_pool_size: 가동 시간 테스트를 위한 작업자 풀입니다. 이 예에서 우리는 테스트를 보낼 50명의 유휴 작업자를 메모리에 유지하도록 Tyk를 구성했습니다. 말하자면, 이 구성을 사용하면, 여러분에게 최대 50개의 테스트에 대한 비동기 테스트가 거의 보장된다는 것입니다.

API 정의로 구성하기

가동 시간 테스트 체크리스트는 API 구성 내에 있으므로, API 정의에서 테스트 섹션을 추가하여 구성하면 됩니다.

uptime_tests: { check_list: [ { "url": "http://google.com/" }, { "url": "http://posttestserver.com/post.php?dir=uptime-checker", "method": "POST", "headers": { "this": "that", "more": "beans" }, "body": "VEhJUyBJUyBBIEJPRFkgT0JKRUNUIFRFWFQNCg0KTW9yZSBzdHVmZiBoZXJl" } ] },

가동 시간 테스트는 버전이 지정되지 않습니다.

위의 예에는 Uptime 테스트를 위한 두 가지 형식이 있습니다. GET 요청을 가정하는 "빠른" 형식과:

{ "url": "http://google.com/" }

또는, 전체 요청을 점검하거나 흉내 낼 수 있는 긴 형식 입니다:

{ "url": "http://posttestserver.com/post.php?dir=tyk-checker-target-test&beep=boop", "method": "POST", "headers": { "this": "that", "more": "beans" }, "body": "VEhJUyBJUyBBIEJPRFkgT0JKRUNUIFRFWFQNCg0KTW9yZSBzdHVmZiBoZXJl" }

여기서 body는 Base64로 인코딩 됩니다.

빠른 양식을 사용하면 시간 초과가 적용되지 않지만, 긴 양식은 500ms 시간 초과로 실패하게 된다는 것을 주목하십시오.

대시보드에서 구성하기

대시보드를 사용하여 가동 시간 테스트를 추가하는 것은 매우 간단합니다. 테스터를 활성화하려면 먼저, 게이트웨이에서 필수 구성을 충족했는지 확인하십시오.

1단계: 가동 시간 테스트 탭 선택

API 디자이너에서 가동 시간 테스트 탭을 선택합니다. api designer.png

2단계: 추가 클릭

추가를 클릭하여 테스트를 추가합니다. uptime test option.png

3단계: 경로 세부정보 입력 경로 세부 정보 팝업에서 세부 정보를 완료하고 추가를 클릭하여 테스트를 추가합니다. path detail.png

이벤트

가동 시간 및 가동 중지 시간 이벤트 (uptime and downtime events)

Tyk가 테스트에서 다운타임을 감지하면 HostDown이라는 시스템 이벤트를 트리거하고 해당 호스트가 서비스를 재개할 때 HostUp을 트리거합니다. 이러한 이벤트는 다른 Tyk 이벤트와 동일한 이벤트 시스템에서 트리거되므로 어떤 종류의 작업이라도 모두 수행될 수 있습니다.

  • 로거 작업
  • 알림 URL에 대한 웹 후크
  • 복잡한 API 상호 작용을 위한 사용자 정의 JS 스크립트

API 정의에 이벤트 핸들러를 추가하는 방법은 이벤트 시스템 섹션을 참조하십시오.

테스트는 URL별로 이루어지므로, 여러 엔드포인트가 테스트되는 단일 호스트에 대해 여러 개의 HostDown 이벤트를 보게 될 가능성이 있습니다.

로드 밸런싱 및 서비스 검색

다운타임 감지 및 서비스 가용성

라운드 로빈 로드 밸런싱을 사용하도록 Tyk를 구성한 경우에는, API 정의의 proxy 섹션에서 다운타임 목록에서 해당 서버가 액티브인지 볼 수 있게, 아웃바운드 Tyk 요청(서비스에 대한)의 호스트 이름을 확인하는 옵션을 활성화함으로써, 호스트가 "down"으로 표시된 경우 Tyk는 요청하기 전에 목록의 다음 호스트로 건너뜁니다.

... "proxy": { ... "check_host_against_uptime_tests": true, ... } ...

포트를 포함한 정규화된 (fully qualified) 호스트는 Tyk가 둘을 함께 연결하기 위해 가동 시간 테스트 구성과 RRLB (라운드 로빈 로드밸런서) 항목 간에 정확히 일치해야 합니다.

예: www.myapi.com:3000