Dataflow Prime 스트리밍 작업에 수직 자동 확장 도입
Zach Zimmerman
Software Engineer
Zeeshan Khan
Product Manager
Dataflow는 작업에 맞는 리소스를 자동으로 프로비저닝하고 확장하여 사용률과 효율성을 개선할 수 있는 다양한 기능을 제공했습니다. 다음은 몇 가지 예입니다.
- 수평 자동 확장은 작업자 수를 자동으로 확장합니다.
- 스트리밍 엔진은 작업자로부터 스토리지를 분리합니다. 이를 통해 작업자는 무한한 스토리지와 반응성 높은 수평 자동 확장을 이용할 수 있습니다.
- 동적 작업 재분배는 작업 프로세스에 기반하여 작업 가능한 작업자에게 작업을 분할합니다.
이 견고하고 차별화된 기반을 토대로 Google Cloud에서 데이터 처리 요구사항을 충족할 수 있는 새로운 차세대 서버리스 노옵스(no-ops) 자동 조정 플랫폼인 Dataflow Prime이 최근 출시되었습니다. Dataflow Prime에는 업계 최초의 리소스 최적화 기술인 수직 자동 확장이 새로 도입되어 자동으로 작업자 메모리를 확장하므로 작업자 구성을 수동으로 조정할 필요가 없습니다. Dataflow Prime은 수직 자동 확장 기술을 통해 작업에 필요한 적절한 작업자 구성을 자동으로 결정합니다.
현재 사용자가 겪는 문제
Dataflow에서 Apache Beam SDK 또는 Dataflow 템플릿을 사용하여 데이터 처리 로직을 작성하면 Dataflow가 파이프라인의 최적화, 실행, 확장성을 처리합니다. 대부분의 경우 파이프라인이 제대로 실행되지만 최고의 성능과 비용 절감을 위해 메모리와 같은 적절한 리소스를 수동으로 선택해야 하는 경우도 있습니다. 많은 사용자에게 이는 시간이 오래 걸리는 시행착오 과정이며, 단일 작업자 구성이 해당 파이프라인을 위한 최적의 방법이 아닐 수도 있습니다. 게다가 데이터 처리 요건이 변경되면 정적 구성은 구식이 될 위험도 있었습니다.
Google Cloud에서는 이러한 문제를 해결하고 사용자가 애플리케이션과 비즈니스 로직에 집중할 수 있도록 수직 자동 확장을 설계했습니다.
수직 자동 확장은 어떻게 작동하나요?
수직 자동 확장은 시간 경과에 따른 스트리밍 파이프라인의 메모리 부족(OOM) 이벤트 및 메모리 사용량을 관측하고 이에 근거하여 메모리 확장을 트리거합니다. 이는 수동 개입 없이 메모리 부족 오류에 대한 파이프라인 복원력을 높입니다.
수직 자동 확장을 사용하면 메모리 사용률이 높을 때 작업과 연관된 모든 작업자가 메모리 용량이 더 큰 작업자로 교체됩니다. 다음 이미지에서 작업자 1, 2, 3의 메모리 사용률이 높고 용량은 4GB입니다. 수직 자동 확장을 적용하면 모든 작업자에게 5GB의 메모리 용량이 제공되어 작업자가 충분한 메모리 여유 공간을 확보하게 됩니다.




이 프로세스는 반복되며, 작업자를 교체하는 데 최대 몇 분이 소요될 수 있습니다.
마찬가지로 메모리 사용량이 적으면 수직 자동 확장은 작업자를 축소하여 메모리 용량을 줄임으로써 사용률을 개선하고 비용을 절감합니다. 수직 자동 확장은 파이프라인당 사용 데이터 내역을 활용하여 파이프라인의 안정성을 최우선으로 안전하게 축소할 시점을 파악합니다. 메모리 사용률이 급증한 후에 장기간(12시간 이상) 축소가 발생하지 않는 현상이 나타날 수 있습니다. 수직 자동 확장은 중단을 최소화하여 파이프라인 프로세스를 유지하기 위해 축소에 대해 보수적인 접근 방식을 취합니다.
수직 자동 확장에 대해 알아야 할 사항
수직 자동 확장이 작업에 어떤 영향을 미치나요?
- 작업자가 교체되면서 처리량이 일시적으로 줄어들 수 있지만, 실행 중인 파이프라인(예: 백로그, 워터마크, 처리량 측정)은 수평 자동 확장 이벤트와 크게 다르지 않을 것입니다.
- 수평 자동 확장은 수직 자동 확장이 실행되는 동안과 이후 최대 10분까지 비활성화됩니다.
- 수평 자동 확장을 사용하면 확장 프로세스 중에 백로그가 누적될 수 있으며, 만일 이러한 백로그가 제때 삭제되지 않으면 수평 확장이 실행되어 해당 백로그를 삭제할 수 있습니다.
수직 자동 확장이 모든 OOM을 삭제하나요?
- 수직 자동 확장이 OOM과 많은 메모리 사용량에 반응하도록 설계되었지만, OOM을 방지하진 못한다는 점을 기억해야 합니다. 특히 작업자의 메모리 사용량이 급증하면 OOM이 발생할 수 있습니다.
- OOM이 발생하면 수직 자동 확장이 이를 자동으로 감지한 후 작업자 메모리 크기를 조절하여 문제를 해결합니다. 그 결과 작업자 로그에 몇 개의 OOM 오류가 표시되지만, 이후 확장 이벤트가 이어진다면 해당 오류는 무시해도 됩니다.
- 또한 메모리 사용률이 낮아 Dataflow에서 메모리 양을 줄이는 축소 이벤트가 발생하면 일부 OOM이 발생할 수 있습니다. 이 경우에 Dataflow가 OOM을 감지하면 자동으로 확대됩니다. 또한 이후 확장 이벤트가 이어진다면 이러한 OOM 메시지를 무시해도 괜찮습니다.
- OOM 메시지가 표시된 후 확장 이벤트가 이어지지 않는다면 메모리 확장 한도에 도달한 것일 수도 있습니다. 이 경우에는 파이프라인의 메모리 사용량을 최적화하거나 리소스 힌트를 사용해야 할 수 있습니다.
- OOM 메시지가 계속 나타나지만 메모리 확장 한도에 도달했다는 작업 메시지가 표시되지 않는다면 지원팀에 문의하세요. OOM이 매우 드물게 발생한다면(예: 파이프라인당 몇 시간에 한 번) 수직 자동 확장은 추가 중단을 피하기 위해 작업자를 확장하지 않기로 선택할 수 있습니다.
수직 자동 확장을 어떻게 사용 설정하나요?
수직 자동 확장은 Dataflow Prime 작업에만 사용할 수 있습니다. Dataflow Prime 작업을 시작하는 안내와 수직 자동 확장을 사용 설정하는 방법을 확인하세요.
Dataflow Prime에서 기존 Apache Beam 파이프라인을 실행하기 위해 코드를 변경할 필요가 없습니다. 또한 Dataflow Prime 작업을 시작할 때 작업자 유형을 지정할 필요도 없습니다. 하지만 초기 작업자의 리소스 구성을 제어하고 싶다면 리소스 힌트를 사용하면 됩니다.
다음 작업 로그를 살펴보면 수직 자동 확장이 파이프라인에서 실행되고 있는지 확인할 수 있습니다.
- 수직 자동 확장이 사용 설정되어 있습니다. 이 파이프라인이 작업자별로 할당된 리소스에 대한 권장사항을 수신하고 있습니다.
수직 자동 확장을 어떻게 모니터링하나요?
메모리가 부족하거나 초과되는 상황에서 수직 자동 확장이 작업자를 업데이트할 때마다 Cloud Logging에서 다음 작업 로그가 생성됩니다.
- 수직 자동 확장이 사용 설정되어 있습니다. 이 파이프라인이 작업자별로 할당된 리소스에 대한 권장사항을 수신하고 있습니다.
- 수직 자동 확장 업데이트로 풀의 작업자별 메모리 한도가 XGiB에서 YGiB로 변경되었습니다.
이러한 로그에 대한 자세한 내용은이 섹션에서 확인할 수 있습니다.
아울러 Dataflow 측정항목 UI에서 '최대 작업자 메모리 사용률' 차트의 작업자 용량을 살펴보면 수직 자동 확장을 시각적으로 모니터링할 수 있습니다.
다음은 수직 자동 확장을 실행한 Dataflow 작업자의 차트입니다. 이 작업에는 수직 자동 확장 이벤트 3개가 있습니다. 메모리 사용량이 메모리 용량에 근접할 때마다 수직 자동 확장이 트리거되어 작업자 메모리 용량을 확장했습니다.


