요청-응답 서비스

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

  • 인간 사용자가 브라우저를 사용하여 직접 상호작용하는 웹 애플리케이션
  • 사용자 휴대전화의 클라이언트 애플리케이션과 클라이언트가 상호작용하는 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\"!=\"4xx\"",
      "goodServiceFilter":
        "metric.type=\"serviceruntime.googleapis.com/api/request_count\"
         resource.type=\"api\"
         (metric.label.\"response_code_class\"=\"1xx\"" OR
          metric.label.\"response_code_class\"=\"2xx\""),
    }
  }
}

지연 시간 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": "3600s",
  "displayName": "99% 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": "3600s",
  "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\"!=\"4xx\"",
      "goodServiceFilter":
        "metric.type=\"run.googleapis.com/request_count\"
         resource.type=\"cloud_run_revision\"
         (metric.label.\"response_code_class\"=\"1xx\"" OR
          metric.label.\"response_code_class\"=\"2xx\""),
     }
  }
}

지연 시간 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/request_latencies\"
           resource.type=\"cloud_run_revision"",
        "range": {
           "min": 0,
           "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "3600s",
  "displayName": "99% 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": "3600s",
  "displayName": "99% requests under 100 ms"
}

App Engine

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

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": "3600s",
  "displayName": "99% requests under 100 ms"
}

GKE 및 Istio

Google Kubernetes Engine(GKE)은 4가지 자동 확장 및 멀티 클러스터 지원을 제공하는 Google의 안전한 관리형 Kubernetes 서비스입니다. Istio는 서비스를 연결, 보호, 제어, 관찰할 수 있게 해주는 오픈소스 서비스 메시입니다. Istio는 GKE의 부가기능인 Cloud Service Mesh로 또는 오픈소스 프로젝트의 사용자에 의해 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": "3600s",
  "displayName": "99% requests under 100 ms"
}