Cloud Run에서 각 버전은 모든 수신 요청, 이벤트 또는 CPU 사용률을 처리하는 데 필요한 인스턴스 수에 맞게 자동으로 확장됩니다.
버전에 트래픽이 수신되지 않으면 기본적으로 버전이 인스턴스 0개로 축소됩니다. 하지만 원하는 경우 이 기본값을 변경하여 최소 인스턴스 설정을 사용해 이 인스턴스를 유휴 또는 '준비' 상태로 유지하도록 지정할 수 있습니다. 요청 외의 CPU를 사용하는 경우 최소 인스턴스를 1
로 설정해야 합니다.
수신 요청 비율, 이벤트 비율 또는 CPU 사용률 외에도 예약된 인스턴스 수가 다음의 영향을 받습니다.
- 1분 동안 기존 인스턴스의 평균 CPU 사용률(예약된 인스턴스를 60% CPU 사용률로 유지하기 위한 타겟팅)
- 1분 간의 최대 동시 실행과 비교한 현재의 요청 동시 실행
- 최대 인스턴스 수 설정
- 최소 인스턴스 수 설정
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이 최대 인스턴스 한도까지 매우 빠르게 수평 확장하여 모든 수신 요청이나 이벤트를 처리할 수 있습니다. 하지만 한도를 높게 설정한다고 해서 버전이 특정 시점에 지정된 인스턴스 수까지 수평 확장할 수 있다는 의미는 아닙니다. 예외적인 상황에서 Cloud Run이 모든 고객에게 양호한 서비스를 보장하기 위해 확장을 제한할 수 있습니다.
트래픽 급증으로 인한 최대 인스턴스 초과
빠르게 트래픽이 증가하거나 시스템 유지보수와 같은 일부 경우에는 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 요청처럼 수신되므로 동일한 자동 확장 동작이 트리거됩니다.
자동 확장 및 여러 컨테이너(사이드카)
Cloud Run은 자동 확장을 위해 instances의 CPU 사용률을 고려합니다. 여기서 인스턴스의 CPU 사용률은 사용 중인 할당된 CPU의 비율입니다.
컨테이너 수준에서 CPU 한도를 설정할 때 CPU를 할당합니다. 인스턴스당 여러 컨테이너를 사용하는 경우 해당 인스턴스의 실제 CPU 할당량은 각 컨테이너에 설정된 CPU 한도의 합계입니다.
다음 단계
- Cloud Run 서비스의 최대 인스턴스 수를 관리하려면 최대 인스턴스 수 설정을 참조하세요.
- 각 인스턴스에서 처리하는 최대 동시 요청 수를 관리하려면 동시 실행 설정을 참조하세요.
- 동시 실행 설정을 최적화하려면 동시 실행 조정을 위한 개발 팁을 참조하세요.
- 첫 번째 요청에 대한 지연 시간 또는 콜드 스타트를 최소화하기 위해 유휴 인스턴스가 계속 실행되도록 지정하려면
min-instance
를 사용하여 유휴 인스턴스 사용 설정을 참조하세요.