고급 트래픽 관리 개요

Traffic Director에는 Traffic Director 배포 내에서 트래픽을 제어할 수 있는 라우팅 규칙트래픽 정책이 포함되어 있습니다. 이러한 기능은 xDS API를 기반으로 하며, Envoy 등의 xDS API 호환 사이드카 프록시 또는 프록시리스 gRPC 애플리케이션으로 구성할 수 있습니다. 부하 분산 구성요소 URL 맵, 전달 규칙, 백엔드 서비스를 사용하여 사용 설정됩니다.

라우팅 규칙은 들어오는 요청의 지정된 정보를 일치시켜 이 일치를 기반으로 라우팅을 결정합니다. 라우팅 규칙은 우선순위에 따라 실행됩니다.

트래픽이 라우팅되면 트래픽 정책은 트래픽 관리를 위해 추가 조치를 취합니다. 일반적으로 트래픽 정책은 다음 카테고리에 속합니다.

  • 부하 분산 알고리즘을 제어하는 부하 분산기 설정
  • 업스트림 서비스에 대한 연결의 볼륨을 제어하는 회로 차단기
  • 부하 분산 풀에서 비정상 호스트 제거를 제어하는 이상점 감지

사용 사례

라우팅 규칙 및 트래픽 정책을 사용하면 트래픽 분할, 트래픽 조정, 결함 주입, 회로 차단, 미러링을 구현할 수 있습니다.

트래픽 분할은 가중치에 따라 트래픽을 분할합니다. 예를 들어 트래픽 중 99%를 1개의 서비스 인스턴스에 전송하고 나머지 1%는 다른 서비스 인스턴스에 전송할 수 있습니다. 트래픽 분할은 일반적으로 새 버전 배포, A/B 테스팅, 서비스 마이그레이션 등과 유사한 프로세스에 사용됩니다.

Traffic Director 트래픽 분할(확대하려면 클릭)
Traffic Director 트래픽 분할(확대하려면 클릭)

트래픽 조정은 HTTP 요청 헤더의 콘텐츠를 기반으로 서비스 인스턴스에 트래픽을 전달합니다. 예를 들어 사용자의 기기가 Android 기기이고 요청 헤더에 user-agent:Android가 있다고 가정하면 해당 트래픽은 Android 트래픽을 수신하도록 지정된 서비스 인스턴스로 전송되고 user-agent:Android가 없는 트래픽은 다른 기기를 다루는 인스턴스로 전송됩니다.

Traffic Director 트래픽 조정(확대하려면 클릭)
Traffic Director 트래픽 조정(확대하려면 클릭)

결함 주입을 사용하면 지연 및 취소된 요청 등의 서비스 오류 상황을 시뮬레이션하여 서비스의 복원력을 테스트할 수 있습니다. 지연 삽입은 선택한 백엔드 서비스로 요청을 보내기 전에 클라이언트 측 프록시가 일부 요청에 연착을 도입하도록 구성합니다. 취소 삽입은 요청을 백엔드 서비스로 전달하지 않고 실패 응답 코드로 일부 응답에 직접 응답하도록 사이드카 프록시를 구성합니다.

회로 차단을 통해 클라이언트 요청으로 인해 백엔드에 과부하가 발생하지 않도록 실패 임곗값을 설정할 수 있습니다. 요청이 설정한 한도에 도달하면 부하 분산기가 새 연결 허용 또는 추가 요청 전송을 중지하여 백엔드를 복구할 시간을 줍니다. 따라서 회로 차단은 백엔드에 과부하를 발생시키지 않고 클라이언트에 오류를 반환하여 연쇄적 장애를 방지합니다. 이렇게 하면 일부 트래픽을 제공하면서도 자동 확장을 통해 용량을 늘려 트래픽 급증을 처리하는 것과 같은 과부하 상황 관리를 위한 시간을 확보할 수 있습니다. 회로 차단 설정에는 연결당 요청 수 제한, 연결 수, 대기 중인 요청 수, 허용된 재시도 횟수가 포함됩니다.

미러링은 실제 트래픽 복사본을 수신하는 디버그 애플리케이션을 배포하여 구현됩니다. 프로덕션 애플리케이션은 원본 트래픽을 처리하고 디버그 애플리케이션은 응답을 삭제합니다. 미러링을 사용하면 프로덕션 트래픽이 포함된 바이너리를 테스트하고 프로덕션 애플리케이션이 아닌 디버그 애플리케이션에서 프로덕션 오류를 디버깅할 수 있습니다.

라우팅 규칙 정보

라우팅 규칙은 여러 가지 방법을 통해 HTTP 요청을 일치시키고 여러 백엔드 서비스에서 트래픽 분할, 리디렉션으로 응답, 요청이나 응답 변경 같은 다양한 작업을 수행합니다. 라우팅 규칙은 URL 맵을 사용하여 구성됩니다.

  • 일치 규칙을 사용하면 Traffic Director가 1개 이상의 요청 속성을 일치시키고 라우팅 규칙에 지정된 작업을 수행할 수 있습니다. 다음과 같은 요청 속성을 사용하여 일치 기준을 지정할 수 있습니다.
    • 호스트: 호스트 이름은 URL의 도메인 이름 부분입니다. 예를 들어 URL http://example.net/video/hd의 호스트 이름 부분은 example.net입니다.
    • 경로는 호스트 이름 다음에 오는 URL의 일부입니다. 예를 들면 http://service-host-name/images/images입니다. 전체 경로 또는 경로의 앞부분만 일치해야 하는지 여부는 규칙에서 지정할 수 있습니다. 규칙은 경로와 일치해야 하는 정규 표현식을 제공할 수도 있습니다.
    • HTTP 헤더 같은 다른 HTTP 요청 매개변수는 쿠키 일치뿐만 아니라 쿼리 매개변수(GET 변수) 기반의 일치도 허용합니다.
    • 메타데이터 필터: Envoy의 xDS 프로토콜을 준수하는 프록시의 불투명한 일치 기준입니다. 예를 들어 xDS 요청을 수행하는 사이드카 프록시는 애플리케이션 버전, 단계적 배포 버전, 기타 기준과 같은 노드 메타데이터를 제공할 수 있습니다. Traffic Director는 메타데이터 필터의 설정이 프록시에서 제공하는 노드 메타데이터의 해당 설정과 일치할 때 해당 사이드카 프록시에만 경로 구성을 제공합니다.
  • 라우팅 작업은 라우팅 규칙이 요청 속성과 일치할 때 수행할 특정 작업을 사용하여 Traffic Director를 구성합니다. 다음과 같은 고급 라우팅 작업을 사용합니다.
    • 리디렉션: Traffic Director는 구성 가능한 3xx 응답 코드를 반환합니다. 또한 적절한 URI로 Location 응답 헤더를 설정하여 리디렉션 작업에 지정된 대로 호스트와 경로를 바꿉니다.
    • URL 재작성: Traffic Director는 선택한 백엔드 서비스에 요청을 보내기 전 URL의 호스트 이름 부분, URL의 경로 부분 또는 둘 다를 다시 작성할 수 있습니다.
    • 헤더 변환: Traffic Director는 백엔드 서비스에 요청을 보내기 전에 요청 헤더를 추가하거나 삭제할 수 있습니다. 또한 백엔드 서비스에서 응답을 수신한 후 응답 헤더를 추가하거나 삭제할 수 있습니다. 헤더 변환은 최상위 수준, 경로 일치자, 라우팅 규칙, 가중치가 있는 백엔드 서비스를 포함한 다양한 수준의 URL 맵에서 구성됩니다. 이렇게 하면 헤더의 계층적 제어를 지정할 수 있습니다.
    • 트래픽 미러링: 선택된 백엔드 서비스로 요청을 전달하는 것 외에도 Traffic Director는 동일한 요청을 '파이어 앤 포겟(fire-and-forget)' 방식으로 구성된 미러링 백엔드 서비스에 전송합니다. 이 기능은 로깅 요청에 유용합니다.
    • 가중치가 적용된 트래픽 분할을 구성하면 일치하는 규칙의 트래픽을 개별 백엔드 서비스에 할당된 사용자 정의 가중치에 맞게 여러 백엔드 서비스에 배포할 수 있습니다. 이 기능은 스테이징 배포 또는 A/B 테스팅을 구성하는 데 유용합니다. 예를 들어 트래픽 중 99%는 안정적인 애플리케이션 버전이 실행되는 서비스에 전송하고 나머지 1%는 해당 애플리케이션이 최신 버전이 실행되는 별도의 서비스에 전송하도록 라우팅 작업을 구성할 수 있습니다.
    • 재시도는 Traffic Director가 실패한 요청을 재시도하는 조건, 재시도 전 대기 시간, 허용된 최대 재시도 횟수를 구성합니다.
    • 잘못된 삽입: Traffic Director는 높은 지연 시간, 서비스 과부하, 서비스 실패, 네트워크 파티션 나누기 등의 장애를 시뮬레이션하기 위한 요청을 제공할 때 의도적으로 오류를 발생시킬 수 있습니다. 이 기능은 장애를 시뮬레이션하면서 서비스의 복원력을 테스트하는 데 유용합니다.
      • 지연 주입은 선택한 백엔드 서비스에 요청을 전송하기 전에 일부 사용자 정의 요청에 지연이 발생하도록 프록시를 구성합니다.
      • 취소 주입은 요청을 백엔드 서비스로 전달하는 대신 사용자 정의 HTTP 상태 코드가 있는 일부 요청에 직접 응답하도록 프록시를 구성합니다.
    • 보안 정책: 교차 출처 리소스 공유(CORS) 정책은 CORS 요청을 적용하는 데 Traffic Director 설정을 사용합니다.

라우팅 규칙 및 우선순위

라우팅 규칙은 우선순위에 따라 실행되므로 일치 규칙을 작업과 유연하게 연결할 수 있습니다.

지정된 경로 일치자 내 라우팅 규칙의 경우 각 규칙의 우선순위에 따라 부하 분산기가 라우팅 규칙을 해석하는 순서가 결정됩니다. 라우팅 규칙은 가장 낮은 숫자부터 가장 높은 숫자까지 우선순위에 따라 평가됩니다. 규칙의 우선순위는 숫자가 증가함에 따라 감소합니다(1, 2, 3, N+1). 요청과 일치하는 첫 번째 규칙이 적용됩니다. 첫 번째 일치가 이루어지면 Traffic Director가 규칙 평가를 중지하고 나머지 규칙은 무시됩니다. 예를 들어 우선순위가 2, 16, 23, 45인 4개의 규칙이 있고 첫 번째 일치가 우선순위가 16인 규칙이라면, 우선순위 23 및 45인 규칙은 무시됩니다.

우선순위가 같은 규칙을 두 개 이상 구성할 수 없습니다. 각 규칙의 우선순위는 0에서 2147483647 사이의 숫자로 설정해야 합니다.

우선순위 번호에는 차이가 있을 수 있습니다. 이렇게 하면 기존 규칙에 영향을 주지 않고 나중에 규칙을 추가하거나 삭제할 수 있습니다. 예를 들어 우선순위가 1, 2, 3, 4, 5, 9, 12, 16인 규칙이 있다고 가정합니다. 이는 6, 7, 8, 11, 13, 14, 15인 규칙을 추가할 수 있는 유효한 시리즈입니다. 새로 추가한 규칙은 기존 규칙에 영향을 주지 않습니다.

각 라우팅 규칙에 우선순위를 제공해야 합니다. 라우팅 규칙을 만들거나 업데이트하려면 우선순위 입력란에 값을 입력해야 합니다. 우선순위 입력란에 값이 없는 경우에도 업데이트하지 않는 기존 라우팅 규칙은 계속 작동합니다.

트래픽 정책 정보

트래픽 정책은 실패한 백엔드 서비스에 대한 응답 및 현지화된 실패가 나머지 서비스 메시에 영향을 미치지 않도록 하는 방법 등 부하 분산의 동작을 정의하는 설정 그룹입니다. 다음 트래픽 정책 기능은 백엔드 서비스에서 구성됩니다.

  • 부하 분산 정책: Traffic Director는 Envoy 문서에 명시된 대로 가용 용량을 기준으로 글로벌 부하 분산을 수행하고, 프록시에서 NEG의 백엔드 VM이나 엔드포인트에 적절한 특정 Google Cloud 영역을 선택할 수 있도록 Google Cloud 영역별 지역 수준의 부하 분산 가중치를 설정합니다. 가중치가 적용된 지역이 선택되면 백엔드 서비스에 지정된 부하 분산 정책은 선택한 지역 내 NEG의 백엔드 VM 또는 엔드포인트에 사용된 알고리즘을 결정합니다. 부하 분산 알고리즘에는 순차 순환, 링 해시, 최소 요청이 포함된 NEG의 백엔드 VM 또는 엔드포인트가 있습니다. Traffic Director에서 글로벌 부하 분산은 URL 맵, 전달 규칙, 백엔드 서비스를 사용하여 수행됩니다.
  • 세션 어피니티: Traffic Director는 HTTP 쿠키 기반 어피니티, HTTP 헤더 기반 어피니티, 클라이언트 IP 주소 어피니티, 생성된 쿠키 어피니티 등의 몇몇 세션 어피니티 옵션을 제공합니다. routeAction에 2개 이상의 weightedBackendServices가 포함되어 있으면 어피니티 설정이 적용되지 않습니다. 세션 어피니티에 대한 자세한 내용은 세션 어피니티를 참조하세요.
  • 이상점 감지는 NEG에서 비정상 백엔드 VM 또는 엔드포인트를 제거하는 기준과 백엔드 또는 엔드포인트에서 트래픽을 다시 수신하기에 충분할 정도로 정상임을 판단하는 기준을 지정하는 정책입니다.
  • 회로 차단은 백엔드 서비스 연결량 및 연결당 요청에 대한 상한값을 설정합니다.

고급 트래픽 관리 데이터 모델

3개의 기존 Google Cloud 리소스가 고급 경로 및 트래픽 정책과 같은 기능을 구현하는 데 사용됩니다. 다음 다이어그램은 각 기능을 구현하는 데 사용되는 리소스를 보여줍니다.

Traffic Director 트래픽 조정(확대하려면 클릭)
Traffic Director 데이터 모델(확대하려면 클릭)

전달 규칙 리소스

Traffic Director는 부하 분산 스키마가 INTERNAL_SELF_MANAGED인 전달 규칙을 사용합니다. 전달 규칙은 구성 가능한 RFC 1918 IP 주소에서 트래픽을 가로채서 대상 HTTP 프록시 및 URL 맵으로 보냅니다. 전달 규칙 리소스는 선택적 프록시 구성을 사용하여 고급 트래픽 관리를 지원합니다. Traffic Director는 전달 규칙의 메타데이터 필터에 지정된 기준을 충족하는 프록시로만 경로 구성을 제공합니다.

메타데이터 필터를 사용하여 사이드카 프록시의 하위 집합으로 구성을 푸시합니다. 메타데이터 필터가 없는 경우 모든 프록시는 VPC 네트워크와 연결된 모든 구성을 수신합니다. 메타데이터 필터를 사용하면 전달 규칙의 범위를 보다 세밀하게 제어할 수 있으므로 트래픽 분산을 정의하는 URL 맵과 백엔드 서비스를 더 세부적으로 제어할 수 있습니다.

이는 다음과 같은 경우에 유용합니다.

  1. 네트워크 요구 사항을 준수하기 위해 여러 프로젝트가 동일한 공유 VPC 네트워크를 사용하지만 각 서비스 프로젝트는 동일한 프로젝트의 프록시에만 Traffic Director 리소스를 표시하려고 합니다.
  2. 데이터 영역은 파티션을 나누며 각 프록시는 네트워크의 구성 하위 집합에 대해서만 알아야 합니다.
  3. 새 구성을 도입하고 있으며 모든 프록시에서 사용할 수 있도록 하려면 프록시 하위 집합에서 테스트해야 합니다.

메타데이터 필터를 구성하는 방법에 대한 자세한 내용은 MetadataFilter 일치를 기반으로 구성 필터링 설정을 참조하세요.

URL 맵 리소스

URL 맵 구성요소는 경로 일치자의 고급 라우팅 기능을 지원하도록 확장되었습니다. 경로 프리픽스, 전체 경로, 경로 정규식, HTTP 헤더, 쿼리 매개변수를 기반으로 요청을 일치시킬 수 있습니다. 프리픽스와 전체 경로, 정규식은 모두 일치 항목의 경로 부분에 적용됩니다. 자세한 내용은 Envoy 프록시 RouteMatch 문서를 참조하세요.

  • 경로 일치자: Traffic Director는 URL 맵의 경로 일치자 개념을 확장합니다. GCP HTTP(S) 부하 분산기에서와 같이 간단한 경로 규칙을 계속해서 사용하거나 라우팅 규칙을 사용할 수 있습니다. 단, 이 2가지 유형의 규칙만 사용해야 합니다. 경로 규칙은 '가장 긴 길이의 경로부터 일치' 방식으로 평가되며 이러한 규칙은 원하는 순서로 지정할 수 있습니다. 라우팅 규칙은 순서대로 평가됩니다. 따라서 복잡한 라우팅 기준을 보다 유연하게 정의할 수 있습니다.
    • 라우팅 규칙(HttpRouteRules): Traffic Director는 우선순위에 따라 라우팅 규칙을 평가합니다. 라우팅 규칙의 구성요소는 다음과 같습니다.
      • 우선순위: 부하 분산기가 라우팅 규칙을 해석하는 순서를 결정하는 지정된 경로 일치자 내 규칙에 할당된 0에서 2147483647까지의 숫자입니다. 규칙의 우선순위는 숫자가 증가함에 따라 감소하므로 숫자가 4인 규칙이 숫자가 25인 규칙보다 우선합니다. 요청과 일치하는 첫 번째 규칙이 적용됩니다. 우선순위 번호에는 차이가 있을 수 있습니다. 우선순위가 같은 규칙을 두 개 이상 구성할 수 없습니다.
      • 설명: 최대 1,024자에 대한 설명입니다(선택사항).
      • 라우팅 규칙 일치(HttpRouteRuleMatch): 라우팅 규칙을 경로, HTTP 헤더, 쿼리(GET) 매개변수 같은 요청 속성의 전체 또는 하위 집합을 일치시키는 요청에 적용할지 여부를 결정할 수 있습니다. HttpRouteRuleMatch 내에 규칙의 작업이 적용되려면 모든 일치 기준을 충족해야 합니다. 요청에 HttpRouteRuleMatch가 여러 개이면 요청이 규칙의 HttpRouteRuleMatch와 일치할 때 규칙 작업이 적용됩니다.
      • 경로 작업(HttpRouteAction): HttpRouteRuleMatch 내의 기준이 충족되면 Traffic Director가 수행해야 하는 작업을 지정할 수 있습니다. 이러한 작업에는 트래픽 분할, URL 재작성, 재시도 및 미러링, 결함 주입, CORS 정책이 있습니다.
      • 리디렉션 작업(HttpRedirectAction): HttpRouteRuleMatch 내의 기준이 충족되면 Traffic Director가 HTTP 리디렉션으로 응답하도록 구성할 수 있습니다.
      • 헤더 작업(HttpHeaderAction): HttpRouteRuleMatch 내의 기준을 충족할 때 요청을 구성하고 헤더 변환 규칙에 응답할 수 있습니다.
      • 메타데이터 필터(MetadataFilters): 라우팅 규칙에 연결된 라우팅 구성을 가져오는 xDS 호환 프록시의 기준을 지정할 수 있습니다.
    • 라우팅 규칙(PathRule): Traffic Director는 기존 URL 맵과의 호환성을 유지하기 위해.경로 일치자에서 경로 규칙 객체를 지원합니다. 경로 규칙은 원하는 순서로 입력할 수 있습니다. Traffic Director는 '가장 긴 길이의 경로부터 일치' 방식으로 경로 일치자 내의 모든 경로 규칙에서 각 경로에 대한 요청 경로를 일치시킵니다. 경로 일치 항목이 있으면 해당 경로 규칙의 백엔드 서비스로 트래픽이 라우팅됩니다.

고급 라우팅 기능의 URL 맵 계층 구조는 다음과 같습니다.

  • 기본 백엔드 서비스 또는 기본 백엔드 버킷
  • Traffic Director에만 해당: 기본 경로 작업
  • Traffic Director에만 해당: 기본 리디렉션
  • 호스트 규칙 목록
  • 경로 일치자 목록으로 각 경로 일치자에는 다음이 포함됩니다.
    • Traffic Director에만 해당: 기본 경로 작업
    • Traffic Director에만 해당: 기본 리디렉션
    • 경로 일치자의 기본 백엔드 서비스 또는 기본 백엔드 버킷
    • 경로 규칙 목록
    • Traffic Director에만 해당: 라우팅 규칙 목록
      • Traffic Director에만 해당: 일치 규칙 목록
      • Traffic Director에만 해당: 경로 작업
      • Traffic Director에만 해당: 리디렉션
      • Traffic Director에만 해당: 헤더 작업

백엔드 서비스 리소스

Traffic Director는 부하 분산 스키마가 INTERNAL_SELF_MANAGED인 백엔드 서비스를 사용합니다. 이 스키마가 포함된 백엔드 서비스는 트래픽 정책의 대부분을 구현하는 설정을 지원합니다. 내부 관리형 백엔드 서비스에는 다음과 같은 속성을 지정할 수 있습니다.

  • 부하 분산 정책(LocalityLoadBalancingPolicy): 내부 관리형 백엔드 서비스의 경우 부하 분산 모드부하 분산 정책의 조합을 사용하여 트래픽 분산을 수행합니다. 백엔드 서비스는 백엔드의 분산 모드에 따라 백엔드(인스턴스 그룹 또는 NEG)로 트래픽을 전달합니다. 이후 백엔드가 선택되면 Traffic Director가 부하 분산 정책에 따라 트래픽을 분산합니다. 분산 모드를 사용하면 Traffic Director에서 먼저 Google Cloud 영역과 같은 지역을 선택할 수 있습니다. 그런 다음 부하 분산 정책을 사용하여 NEG에서 특정 백엔드 VM 또는 엔드포인트를 결정합니다.
  • 세션 어피니티(SessionAffinity): 내부 자체 관리형 백엔드 서비스는 4가지 세션 어피티니 즉, 클라이언트 IP 주소, HTTP 쿠키 기반, HTTP 헤더 기반, 생성된 쿠키 어피니티(Traffic Director에서 자체 생성)를 지원합니다.
  • 일관된 해시(ConsistentHashLoadBalancerSettings)는 새 요청을 NEG의 동일한 백엔드 VM 또는 엔드포인트로 지속적으로 라우팅하기 위해 Traffic Director의 쿠키와 헤더에서 일관된 해시를 빌드하기 위한 기준을 정의합니다.
  • 회로 차단기(CircuitBreakers)는 특정 백엔드 VM 또는 백엔드 서비스 엔드포인트로 전송되는 트래픽 양을 제한하는 매개변수를 정의합니다. 그러면 의미 있게 처리할 수 없는 요청으로 서비스가 과부화되는 것을 방지할 수 있습니다.
  • 이상점 감지(OutlierDetection)는 NEG의 백엔드 VM 또는 엔드포인트가 비정상으로 간주되어 부하 분산 고려사항에서 제외되는 조건을 결정하는 기준뿐만 아니라 백엔드 VM 또는 엔드포인트가 부하 분산에 적합하다고 판단하기 전에 반드시 충족해야 하는 조건을 정의합니다. 백엔드 서비스에 연결된 상태 확인이 NEG의 백엔드 VM 또는 엔드포인트를 비정상으로 표시하면 백엔드 VM 또는 엔드포인트가 비정상 상태로 간주됩니다.

제한사항

Traffic Director의 프록시리스 gRPC 애플리케이션에 적용되는 제한사항에 대한 자세한 내용은 개요 가이드의 제한사항 섹션을 참조하세요.

다음 단계

고급 트래픽 관리를 설정하는 방법에 대한 자세한 내용은 고급 트래픽 관리 구성을 참조하세요.