대규모 병렬 워크로드라고도 하는 높은 동시 워크로드는 금융, 미디어, 생명공학 기업에서 일반적입니다. 기업은 이와 같은 동시 워크로드를 위해 일반적으로 컴퓨팅 노드 클러스터를 배포합니다. 각 노드는 그리드 컴퓨팅이라는 구성으로 독립적인 처리 태스크를 수행할 수 있습니다. Dataflow와 함께 Apache Beam을 사용하여 동시 워크로드 데이터를 처리할 수 있습니다. Apache Beam에 대한 자세한 내용은 Apache Beam 프로그래밍 가이드를 참조하세요.
높은 병렬 워크로드에 Dataflow를 사용하면 많은 이점이 있습니다.
- 동일한 파이프라인에서 데이터 처리와 조정을 통해 완전 관리형 워크플로를 만듭니다.
- Dataflow 사용자 인터페이스 및 API에는 관측 가능성 기능이 포함되어 있습니다.
- Dataflow에는 모든 파이프라인 단계에 대한 중앙 집중식 로깅이 있습니다.
- Dataflow는 성능을 극대화하고 리소스 사용량을 최적화하는 자동 확장을 제공합니다.
- Dataflow는 내결함성이 있으며 동적 부하 분산을 제공합니다.
- Dataflow는 낙오 항목 감지 및 수정 기능을 제공합니다.
- 전처리, 후처리, 태스크 처리 등 파이프라인의 모든 측면에 단일 시스템을 사용합니다. 파이프라인에서 기존 C++ 코드를 사용할 수도 있습니다.
- Dataflow에서 기본 제공하는 단 한 번 처리 기능을 사용합니다.
또한 Dataflow에는 다음과 같은 다양한 보안 기능이 포함되어 있습니다.
- 파이프라인에 고객 관리 암호화 키(CMEK)를 사용합니다.
- Dataflow 작업과 연결된 네트워크에 방화벽 규칙을 정의합니다.
- VPC 네트워크를 사용합니다.
이러한 워크로드에서는 여러 코어에서 실행되는 함수에 데이터를 분산해야 합니다. 이러한 분산을 위해 다운스트림 시스템에서 대규모 데이터 팬아웃 이후에 매우 높은 동시 실행 읽기를 감당해야 하는 경우가 많습니다. Dataflow의 핵심 역량은 일괄 및 스트림 워크로드를 리소스 간에 분산하고 이러한 리소스 간에 자동 확장 및 동적 작업 재균등화를 관리하는 것입니다. 따라서 높은 병렬 워크로드에 Dataflow를 사용하면 성능, 확장성, 가용성, 보안 요구사항이 자동으로 처리됩니다.
파이프라인에 외부 코드 통합
현재 Apache Beam에는 자바, Python, Go용 SDK가 내장되어 있습니다. 그러나 높은 병렬 워크로드는 C++로 작성된 코드를 사용하는 경우가 많습니다. Dataflow 및 기타 Google Cloud 서비스를 사용하여 Apache Beam으로 C++ 바이너리(라이브러리)를 외부 코드로 실행할 수 있습니다. C++ 바이너리를 포함하면 완전 관리형 서비스를 사용하여 이러한 유형의 워크로드를 활용할 수 있습니다. 또한 정교한 방향성 비순환 그래프(DAG)를 사용하여 전체 파이프라인을 빌드할 수 있습니다.
독립형 바이너리를 컴파일할 수 있는 다른 언어로 작성된 코드에도 C++ 바이너리 실행 방법이 동일하게 적용됩니다.
엔드 투 엔드 고도로 병렬화된 파이프라인
Dataflow를 사용하면 동일한 파이프라인에서 I/O 읽기/쓰기 처리, 분석, 태스크 출력을 모두 수행할 수 있으므로 완전한 높은 병렬 파이프라인을 실행할 수 있습니다.
예를 들어 HPC 높은 병렬 워크로드는 다음 단계를 포함할 수 있습니다.
내부 및 외부 소스의 원시 데이터를 처리합니다. 데이터는 제한되지 않은 소스 또는 제한된 소스에서 가져올 수 있습니다. 무제한 소스는 주로 태스크 농업에 사용되는 기술을 수용하기 위해 제한된 소스로 변환됩니다.
원시 데이터를 작업 팜 구성요소가 사용할 수 있는 데이터 형태 및 인코딩으로 사전 처리합니다.
시스템을 사용하여 호스트에 계산을 배포하고 소스에서 데이터를 검색한 다음 사후 분석을 위해 결과를 구체화합니다.
사후 분석을 수행하여 결과를 출력으로 변환합니다.
Dataflow를 사용하여 Dataflow 기능을 활용하면서 단일 파이프라인에서 이러한 모든 단계를 관리할 수 있습니다.
단일 시스템이 모든 단계를 담당하므로 여러 파이프라인의 실행을 조율하는 외부 조정 시스템이 필요하지 않습니다.
데이터 지역성을 사용하면 스테이지 경계 간에 명시적으로 구체화하고 추상화할 필요가 없으므로 효율성이 향상됩니다.
시스템 내 원격 분석이 강화되어 단계의 총 바이트 정보가 제공되므로 후속 단계를 설계하는 데 도움이 됩니다.
자동 확장이 제공되어 데이터가 시스템에 있을 때 데이터가 파이프라인 단계를 통해 이동하면서 리소스가 데이터 볼륨에 따라 확장됩니다.
핵심 Dataflow HPC 높은 병렬 파이프라인은 최신 DAG 실행 엔진을 사용합니다. 모든 일반적인 파이프라인 프로세스를 단일 DAG, 즉 단일 Dataflow 파이프라인에서 완료할 수 있습니다. Apache Beam에서 생성된 DAG를 사용하여 파이프라인의 모양을 정의할 수 있습니다.
태스크 팜 시스템에서 높은 병렬 워크플로로 마이그레이션하려면 태스크에서 데이터로 전환해야 합니다. PTransform
에는 데이터 요소를 처리하는 프로세스 함수가 포함된 DoFn
이 포함되어 있습니다.
데이터 포인트는 하나 이상의 속성이 있는 모든 객체가 될 수 있습니다.
DAG와 단일 파이프라인을 사용하면 전체 워크플로 중에 시스템 내에 있는 모든 데이터를 로드할 수 있습니다. 데이터베이스나 저장소에 데이터를 출력할 필요가 없습니다.
고도로 병렬화된 워크플로에 사용되는 Google Cloud 구성요소
그리드 컴퓨팅 애플리케이션에서는 여러 개의 코어에서 실행되는 기능에 데이터를 분산시켜야 합니다. 이 패턴에는 종종 동시성이 높은 읽기가 요구되며 이후 다운스트림 시스템에 흡수된 데이터를 대량 팬아웃해야 합니다.
Dataflow는 대규모 병렬화된 데이터 I/O를 흡수할 수 있는 다른 Google Cloud 관리 서비스와 통합됩니다.
- Pub/Sub: 캐싱 및 서빙을 위한 와이드 칼럼 저장소
- Bigtable: 글로벌 이벤트 스트리밍 수집 서비스
- Cloud Storage: 통합 객체 스토어
- BigQuery: 페타바이트 규모의 데이터 웨어하우스 서비스
이러한 서비스를 함께 사용하면 높은 병렬 워크로드를 위한 좋은 해결책을 얻을 수 있습니다.
Google Cloud에서 실행되는 높은 병렬 워크로드의 일반적인 아키텍처는 다음과 같습니다.
Apache Beam용 Dataflow 실행기. 이 실행기는 DAG에서 파생된 처리 흐름을 사용하여 작업을 그리드 노드에 배포합니다. 단일 Apache Beam DAG에서 side-inputs 또는 joins를 사용하여 병렬 파이프라인 단계를 다시 가져올 수 있는 복잡한 다중 단계 파이프라인을 정의할 수 있습니다.
Cloud Storage. 이 서비스는 C++ 바이너리를 스테이징하는 위치를 제공합니다. 대용량 파일을 저장해야 하는 경우 많은 미디어 사용 사례와 마찬가지로 이러한 파일은 Cloud Storage 내에 상주합니다.
다음 다이어그램은 예시 워크플로의 대략적인 아키텍처를 보여줍니다.
다른 저장소 시스템을 사용할 수도 있습니다. 자세한 내용은 Apache Beam 문서의 파이프라인 I/O 페이지에서 저장소 시스템 및 스트리밍 소스 목록을 확인하세요.
Apache Beam용 Dataflow 실행기
Dataflow를 사용하여 스트리밍 모드와 일괄 모드 모두에서 데이터를 변환하고 보강하세요. Dataflow는 Apache Beam을 기반으로 합니다.
Cloud Storage
Cloud Storage는 실시간 데이터 제공, 데이터 분석, 머신러닝(ML), 데이터 보관처리를 아우르는 통합 객체 저장소입니다. Dataflow를 사용하는 높은 병렬 워크로드의 경우 Cloud Storage는 C++ 바이너리에 대한 액세스를 제공합니다. 일부 사용 사례에서 Cloud Storage는 처리 단계에서 필요한 데이터의 위치 또한 제공합니다.
그리드 컴퓨팅에 필요한 높은 버스트 부하의 경우 Cloud Storage 성능 특성을 이해해야 합니다. Cloud Storage 데이터 제공 성능에 대한 자세한 내용은 Cloud Storage 문서의 요청 비율 및 액세스 분배 가이드라인을 참조하세요.
Bigtable
Bigtable은 대규모 분석 및 운영 워크로드를 위한 고성능 NoSQL 데이터베이스 서비스입니다. Bigtable은 Dataflow를 보완합니다. Bigtable의 주요 특성인 짧은 지연 시간 읽기 및 쓰기(90번째 백분위수에 6ms)를 통해 수천 개의 동시 클라이언트 및 버스트가 높은 워크로드를 처리할 수 있습니다. 이러한 기능으로 인해 Bigtable은 Dataflow의 처리 단계에서 DoFn
함수 내의 싱크 및 데이터 소스로 사용하기에 이상적입니다.
BigQuery
BigQuery는 대규모 데이터 분석을 위한 빠르고 경제적인 완전 관리형 엔터프라이즈 데이터 웨어하우스입니다. 그리드 결과는 주로 분석에 사용되며 그리드의 데이터 출력에 대해 대규모 집계를 실행할 수 있습니다.
Pub/Sub
Pub/Sub는 메시지를 생성하는 서비스를 해당 메시지를 처리하는 서비스에서 분리하는 확장 가능한 비동기 메시징 서비스입니다. 스트리밍 분석 및 데이터 통합 파이프라인에 Pub/Sub를 사용하여 데이터를 수집하고 배포할 수 있습니다. 이는 서비스 통합을 위한 메시징 중심 미들웨어 또는 태스크 병렬화를 위한 큐로도 효과적입니다.
Dataflow DAG
Apache Beam SDK를 사용하면 표현력이 우수한 DAG를 빌드할 수 있고, 이를 통해 스트림 또는 일괄 다중 단계 파이프라인을 만들 수 있습니다. 데이터 이동은 변경 불가능한 병렬 요소 컬렉션인 PCollection
객체로 표현된 데이터를 통해 실행기에서 처리합니다.
이 흐름을 다이어그램으로 나타내면 다음과 같습니다.
Apache Beam SDK를 사용하면 DAG를 정의할 수 있습니다. DAG에서 사용자 정의 코드를 함수로 포함할 수 있습니다. 일반적으로 DAG 선언과 사용자 정의 코드에 동일한 프로그래밍 언어(자바, Python 또는 Go)를 사용합니다. 사용자 정의 코드에 C++와 같이 내장되지 않은 코드를 사용할 수도 있습니다.