Cloud Run 서비스의 인스턴스 자동 확장 정보

Cloud Run에서 각 버전은 모든 수신 요청, 이벤트 또는 CPU 사용률을 처리하는 데 필요한 인스턴스 수에 맞게 자동으로 확장됩니다.

버전에 트래픽이 수신되지 않으면 기본적으로 버전이 인스턴스 0개로 축소됩니다. 하지만 원하는 경우 이 기본값을 변경하여 최소 인스턴스 설정을 사용해 이 인스턴스를 유휴 또는 '준비' 상태로 유지하도록 지정할 수 있습니다. 요청 외의 CPU를 사용하는 경우 최소 인스턴스를 1로 설정해야 합니다.

수신 요청 비율, 이벤트 비율 또는 CPU 사용률 외에도 예약된 인스턴스 수가 다음의 영향을 받습니다.

Cloud Run 자동 확장 처리는 이를 5초마다 평가합니다.

CPU가 항상 할당 및 자동 확장

CPU가 항상 할당되도록 Cloud Run 서비스를 구성하는 경우 동작을 0으로 확장하거나 0에서 확장하는 것에 유의해야 합니다.

CPU가 항상 0부터 확장에 할당됨. 0부터의 확장은 요청에 의해서만 트리거될 수 있으므로 요청을 처리하지 않는 서비스는 0부터 확장할 수 없습니다. 이러한 워크로드의 경우 최소 인스턴스를 0보다 크게 설정하거나 0으로 축소한 후 처리를 다시 시작하도록 설계에 'wake-up 요청'을 포함할 수 있습니다.

CPU가 항상 0으로 축소에 할당됨. CPU가 0%인 인스턴스가 없는 경우 모든 CPU 사용량을 살펴보면 0으로 축소되지 않습니다. 즉, 인스턴스가 요청을 처리 중인지 확인해야만 1에서 0으로 축소할 수 있습니다.

최대 인스턴스 정보

비용 관리 목적으로 또는 서비스에서 사용하는 다른 리소스와의 호환성을 높이기 위해 시작 가능한 총 인스턴스 수를 제한해야 할 수 있습니다. 예를 들면 Cloud Run 서비스가 동시에 열려 있는 연결을 일정한 개수만 처리할 수 있는 데이터베이스와 상호작용하는 경우가 있습니다.

최대 인스턴스 설정을 사용하여 최대 인스턴스 수 설정에 설명된 대로 동시에 시작할 수 있는 총 인스턴스 수를 제한할 수 있습니다.

최대 인스턴스 수 초과

일반적인 상황에서는 수신 트래픽 로드를 처리하기 위해 새 인스턴스를 만들어 버전을 수평 확장합니다. 하지만 최대 인스턴스 한도를 설정하면 경우에 따라 수신 트래픽 로드를 처리하기에 인스턴스가 부족할 수 있습니다. 이 경우 수신 요청은 다음과 같이 큐에 추가됩니다(대기 상태).

  • 수평 확장 시와 같이 새 인스턴스가 시작되는 경우 요청은 최소한 이 서비스의 컨테이너 인스턴스 평균 시작 시간만큼 대기합니다. 여기에는 0에서 확장하는 경우와 같이 요청이 수평 확장을 시작하는 경우가 포함됩니다.
  • 시작 시간이 10초 미만이면 요청이 최대 10초 동안 대기합니다.
  • 시작 프로세스에 인스턴스가 없고 요청이 수평 확장을 시작하지 않은 경우 요청은 최대 10초 동안 대기합니다.

이 기간 동안 인스턴스가 요청의 처리를 완료하면 큐에 추가된 대기 중인 요청을 처리하는 데 인스턴스를 사용할 수 있게 됩니다. 이 기간 동안 사용 가능하게 되는 인스턴스가 없으면 429 오류 코드와 함께 요청이 실패합니다.

확장 보증

최대 인스턴스 한도는 버전별 상한 값입니다. 한도를 높게 설정한다고 해서 버전이 지정한 인스턴스 수로 수평 확장되는 것은 아니며, 이 버전의 인스턴스 수가 최댓값을 초과하지 않아야 함을 의미합니다.

트래픽 급증으로 인한 최대 인스턴스 초과

빠르게 트래픽이 증가하거나 시스템 유지보수와 같은 일부 경우에는 Cloud Run이 잠시 동안 최대 인스턴스 설정에 지정된 것보다 많은 인스턴스를 만들 수 있습니다. 최대 인스턴스 설정 초과 시 새 인스턴스를 시작하여 기존 인스턴스를 대체하고 진행 중인 요청이 처리를 완료할 수 있도록 유예 기간을 제공할 수 있습니다.

정상적인 운영 상황에서 1주일에 몇 번 정도는 최대 인스턴스 한도가 초과될 수 있습니다. 유예 기간은 일반적으로 최대 15분 또는 요청 제한 시간 설정에 지정된 값까지 지속됩니다. 이러한 추가 인스턴스는 유휴 상태가 된 후 15분 이내에 폐기됩니다.

대체가 많이 필요한 경우 일반적으로 업데이트는 몇 분 또는 몇 시간에 걸쳐 분산되지만 각 교체에는 유예 기간 동안 초과 인스턴스가 있습니다. 최대 인스턴스 값을 초과하는 인스턴스는 일반적으로 구성된 최대 인스턴스 한도의 두 배 미만이지만, 갑작스러운 대규모 트래픽 급증에는 훨씬 더 커질 수 있습니다.

부하 테스트에서는 최대 인스턴스 설정을 초과하는 더 많은 인스턴스가 발생하는 데, 이는 시스템이 지속적인 로드 패턴을 가진 기존 워크로드의 용량을 보존하기 위해 트래픽 급증의 처리 위치를 변경할 수 있기 때문입니다.

서비스가 이 일시적인 동작을 감당할 수 없으면 안전성이 보장되는 여유를 고려하여 최대 인스턴스 값을 더 낮게 설정해야 할 수 있습니다.

트래픽 분할

최대 인스턴스 한도가 각 버전의 한도이기 때문에 서비스가 여러 버전 간에 트래픽을 분할하는 경우 서비스의 총 인스턴스 수가 버전별 최대 인스턴스 수를 초과할 수 있습니다. 이러한 상황은 인스턴스 수 측정항목에서 확인할 수 있습니다.

배포

트래픽의 100%를 제공하도록 새 버전을 배포하는 경우 Cloud Run에서 트래픽을 전달하기 전에 새 버전의 인스턴스를 충분히 시작합니다. 이렇게 하면 특히 높은 수준의 트래픽을 처리할 때 새 버전 배포가 요청 지연 시간에 미치는 영향이 줄어듭니다. 최대 인스턴스 한도가 각 버전의 한도이기 때문에 배포 중 서비스의 총 인스턴스 수가 버전별 최대 인스턴스 수를 초과할 수 있습니다. 이러한 상황은 인스턴스 수 측정항목에서 확인할 수 있습니다.

유휴 인스턴스 및 콜드 스타트 최소화

인스턴스가 모든 요청을 처리하면 Cloud Run은 즉시 인스턴스를 종료하지 않습니다. 콜드 스타트의 영향을 최소화하기 위해 Cloud Run은 일부 인스턴스를 최대 15분 동안 유휴 상태로 유지할 수 있습니다. 이러한 인스턴스는 갑작스러운 트래픽 급증이 발생할 경우 요청을 처리할 수 있습니다.

예를 들어 인스턴스는 요청 처리를 완료한 후 다른 요청을 처리해야 할 경우를 대비하여 일정 기간 동안 유휴 상태로 유지될 수 있습니다. 유휴 인스턴스는 열린 데이터베이스 연결과 같은 리소스를 유지할 수 있습니다. CPU가 항상 할당되도록 명시적으로 구성하지 않는 한 CPU는 요청 처리 중에만 할당됩니다.

유휴 인스턴스를 영구적으로 유지하려면 min-instance 설정을 사용하세요. 이 기능을 사용하면 서비스에서 요청을 적극적으로 처리하지 않는 경우에도 비용이 발생합니다.

자동 확장 및 대기 중인 요청

  • 수평 확장 시와 같이 새 인스턴스가 시작되는 경우 요청은 최소한 이 서비스의 컨테이너 인스턴스 평균 시작 시간만큼 대기합니다. 여기에는 0에서 확장하는 경우와 같이 요청이 수평 확장을 시작하는 경우가 포함됩니다.
  • 시작 시간이 10초 미만이면 요청이 최대 10초 동안 대기합니다.
  • 시작 프로세스에 인스턴스가 없고 요청이 수평 확장을 시작하지 않은 경우 요청은 최대 10초 동안 대기합니다.

자동 확장이 지원 서비스에 미치는 영향

인스턴스 수가 자동으로 증가함에 따라 Cloud Run 서비스에서 지원 서비스에 제한을 적용할 수 있습니다. 예를 들어 Cloud SQL에는 API 할당량 한도가 있습니다. 이러한 지원 서비스에 충분한 할당량이 있고 Cloud Run 서비스의 모든 인스턴스에서 들어오는 연결을 처리할 수 있는지 확인합니다. 지원 서비스가 과부하되지 않도록 최대 인스턴스 수를 설정하는 것이 좋습니다.

자동 확장 및 Pub/Sub

내보내기 구독을 사용하여 Cloud Run의 Pub/Sub 주제에서 메시지를 사용하는 것이 좋습니다. 푸시된 메시지는 컨테이너의 HTTP 요청과 같이 수신되어 동일한 자동 확장 동작을 트리거합니다.

다음 단계