비용 최적화: 컴퓨팅, 컨테이너, 서버리스

Last reviewed 2023-07-12 UTC

Google Cloud 아키텍처 프레임워크의 이 문서에서는 Google Cloud에서 가상 머신(VM), 컨테이너, 서버리스 리소스 비용을 최적화하는 데 도움이 되는 권장사항을 제공합니다.

이 섹션의 안내는 클라우드에서 워크로드의 컴퓨팅 리소스를 프로비저닝하고 관리하는 설계자, 개발자, 관리자를 대상으로 합니다.

컴퓨팅 리소스는 클라우드 인프라에서 가장 중요한 부분입니다. 워크로드를 Google Cloud에 마이그레이션할 때는 일반적으로 클라우드에서 VM을 효율적으로 프로비저닝하고 관리할 수 있게 해주는 Compute Engine이 먼저 선택됩니다. Compute Engine은 다양한 머신 유형을 제공하며 전 세계적으로 모든 Google Cloud 리전에서 제공됩니다. Compute Engine의 사전 정의된 커스텀 머신 유형을 사용하면 온프레미스 인프라와 비슷한 컴퓨팅 용량을 제공하는 VM을 프로비저닝하여 마이그레이션 프로세스를 가속화할 수 있습니다. Compute Engine은 사용되는 인프라에 대해서만 비용을 지불하는 가격 책정 이점이 있으며 지속 사용 할인에 따라 컴퓨팅 리소스를 더 많이 사용할 수록 비용을 크게 절약할 수 있습니다.

Compute Engine 외에도 Google Cloud는 컨테이너 및 서버리스 컴퓨팅 서비스를 제공합니다. 서버리스 접근 방식은 API, 데이터 처리, 이벤트 처리와 같이 상시적으로 실행되지 않는 새 서비스의 경우 더 비용 효율적일 수 있습니다.

이 문서에서는 일반적인 권장사항과 함께 다음 제품들을 사용할 때 컴퓨팅 리소스 비용을 최적화하는 데 도움이 되는 안내를 제공합니다.

  • Compute Engine
  • Google Kubernetes Engine(GKE)
  • Cloud Run
  • Cloud Functions
  • App Engine

일반 권장사항

다음 권장 사항은 이 문서에서 설명하는 Google Cloud의 모든 컴퓨팅, 컨테이너, 서버리스 서비스에 적용됩니다.

사용량 및 비용 추적

다음 도구와 기법을 사용해서 리소스 사용량과 비용을 모니터링합니다.

리소스 프로비저닝 제어

다음 권장사항에 따라 클라우드에 프로비저닝되는 리소스 양과 리소스가 생성되는 위치를 제어합니다.

  • 리소스 소비 및 비용이 예측을 초과하지 않도록 리소스 할당량을 사용합니다.
  • 워크로드의 지연 시간 요구사항을 충족하고 비용이 가장 낮은 리전에 리소스를 프로비저닝합니다. 리소스 프로비저닝 위치를 제어하려면 조직 정책 제약조건 gcp.resourceLocations를 사용할 수 있습니다.

약정 사용 할인 받기

약정 사용 할인(CUDs)은 필요한 리소스를 예측할 수 있는 워크로드에 이상적입니다. 워크로드를 Google Cloud로 마이그레이션한 후에는 필요한 리소스 기준을 찾고 약정 사용량 요금을 대폭 할인받을 수 있습니다. 예를 들어 1년 또는 3년 약정을 구매하고 Compute Engine VM 가격을 대폭 할인받을 수 있습니다.

라벨 사용으로 비용 추적 자동화

라벨을 일관적으로 정의하고 할당합니다. 다음 예시는 라벨을 사용하여 비용 추적을 자동화하는 방법을 보여줍니다.

  • 영업시간 중에 개발자만 사용하는 VM의 경우 env: development 라벨을 할당합니다. Cloud Scheduler를 사용하면 서버리스 Cloud Function을 설정하여 영업시간 후 이러한 VM을 종료하고 필요한 경우 다시 시작할 수 있습니다.

  • 여러 Cloud Run 서비스 및 Cloud Functions 인스턴스가 있는 애플리케이션의 경우 모든 Cloud RunCloud Functions 리소스에 일관된 라벨을 할당합니다. 고비용 영역을 파악하고 조치를 취하여 비용을 절감합니다.

결제 보고서 맞춤설정

필요한 필터를 설정하고 필요에 따라 데이터를 그룹화하여(예: 프로젝트, 서비스 또는 라벨별로) Cloud Billing 보고서를 구성합니다.

비용 절약 문화 장려

개발자 및 운영자에게 클라우드 인프라 교육을 제공합니다. 기존 또는 온라인 교육 과정, 토론 그룹, 동료 검토, 페어 프로그래밍, 비용 절약 게임을 사용해서 학습 프로그램을 만들고 장려합니다. Google DORA 연구조사에 나타난 것처럼 성능을 높이고 재작업 및 번아웃을 줄이고 비용을 최적화하기 위해서는 조직 문화가 핵심 원동력입니다. 직원이 자신의 리소스 비용을 직접 확인할 수 있게 함으로써 비즈니스 목표 및 제약조건에 맞게 우선순위 및 활동을 조정할 수 있게 도와줍니다.

Compute Engine

이 섹션에서는 Compute Engine 리소스의 비용을 최적화하는 데 도움이 되는 안내를 제공합니다. 이 안내 외에도 앞서 설명한 일반 권장사항을 따르는 것이 좋습니다.

결제 모델 이해

Compute Engine의 결제 옵션에 대해 자세히 알아보려면 가격 책정을 참조하세요.

리소스 소비 분석

Compute Engine에서 리소스 소비를 이해하기 위해서는 사용 데이터를 BigQuery로 내보냅니다. BigQuery Datastore를 쿼리해서 프로젝트의 가상 CPU(vCPU) 사용 추세를 분석하고 회수 가능한 vCPU 수를 확인합니다. 프로젝트별 코어 수에 대해 임곗값을 정의한 경우 사용 추세를 분석해서 이상점을 발견하고 수정 조치를 취합니다.

유휴 리소스 회수

다음 권장사항을 사용하여 우선순위가 낮은 개념 증명 프로젝트의 VM과 같이 사용되지 않은 VM 및 디스크를 식별하고 회수합니다.

  • 유휴 VM 추천자를 사용해서 사용량 측정항목에 따라 비활성 상태의 VM 및 영구 디스크를 식별합니다.
  • 리소스 삭제 전 잠재적인 작업 영향을 평가하고 필요할 때를 대비해서 리소스 재생성을 계획합니다.
  • VM을 삭제하기 전에 스냅샷을 만드는 것이 좋습니다. VM을 삭제하면 디스크 유지 옵션을 선택하지 않는 경우 연결된 디스크가 삭제됩니다.
  • 가능하다면 VM 삭제 대신 중지를 고려하세요. VM을 중지하면 인스턴스가 종료되지만 분리 또는 삭제하기 전까지 디스크 및 IP 주소가 보존됩니다.

수요에 맞게 용량 조정

VM이 자동으로 시작 및 중지되도록 예약 예를 들어 일주일 중 5일 동안 매일 8시간만 VM이 사용될 경우(주당 40시간) 일주일 중 VM이 사용되지 않는 128시간 동안 VM을 중지해서 비용을 75%까지 줄일 수 있습니다.

관리형 인스턴스 그룹을 사용하여 요청에 따라 컴퓨팅 용량을 자동 확장합니다. CPU 사용량 또는 부하 분산 용량 등 비즈니스에 중요한 매개변수를 기준으로 용량을 자동 확장할 수 있습니다.

적절한 머신 유형 선택

VM 머신 유형 추천자를 사용하여 워크로드 컴퓨팅 요구사항에 맞게 VM 크기를 조정합니다.

예측 가능한 리소스 요구사항이 있는 워크로드의 경우 커스텀 VM을 사용하여 머신 유형을 필요에 맞게 조정하고 비용을 절약할 수 있습니다.

내결함성이 있는 일괄 처리 워크로드의 경우 Spot VM 사용을 고려하세요. Spot VM에 배포할 수 있는 워크로드 예시에는 고성능 컴퓨팅(HPC), 빅데이터, 미디어 트랜스코딩, 지속적 통합 및 지속적 배포(CI/CD) 파이프라인, 스테이트리스(Stateless) 웹 애플리케이션이 있습니다. Descartes Lab에서 위성 이미지 처리를 위해 선점형 VM(Spot VM의 이전 버전)을 사용하여 분석 비용을 낮춘 방법 예시를 보려면 Descartes Labs 우수사례를 참조하세요.

라이선싱 옵션 평가

타사 워크로드를 Google Cloud로 마이그레이션할 때 사용자 라이선스 사용(BYOL)을 통해 비용을 절감할 수 있습니다. 예를 들어 Microsoft Windows Server VM을 배포하기 위해 타사 라이선스에 대한 추가 비용이 발생하는 프리미엄 이미지를 사용하는 대신 커스텀 Windows BYOL 이미지를 만들고 사용할 수 있습니다. 그런 다음 Google Cloud에서 사용하는 VM 인프라에 대해서만 비용을 지불합니다. 이 전략은 타사 라이선스에 대한 기존 투자의 가치를 지속적으로 실현하는 데 도움이 됩니다.

BYOL 접근 방법을 사용하도록 결정한 경우에는 다음을 수행하는 것이 좋습니다.

  • 커스텀 머신 유형을 사용하여 메모리와 독립적으로 필요한 수의 컴퓨팅 CPU 코어를 프로비저닝하고 타사 라이선스 비용을 필요한 CPU 코어 수로 제한합니다.
  • 동시 멀티스레딩(SMT)을 사용 중지해서 코어당 vCPU 수를 2개에서 1개로 줄이고 라이선싱 비용을 50% 줄입니다.

타사 워크로드에 보안 또는 규정 준수 요구사항을 충족하기 위한 전용 하드웨어가 필요한 경우 단독 테넌트 노드로 사용자 라이선스를 사용할 수 있습니다.

Google Kubernetes Engine

이 섹션에서는 GKE 리소스 비용 최적화 안내를 제공합니다.

다음 권장사항 외에도 앞서 설명한 일반 권장사항을 참조하세요.

  • GKE Autopilot을 사용해서 GKE가 클러스터 인프라 효율을 극대화할 수 있게 해줍니다. 노드 상태를 모니터링하거나, 적재를 처리하거나, 워크로드에 필요한 용량을 계산할 필요가 없습니다.
  • 워크로드의 요구사항에 따라 수평형 포드 자동 확장 처리(HPA), 수직형 포드 자동 확장 처리(VPA), 클러스터 자동 확장 처리(CA) 또는 노드 자동 프로비저닝를 사용하여 GKE 자동 확장을 미세 조정합니다.
  • 시작 지연 시간에 민감하지 않은 일괄 워크로드의 경우 최적화 사용률 자동 확장 프로필을 사용하여 클러스터 사용률을 개선합니다.
  • 노드 자동 프로비저닝을 사용하여 GKE 클러스터 자동 확장 처리를 확장하고, 오버프로비저닝 없이 보류 중인 포드의 사양에 따라 노드 풀을 효율적으로 만들고 삭제합니다.
  • 별도의 노드 풀, 즉 고정 로드를 위한 고정 노드 풀과 동적 로드를 위한 클러스터 자동 확장 그룹이 있는 동적 노드 풀을 사용합니다.
  • 포드가 내결함성이 있고 25초 이내에 정상적으로 종료될 수 있는 경우 Kubernetes 노드 풀에 Spot VM을 사용합니다. 이 전략을 GKE 클러스터 자동 확장 처리와 함께 사용하면 저비용 VM(이 경우 Spot VM이 있는 노드 풀)의 노드 풀이 먼저 확장되도록 할 수 있습니다.
  • 비용 효율적인 머신 유형(예: E2, N2D, T2D)을 선택합니다. 20~40% 더 높은 가격 대비 성능을 제공합니다.
  • GKE 사용량 측정을 사용해서 네임스페이스 및 라벨별로 클러스터 사용 프로필을 분석합니다. 소비량이 가장 많은 팀 또는 애플리케이션, 갑작스러운 사용량 또는 비용 증가를 일으킨 환경 또는 구성요소, 리소스를 낭비하는 팀을 식별합니다.
  • 멀티 테넌트 클러스터에서 리소스 할당량을 사용하면 임의의 테넌트가 자신에게 할당된 클러스터 리소스까지만 사용하도록 제한할 수 있습니다.
  • 영업시간 이후에 개발 및 테스트 환경의 자동 축소를 예약합니다.
  • 권장사항에 따라 GKE에서 비용 최적화된 Kubernetes 애플리케이션을 실행합니다.

Cloud Run

이 섹션에서는 Cloud Run 리소스 비용을 최적화하는 데 도움이 되는 안내를 제공합니다.

다음 권장사항 외에도 앞서 설명한 일반 권장사항을 참조하세요.

  • 동시 설정(기본값: 80)을 조정해서 비용을 낮춥니다. Cloud Run은 CPU 및 메모리 사용량에 따라 인스턴스로 전송할 요청 수를 결정합니다. 요청 동시 실행을 늘리면 필요한 인스턴스 수를 줄일 수 있습니다.
  • 배포할 수 있는 인스턴스 수에 한도를 설정합니다.
  • 청구 가능한 인스턴스 시간 측정항목을 사용하여 필요한 인스턴스 수를 예상합니다. 예를 들어 측정항목에 100s/s가 표시되면 약 100개 인스턴스가 예약된 것입니다. 성능 보존을 위해 30% 버퍼를 추가합니다. 즉, 100s/s 트래픽에 대해 인스턴스를 130개로 조정합니다.
  • 콜드 스타트로 인한 영향을 줄이기 위해 최소 인스턴스 수를 구성합니다. 이러한 인스턴스가 유휴 상태이면 1/10의 비용이 청구됩니다.
  • CPU 사용량을 추적하고 그에 따라 CPU 한도를 조정합니다.
  • 트래픽 관리를 사용하여 비용 최적화 구성을 결정합니다.
  • 정적 애셋 제공을 위해 Cloud CDN 또는 Firebase 호스팅을 사용합니다.
  • 요청을 전역으로 처리하는 Cloud Run 앱의 경우, 대륙 간 데이터 전송에 많은 비용이 들 수 있으므로 여러 리전에 앱을 배포하는 것이 좋습니다. 이 설계는 부하 분산기 및 CDN을 사용하는 경우에 권장됩니다.
  • 시작 시간도 청구 가능하므로 인스턴스의 시작 시간을 줄입니다.
  • 약정 사용 할인을 구매하면 1년 약정으로 주문형 가격에서 최대 17% 절약할 수 있습니다.

Cloud Functions

이 섹션에서는 Cloud Functions 리소스 비용을 최적화하는 데 도움이 되는 안내를 제공합니다.

다음 권장사항 외에도 앞서 설명한 일반 권장사항을 참조하세요.

  • 함수의 실행 시간을 관찰합니다. 실험 및 벤치마크를 진행해서 필요한 성능 기준점을 충족하는 가장 작은 함수를 설계합니다.
  • Cloud Functions 워크로드가 계속 실행되는 경우 GKE 또는 Compute Engine을 사용하여 워크로드를 처리하는 것이 좋습니다. 컨테이너 또는 VM은 항상 실행되는 워크로드를 위한 저비용 옵션입니다.
  • 공존 가능한 함수 인스턴스 수를 제한합니다.
  • 함수 워크로드에 따라 Cloud Functions 프로그래밍 언어의 런타임 성능을 벤치마크합니다. 컴파일된 언어의 프로그램에 더 이상 콜드 스타트가 지원되지 않지만 더 빠르게 실행됩니다. 통합 언어로 된 프로그램은 실행 속도가 느리지만 콜드 스타트 오버헤드가 작습니다. 자주 실행되는 짧고 간단한 함수는 인터프리트 언어에서 비용을 줄여줄 수 있습니다.
  • 인메모리 파일 시스템인 로컬 디스크에 기록된 임시 파일을 삭제합니다. 임시 파일은 함수에 할당된 메모리를 사용하며 경우에 따라 호출 간에 그대로 유지됩니다. 이 파일을 삭제하지 않으면 메모리 부족 오류가 발생하여 콜드 스타트가 트리거되면서 실행 시간과 비용이 늘어날 수 있습니다.

App Engine

이 섹션에서는 App Engine 리소스의 비용을 최적화하는 데 도움이 되는 안내를 제공합니다.

다음 권장사항 외에도 앞서 설명한 일반 권장사항을 참조하세요.

  • 트래픽 및 요청 지연 시간을 기준으로 최대 인스턴스를 설정합니다. App Engine은 일반적으로 애플리케이션에 수신되는 트래픽에 따라 용량을 확장합니다. App Engine이 만들 수 있는 인스턴스 수를 제한하여 비용을 제어할 수 있습니다.
  • 애플리케이션에 사용 가능한 메모리 또는 CPU를 제한하려면 인스턴스 클래스를 설정합니다. CPU 집약적인 애플리케이션의 경우 더 많은 CPU를 할당합니다. 몇 가지 구성을 테스트해서 최적 크기를 결정합니다.
  • 여러 프로그래밍 언어로 App Engine 워크로드를 벤치마크합니다. 예를 들어 한 언어로 구현된 워크로드가 다른 언어로 동일하게 프로그래밍된 워크로드보다 태스크를 시간 내에 완료하는 데 필요한 인스턴스와 비용이 더 낮을 수 있습니다.
  • 콜드 스타트를 줄일 수 있도록 최적화합니다. 가능한 경우 전역 범위에서 발생하는 CPU 집약적인 태스크 또는 장기 실행 태스크를 줄입니다. 태스크를 요청 컨텍스트에서 '지연 로드'될 수 있는 더 작은 작업들로 세분화합니다.
  • 트래픽 급증이 예상될 경우 사전 워밍되는 유휴 인스턴스 수를 최소한으로 구성합니다. 트래픽이 예상되지 않을 때는 최소 유휴 인스턴스를 0으로 구성할 수 있습니다.
  • 성능과 비용을 균형적으로 조정하기 위해 구성이 각기 다른 두 버전 간에 트래픽을 분할하여 A/B 테스트를 실행합니다. 각 버전의 성능 및 비용을 모니터링하고 필요에 따라 조정하고, 트래픽을 전송할 구성을 결정합니다.
  • 요청 동시 실행을 구성하고 최대 동시 요청 수를 기본값보다 높게 설정합니다. 각 인스턴스가 동시에 처리할 수 있는 요청 수가 늘어날수록 트래픽 제공을 위한 기존 인스턴스 사용 효율이 늘어납니다.

다음 단계