요청-응답 서비스

요청-응답 서비스는 고객이 서비스에 일부 작업을 수행하고 특정 작업이 성공적으로 완료될 때까지 기다리도록 명시적으로 요청하는 서비스입니다. 이러한 서비스의 가장 일반적인 예시는 다음과 같습니다.

  • 인간 사용자가 브라우저를 사용하여 직접 상호작용하는 웹 애플리케이션
  • 사용자 휴대전화의 클라이언트 애플리케이션과 클라이언트가 상호작용하는 API 백엔드로 구성된 모바일 애플리케이션
  • 인간 사용자가 아닌 다른 서비스에서 활용하는 API 백엔드

이러한 모든 서비스의 경우 일반적인 접근 방식은 가용성(성공적인 요청 비율 측정)과 지연 시간(시간 임곗값에 따라 완료된 요청 비율 측정) SLI부터 시작됩니다. 가용성 및 지연 시간 SLI에 대한 자세한 내용은 서비스 모니터링 개념을 참조하세요.

TimeSeriesRatio 구조를 사용하여 총 요청에 대한 양호한 요청의 비율을 설정해 요청 기반 가용성 SLI를 표현합니다. 사용 가능한 라벨을 사용하여 측정항목을 필터링해 '양호' 또는 '유효' 중 원하는 결정을 내리는 방법을 결정합니다.

DistributionCut 구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다.

Cloud Endpoints

Cloud Endpoints는 API를 관리하는 데 사용되는 서비스입니다. 이 API를 사용하면 기존 API를 가져와 인증, 할당량, 모니터링과 함께 노출할 수 있습니다.

Endpoints는 gRPC 애플리케이션 서버 앞에서 프록시로 구현됩니다. 모든 백엔드를 사용할 수 없고 사용자에게 오류가 발생하는 경우 프록시에서 측정항목을 측정하면 사례를 올바르게 처리할 수 있습니다. Endpoints는 serviceruntime.googleapis.com 프리픽스로 시작하는 측정항목 유형에 데이터를 기록합니다.

자세한 내용은 다음을 참조하세요.

가용성 SLI

Cloud Endpoints는 api 모니터링 리소스 유형과 response_code 측정항목 라벨을 사용하여 '양호' 및 '총' 요청 수를 계산해 필터링할 수 있는 서비스 런타임 api/request_count 측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.

다음 예시와 같이 전체 요청에 대한 양호한 요청의 TimeSeriesRatio 구조를 만들어 요청 기반 가용성 SLI를 표현합니다.

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"serviceruntime.googleapis.com/api/request_count\"
         resource.type=\"api\"
         metric.label.\"response_code_class\">\"499\"
         metric.label.\"response_code_class\"<\"399\"",
      "goodServiceFilter":
        "metric.type=\"serviceruntime.googleapis.com/api/request_count\"
         resource.type=\"api\"
         metric.label.\"response_code_class\"<=\"299\"",
    }
  }
}

지연 시간 SLI

Cloud Endpoints는 다음 기본 측정항목 유형을 사용하여 지연 시간을 캡처합니다.

  • api/request_latencies: 비스트리밍 요청에 대한 지연 시간 분포(초 단위)입니다. 전반적인 사용자 환경이 중요한 경우에 사용합니다.
  • api/request_latencies_backend: 비스트리밍 요청에 대한 백엔드 지연 시간 분포(초 단위)입니다. 백엔드 지연 시간을 직접 측정할 때 사용합니다.
  • api/request_latencies_overhead: 백엔드를 제외한 비스트리밍 요청에 대한 요청 지연 시간 분포(초 단위)입니다. Endpoints 프록시에 의해 발생한 오버헤드를 측정할 때 사용합니다.

총 요청 지연 시간은 백엔드와 오버헤드 지연 시간의 합계입니다.

request_latencies = request_latencies_backend + request_latencies_overhead

Endpoints는 api 모니터링 리소스 유형과 요청 지연 시간 측정항목 유형 중 하나를 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. response_code 또는 response_code_class 라벨을 제공하는 측정항목 유형은 없습니다. 따라서 모든 요청의 지연 시간을 보고합니다.

다음 예시와 같이 DistributionCut 구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다.

다음 예시 SLO에서는 프로젝트의 모든 요청 중 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"serviceruntime.googleapis.com/ap/request_latencies\"
           resource.type=\"api\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 100 ms"
}

다음 예시 SLO에서는 요청의 98%가 1시간 동안 백엔드 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"serviceruntime.googleapis.com/api/backend_latencies\"
           resource.type=\"api\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.98,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 100 ms"
}

Cloud Run

Cloud Run은 컨테이너화된 애플리케이션을 빠르고 안전하게 배포 및 확장하는 완전 관리형 컴퓨팅 플랫폼입니다. 거의 즉시 0에서부터 자동으로 확장 및 축소되어 트래픽 변경에 응답하고 사용한 리소스에만 정확하게 청구하여 모든 인프라 관리 업무를 덜어줍니다.

Cloud Run 관측 가능성에 대한 자세한 내용은 다음을 참조하세요.

가용성 SLI

Cloud Run은 cloud_run_revision 모니터링 리소스 유형과 request_count 측정항목을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. response_code 또는 response_code_class 측정항목 라벨을 사용하여 '양호' 및 '총' 요청 수를 계산해 데이터를 필터링할 수 있습니다.

다음 예시와 같이 전체 요청에 대한 양호한 요청의 TimeSeriesRatio 구조를 만들어 요청 기반 가용성 SLI를 표현합니다.

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"run.googleapis.com/request_count\"
         resource.type=\"cloud_run_revision\"
         metric.label.\"response_code_class\">\"499\"
         metric.label.\"response_code_class\"<\"399\"",
      "goodServiceFilter":
        "metric.type=\"run.googleapis.com/request_count\"
         resource.type=\"cloud_run_revision\"
         metric.label.\"response_code_class\"<=\"299\"",
     }
  }
}

지연 시간 SLI

지연 시간을 측정하기 위해 Cloud Run은 cloud_run_revision 모니터링 리소스 유형과 request_latencies 측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. 데이터는 버전에 도달하는 요청 지연 시간 분포(밀리초 단위)입니다. 모든 요청이나 성공한 요청에 대해서만 지연 시간을 명시적으로 측정해야 하는 경우 response_code 또는 response_code_class 측정항목 라벨을 사용하여 데이터를 필터링할 수 있습니다.

DistributionCut 구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 요청의 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"run.googleapis.com/https/request_latencies\"
           resource.type=\"cloud_run_revision"",
        "range": {
           "min": 0,
           "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 100 ms"
}

Cloud Functions

Cloud Functions는 인프라를 관리할 필요 없이 코드를 실행하는 서비스를 제공하는 확장 가능하고 사용한 만큼만 지불하는 서비스로서의 기능입니다. Functions는 이벤트 처리, 자동화, HTTP/S 요청 제공과 같은 작업을 수행하도록 여러 아키텍처 패턴에서 사용됩니다.

Cloud Functions 관측 가능성에 대한 자세한 내용은 다음을 참조하세요.

가용성 SLI

Cloud Functions는 cloud_function 모니터링 리소스 유형과 function/execution_time 측정항목을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. status 측정항목 라벨을 사용하여 '양호' 및 '총' 실행 횟수를 계산해 데이터를 필터링할 수 있습니다.

다음 예시와 같이 전체 요청에 대한 양호한 요청의 TimeSeriesRatio 구조를 만들어 요청 기반 가용성 SLI를 표현합니다.

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"cloudfunctions.googleapis.com/function/execution_count\"
         resource.type=\"cloud_function\"",
      "goodServiceFilter":
        "metric.type=\"cloudfunctions.googleapis.com/function/execution_count\"
         resource.type=\"cloud_function\
         metric.label.\"status\"=\"ok\"",
     }
  }
}

지연 시간 SLI

지연 시간을 측정하기 위해 Cloud Functions는 cloud_function 모니터링 리소스 유형과 function/execution_times 측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. 데이터는 함수 실행 시간 분포(나노초 단위)입니다. 모든 실행이나 성공한 실행에 대해서만 지연 시간을 명시적으로 측정해야 하는 경우 status를 사용하여 데이터를 필터링할 수 있습니다.

DistributionCut 구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 모든 Cloud Functions 실행의 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"cloudfunctions.googleapis.com/function/execution_times\"
           resource.type=\"cloud_function\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 100 ms"
}

App Engine

App Engine은 애플리케이션을 빌드하고 실행할 수 있는 완전 관리형 서버리스 플랫폼을 제공합니다. 표준 또는 가변형 등 두 가지 환경을 선택할 수 있습니다. 자세한 내용은 App Engine 환경 선택을 참조하세요.

App Engine 가변형 환경은 가용성 또는 지연 시간 SLI로 간편하게 사용할 수 있는 측정항목을 제공하지 않습니다. SLI에 Cloud Load Balancing이나 로그 기반 측정항목을 사용하는 것이 좋습니다. 자세한 내용은 다음 SLI 문서를 참조하세요.

App Engine에 대한 자세한 내용은 다음을 참조하세요.

가용성 SLI

App Engine 표준 환경은 gae_app 모니터링 리소스 유형과 http/server/response_count 측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. response_code 측정항목 라벨을 사용하여 '양호' 및 '총' 응답 횟수를 계산해 데이터를 필터링할 수 있습니다.

다음 예시와 같이 총 요청에 대한 양호한 요청의 TimeSeriesRatio 구조를 만들어 App Engine 표준 환경의 요청 기반 가용성 SLI를 표현합니다.

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"appengine.googleapis.com/http/server/response_count\"
         resource.type=\"gae_app\"
         metric.label.\"response_code\">\"499\"
         metric.label.\"response_code\"<\"399\"",
      "goodServiceFilter":
        "metric.type=\"appengine.googleapis.com/http/server/response_count\"
         resource.type=\"gae_app\"
         metric.label.\"response_code\"<\"299\"",
     }
  }
}

지연 시간 SLI

지연 시간을 측정하기 위해 App Engine 표준 환경은 gae_app 모니터링 리소스 유형과 http/server/response_latencies 측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. response_code 측정항목 라벨을 사용하여 '양호' 및 '총' 실행 횟수를 계산해 데이터를 필터링할 수 있습니다.

DistributionCut 구조를 사용하여 App Engine 표준 환경의 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 모든 요청의 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"appengine.googleapis.com/http/server/response_latencies\"
           resource.type=\"gae_app\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 100 ms"
}

GKE 및 Istio

Google Kubernetes Engine(GKE)은 4가지 자동 확장 및 멀티 클러스터 지원을 제공하는 Google의 안전한 관리형 Kubernetes 서비스입니다. Istio는 서비스를 연결, 보호, 제어, 관찰할 수 있게 해주는 오픈소스 서비스 메시입니다. Istio는 GKE의 부가기능인 Istio on GKE로 또는 오픈소스 프로젝트의 사용자에 의해 GKE에 설치될 수 있습니다. 두 경우 모두 Istio는 메시에서 관리하는 각 서비스의 트래픽, 오류, 지연 시간에 대한 정보가 포함된 우수한 원격 분석을 제공합니다.

Istio 측정항목의 전체 목록은 istio.io 측정항목 유형을 참조하세요.

가용성 SLI

Istio는 service/server/request_count 측정항목 유형과 다음 모니터링 리소스 유형 중 하나를 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.

response_code 측정항목 라벨을 사용하여 '양호' 및 '총' 요청 수를 계산해 데이터를 필터링할 수 있습니다. destination_service_name 측정항목 라벨을 사용하여 특정 서비스의 요청 수를 계산할 수도 있습니다.

다음 예시와 같이 총 요청 수에 대한 TimeSeriesRatio 구조를 만들어 Istio 서비스 메시에서 관리하는 GKE에서 실행되는 서비스의 요청 기반 가용성 SLI를 표현합니다.

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"istio.io/service/server/request_count\"
         resource.type=\"k8s_container\"
         metric.label.\"destination_service_name\"=\"frontend\"",
      "goodServiceFilter":
        "metric.type=\istio.io/server/response_count\"
         resource.type=\"k8s_container\"
         metric.label.\"destination_service_name\"=\"frontend\"
         metric.label.\"response_code\"<\"299\"",
    }
  }
}

지연 시간 SLI

지연 시간을 측정하기 위해 Istio는 service/server/response_latencies 측정항목 유형과 다음 모니터링 리소스 유형 중 하나를 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.

특정 서비스의 요청 수를 계산하려면 response_code 측정항목 라벨을 사용하여 "good" and "total" requests. You can also use thedestination_service_name` 측정항목 라벨을 계산해 데이터를 필터링하면 됩니다.

DistributionCut 구조를 사용하여 Istio 서비스 메시에서 관리하는 GKE에서 실행되는 서비스의 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 frontend 서비스에 대한 모든 요청 중 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"istio.io/server/response_latencies\"
           resource.type=\"k8s_container\"
           metric.label.\"destination_service_name\"=\"frontend\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 100 ms"
}