이 문서에서는 비용을 최소화하는 것을 목표로 Dataflow 작업을 최적화하기 위한 권장사항을 설명합니다. 비용에 영향을 미치는 요인을 설명하고 이러한 비용을 모니터링하고 관리하는 기법을 제공합니다.
Dataflow 작업의 비용 계산 방법에 관한 자세한 내용은 Dataflow 가격 책정을 참고하세요.
다음과 같은 여러 요인이 작업 비용에 큰 영향을 미칠 수 있습니다.
- 런타임 설정
- 파이프라인 성능
- 파이프라인 처리량 요구사항
다음 섹션에서는 작업을 모니터링하는 방법, 작업 비용에 영향을 미치는 요인, 파이프라인 효율성을 개선하는 방법에 관한 제안을 자세히 설명합니다.
SLO 정의
최적화를 시작하기 전에 파이프라인의 서비스 수준 목표(SLO)를 정의합니다(특히 처리량 및 지연 시간). 이러한 요구사항은 비용과 기타 요소 간의 균형을 맞추는 데 도움이 됩니다.
- 파이프라인에 엔드 투 엔드 처리 지연 시간이 짧아야 하는 경우 파이프라인 비용이 더 높을 수 있습니다.
- 지연된 데이터를 처리해야 하는 경우 전반적인 파이프라인 비용이 더 높을 수 있습니다.
- 스트리밍 파이프라인에 처리해야 할 데이터 급증이 발생하면 파이프라인에 추가 용량이 필요할 수 있으며, 이로 인해 비용이 증가할 수 있습니다.
작업 모니터링
작업을 최적화하는 방법을 결정하려면 먼저 작업의 동작을 이해해야 합니다. Dataflow 모니터링 도구를 사용하여 파이프라인이 실행되는 동안 관찰합니다. 그런 다음 이 정보를 사용하여 실적과 효율성을 개선합니다.
비용 모니터링
다음 기법을 사용하여 비용을 예측하고 모니터링합니다.
- 프로덕션에서 파이프라인을 실행하기 전에 데이터 하위 집합에서 소규모 작업을 하나 이상 실행합니다. 많은 파이프라인의 경우 이 기법을 사용하여 비용 추정치를 제공할 수 있습니다.
- Dataflow 모니터링 인터페이스의 비용 페이지를 사용하여 작업의 예상 비용을 모니터링합니다. 계약 할인과 같은 다양한 이유로 예상 비용이 실제 작업 비용을 반영하지 않을 수 있지만 비용 최적화에 유용한 기준을 제공할 수 있습니다. 자세한 내용은 비용 모니터링을 참고하세요.
- Cloud Billing 데이터를 BigQuery로 내보내고 결제 내보내기 테이블에서 비용 분석을 실행합니다. Cloud Billing 내보내기를 사용하면 자세한 Google Cloud 결제 데이터를 하루 동안 자동으로 BigQuery 데이터 세트로 내보낼 수 있습니다. 결제 데이터에는 사용량, 비용 추정치, 가격 데이터가 포함됩니다.
- 예상치 못한 비용을 방지하려면 Dataflow 작업이 정의한 임곗값을 초과할 때 모니터링 알림을 만드세요. 자세한 내용은 Dataflow 파이프라인에 Cloud Monitoring 사용을 참고하세요.
작업 모니터링
작업을 모니터링하고 파이프라인 효율성을 개선할 수 있는 영역을 파악합니다.
- Dataflow 작업 모니터링 인터페이스를 사용하여 파이프라인의 문제를 식별합니다. 모니터링 인터페이스에는 각 파이프라인의 작업 그래프와 실행 세부정보가 표시됩니다. 두 도구 모두 파이프라인을 이해하고 느린 단계, 중단된 단계 또는 실행 시간이 너무 긴 단계를 식별하는 데 도움이 됩니다.
- 측정항목 탐색기를 사용하여 자세한 Dataflow 작업 측정항목을 확인합니다. 맞춤 측정항목을 사용하여 성능 데이터를 캡처할 수 있습니다.
Distribution
측정항목은 성능 데이터를 수집하는 데 특히 유용합니다. - CPU 집약적인 파이프라인의 경우 Cloud Profiler를 사용하여 가장 많은 리소스를 소비하는 파이프라인 코드 부분을 식별합니다.
- 데이터 샘플링을 사용하여 데이터 문제를 식별합니다. 데이터 샘플링을 사용하면 Dataflow 파이프라인의 각 단계에서 데이터를 관찰할 수 있습니다. 이 정보는 실행 중이거나 완료된 작업의 실제 입력과 출력을 보여주므로 파이프라인 문제를 디버깅하는 데 도움이 될 수 있습니다.
로깅에는 제한사항이 적용되며 과도한 로깅은 작업 성능을 저하시킬 수 있으므로 대규모 파이프라인에서는 요소별 처리 측정항목을 로깅하지 않는 것이 좋습니다.
런타임 설정 최적화
다음 런타임 설정은 비용에 영향을 줄 수 있습니다.
- 스트리밍 작업 또는 일괄 작업 실행 여부
- 작업을 실행하는 데 사용하는 서비스(예: Streaming Engine 또는 FlexRS)
- 작업자 VM의 머신 유형, 디스크 크기, GPU 수
- 자동 확장 모드
- 초기 작업자 수 및 최대 작업자 수
- 스트리밍 모드 (정확히 한 번 모드 또는 적어도 한 번 모드)
이 섹션에서는 작업을 최적화하기 위해 취할 수 있는 잠재적 변경사항을 설명합니다. 이러한 추천이 워크로드에 적합한지 확인하려면 파이프라인 설계 및 요구사항을 고려하세요. 모든 제안이 모든 파이프라인에 적절하거나 유용한 것은 아닙니다.
대규모 변경사항을 적용하기 전에 데이터의 하위 집합을 사용하는 소규모 파이프라인에서 변경사항을 테스트합니다. 자세한 내용은 '대규모 일괄 파이프라인 권장사항'의 대규모 작업을 위해 소규모 실험 실행을 참고하세요.
취업정보 위치
대부분의 Dataflow 작업은 데이터 저장소 및 메시지 시스템과 같은 다른 서비스와 상호작용합니다. 위치를 고려하세요.
- 작업이 사용하는 리소스와 동일한 리전에서 작업을 실행합니다.
- 작업과 동일한 리전에 스테이징 및 임시 작업 파일을 저장할 Cloud Storage 버킷을 만듭니다. 자세한 내용은
gcpTempLocation
및temp_location
파이프라인 옵션을 참고하세요.
머신 유형 조정
다음과 같이 작업자 VM을 조정하면 비용 효율성이 향상될 수 있습니다.
- 필요한 가장 작은 머신 유형으로 작업을 실행합니다. 파이프라인 요구사항에 따라 필요한 경우 머신 유형을 조정합니다. 예를 들어 CPU 집약적인 파이프라인이 있는 스트리밍 작업의 경우 머신 유형을 기본값에서 변경하면 유리할 수 있습니다. 자세한 내용은 머신 유형을 참고하세요.
- 메모리 집약적 또는 컴퓨팅 집약적 워크로드의 경우 적절한 머신 유형을 사용하세요. 자세한 내용은 계열별 VM의 CoreMark 점수를 참고하세요.
- 초기 작업자 수를 설정합니다. 작업을 확장하면 새 VM에 작업을 재배포해야 합니다. 작업에 필요한 작업자 수를 알고 있다면 초기 작업자 수를 설정하여 이러한 비용을 방지할 수 있습니다. 초기 작업자 수를 설정하려면
numWorkers
또는num_workers
파이프라인 옵션을 사용하세요. - 최대 작업자 수를 설정합니다. 이 매개변수의 값을 설정하면 작업의 총 비용을 제한할 수 있습니다. 파이프라인을 처음 테스트할 때는 비교적 낮은 최대값으로 시작합니다. 그런 다음 프로덕션 워크로드를 실행하기에 충분할 때까지 값을 늘립니다. 최대값을 설정하기 전에 파이프라인 SLO를 고려하세요. 자세한 내용은 수평 자동 확장을 참고하세요.
- 일부 파이프라인은 GPU를 사용하면 이점이 있습니다. 자세한 내용은 Dataflow에서 GPU를 참고하세요.
- 특히 온프레미스 데이터에 액세스해야 하는 경우 작업자 VM의 데이터에 액세스하기에 충분한 네트워크 대역폭이 있는지 확인합니다.
일괄 작업의 설정 최적화
이 섹션에서는 일괄 작업의 런타임 설정을 최적화하기 위한 제안을 제공합니다. 일괄 작업의 경우 작업 단계가 순차적으로 실행되므로 성능과 비용에 영향을 줄 수 있습니다.
가변형 리소스 예약 사용
일괄 작업이 시간에 민감하지 않은 경우 가변형 리소스 예약 (FlexRS)을 사용하는 것이 좋습니다. FlexRS는 작업을 시작하기 가장 좋은 시간을 찾은 다음 선점형 VM 인스턴스와 표준 VM을 조합하여 사용하여 일괄 처리 비용을 줄입니다. 선점형 VM은 표준 VM에 비해 훨씬 저렴한 가격으로 제공되므로 총 비용을 절감할 수 있습니다. FlexRS는 선점형 VM과 표준 VM을 조합하여 사용함으로써 Compute Engine에서 선점형 VM을 선점하더라도 파이프라인이 계속 진행되도록 합니다.
매우 작은 작업 실행 피하기
가능하면 매우 적은 양의 데이터를 처리하는 작업을 실행하지 마세요. 가능하면 더 큰 데이터 세트에서 더 적은 작업을 실행합니다. 작업자 VM을 시작하고 중지하면 비용이 발생하므로 더 많은 데이터에서 더 적은 수의 작업을 실행하면 효율성을 개선할 수 있습니다.
Dataflow Shuffle이 사용 설정되어 있는지 확인합니다. 일괄 작업은 기본적으로 Dataflow Shuffle을 사용합니다.
자동 확장 설정 조정
일괄 작업은 기본적으로 자동 확장을 사용합니다. 짧은 시간 동안 실행되는 작업과 같은 일부 작업에는 자동 확장이 필요하지 않습니다. 파이프라인에 자동 확장이 도움이 되지 않는다고 생각되면 자동 확장을 사용 중지합니다. 자세한 내용은 수평 자동 확장을 참고하세요.
동적 스레드 확장을 사용하여 Dataflow가 CPU 사용률을 기반으로 스레드 수를 조정하도록 할 수도 있습니다.
또는 작업에 최적의 스레드 수를 알고 있다면 numberOfWorkerHarnessThreads
또는 number_of_worker_harness_threads
파이프라인 옵션을 사용하여 작업자당 스레드 수를 명시적으로 설정합니다.
장기 실행 작업 중지
사전 지정된 런타임을 초과하면 작업이 자동으로 중지되도록 설정합니다. 작업 실행에 걸리는 대략적인 시간을 알고 있다면 max_workflow_runtime_walltime_seconds
서비스 옵션을 사용하여 작업이 예상보다 오래 실행되는 경우 자동으로 중지합니다.
스트리밍 작업의 설정 최적화
이 섹션에서는 스트리밍 작업의 런타임 설정을 최적화하기 위한 제안을 제공합니다.
Streaming Engine 사용
Streaming Engine은 효율성을 높이기 위해 파이프라인 실행을 작업자 VM에서 Dataflow 서비스 백엔드로 이동합니다. 스트리밍 작업에는 Streaming Engine을 사용하는 것이 좋습니다.
적어도 한 번 모드 고려
Dataflow는 스트리밍 작업에 정확히 한 번 모드와 적어도 한 번 모드라는 두 가지 모드를 지원합니다. 워크로드가 중복 레코드를 허용할 수 있는 경우 적어도 한 번 모드를 사용하면 작업 비용을 크게 줄일 수 있습니다. 적어도 한 번 모드를 사용 설정하기 전에 파이프라인에 레코드의 정확히 한 번 처리가 필요한지 평가합니다. 자세한 내용은 파이프라인 스트리밍 모드 설정을 참고하세요.
가격 책정 모델 선택
Dataflow 스트리밍 작업의 약정 사용 할인 (CUD)은 1년 이상 Dataflow 컴퓨팅 리소스를 특정 용량만큼 지속적으로 사용하는 약정을 대가로 할인된 가격을 제공합니다. Dataflow CUD는 스트리밍 작업을 위한 Dataflow 컴퓨팅 용량 지출에 최소 1년 이상 약정 가능한 예측 가능한 최솟값이 포함된 경우에 유용합니다. CUD를 사용하면 Dataflow 작업 비용을 줄일 수 있습니다.
리소스 기반 결제를 사용하는 것도 고려해 보세요. 리소스 기반 결제를 사용하면 작업에서 사용하는 Streaming Engine 리소스는 Streaming Engine 컴퓨팅 단위로 계량되고 측정됩니다. 작업자 CPU, 작업자 메모리, Streaming Engine 컴퓨팅 단위에 대한 요금이 청구됩니다.
자동 확장 설정 조정
자동 확장 힌트를 사용하여 자동 확장 설정을 조정합니다. 자세한 내용은 스트리밍 파이프라인의 수평 자동 확장 조정을 참고하세요. Streaming Engine을 사용하는 스트리밍 작업의 경우 작업을 중지하거나 대체하지 않고도 자동 조정 설정을 업데이트할 수 있습니다. 자세한 내용은 진행 중인 작업 옵션 업데이트를 참고하세요.
파이프라인에 자동 확장이 도움이 되지 않는다고 생각되면 자동 확장을 사용 중지합니다. 자세한 내용은 수평 자동 확장을 참고하세요.
작업에 최적의 스레드 수를 알고 있다면 numberOfWorkerHarnessThreads
또는 number_of_worker_harness_threads
파이프라인 옵션을 사용하여 작업자당 스레드 수를 명시적으로 설정하세요.
장기 실행 작업 중지
스트리밍 작업의 경우 Dataflow는 실패한 작업 항목을 무기한 재시도하므로 작업이 종료되지 않습니다. 하지만 문제가 해결될 때까지 작업이 중단될 수 있습니다. 모니터링 정책을 만들어 시스템 지연 시간 증가 및 데이터 최신 상태 저하와 같은 중단된 파이프라인의 신호를 감지합니다. 파이프라인 코드에 오류 로깅을 구현하면 반복적으로 실패하는 작업 항목을 식별할 수 있습니다.
- 파이프라인 오류를 모니터링하려면 작업자 오류 로그 수를 참고하세요.
- 오류를 해결하려면 Dataflow 오류 문제 해결을 참고하세요.
파이프라인 성능
파이프라인이 더 빠르게 실행되면 비용이 더 적게 들 수 있습니다. 다음 요소는 파이프라인 성능에 영향을 줄 수 있습니다.
- 작업에 사용할 수 있는 동시 로드 수
- 파이프라인에 사용되는 변환, I/O 커넥터, 코더의 효율성
- 데이터 위치
파이프라인 성능을 개선하기 위한 첫 번째 단계는 처리 모델을 이해하는 것입니다.
- Apache Beam 모델 및 Apache Beam 실행 모델에 대해 알아봅니다.
- Dataflow에서 동시 로드를 관리하는 방식과 사용하는 최적화 전략을 비롯하여 파이프라인 수명 주기에 대해 자세히 알아보세요. Dataflow 작업은 여러 작업자 VM을 사용하며 각 작업자는 여러 스레드를 실행합니다.
PCollection
의 요소 번들은 각 작업자 스레드에 배포됩니다.
파이프라인 코드를 작성할 때는 다음 권장사항을 따르세요.
- 가능하면 지원되는 최신 Apache Beam SDK 버전을 사용하세요. 출시 노트에 따라 다양한 버전의 변경사항을 확인하세요.
- 파이프라인 코드 작성 권장사항을 따릅니다.
- I/O 커넥터 권장사항을 따르세요.
- Python 파이프라인의 경우 커스텀 컨테이너를 사용하는 것이 좋습니다. 종속 항목을 사전 패키징하면 작업자 시작 시간이 단축됩니다.
로깅
로깅할 때는 다음 권장사항을 따르세요.
- 과도한 로깅은 성능에 영향을 줄 수 있습니다.
- 로그의 양을 줄이려면 파이프라인 로그 수준을 변경해 보세요. 자세한 내용은 로그 볼륨 제어를 참고하세요.
- 개별 요소는 로깅하지 마세요. 대신 데이터 샘플링을 사용 설정하세요.
- 각 오류를 로깅하는 대신 요소별 오류에 데드 레터 패턴을 사용합니다.
테스트
파이프라인을 테스트하면 SDK 업그레이드, 파이프라인 리팩터링, 코드 검토를 지원하는 등 여러 이점이 있습니다. 맞춤 CPU 집약적 변환 재작업과 같은 많은 최적화는 Dataflow에서 작업을 실행하지 않고도 로컬에서 테스트할 수 있습니다.
배치 파이프라인의 총 요소 수, 스트리밍 파이프라인의 초당 요소 수, 요소 크기, 키 수를 비롯하여 워크로드에 적합한 실제 테스트 데이터로 대규모 파이프라인을 테스트합니다. 안정적인 상태에서 파이프라인을 테스트하고 비정상 종료 복구를 시뮬레이션하기 위해 대규모 백로그를 처리하는 두 가지 모드로 파이프라인을 테스트합니다.
단위 테스트, 통합 테스트, 엔드 투 엔드 테스트를 만드는 방법에 관한 자세한 내용은 파이프라인 테스트를 참고하세요.
테스트 예시는 dataflow-ordered-processing
GitHub 저장소를 참고하세요.