파이프라인 개발에는 코드 개발, 테스트, 프로덕션으로 전송과 같은 다양한 단계 및 작업이 포함됩니다. 이 문서에서는 다음을 설명합니다.
- 다양한 환경에 자동화된 빌드, 테스트, 파이프라인 배포를 지원하기 위한 지속적 통합 및 지속적 배포(CI/CD)에 대한 고려사항
- 프로덕션에서 성능 및 리소스 사용률을 최적화하기 위한 Dataflow 기능
- 프로덕션 환경에서 스트리밍 파이프라인을 업데이트하기 위한 접근 방식 및 watchpoint
- 프로덕션에서 파이프라인 안정성을 개선하기 위한 권장사항
지속적 통합
지속적 통합(CI)에서는 개발자가 코드를 공유 저장소에 자주 병합해야 하므로 자주 업데이트되는 웹 사이트와 같이 많이 변경되는 애플리케이션에 유용합니다. 데이터 파이프라인은 일반적으로 다른 유형의 애플리케이션만큼 변경되지 않지만 CI 방식은 파이프라인 개발에 많은 이점을 제공합니다. 예를 들어 테스트 자동화는 결함이 발생할 때 빠른 피드백을 제공하고 회귀가 코드베이스에 입력될 가능성을 줄입니다.
테스트 자동화는 CI의 중요한 부분입니다. 테스트 자동화가 적절한 테스트 범위와 결합된 경우 각 코드 커밋에서 테스트 모음을 실행할 수 있습니다. CI 서버는 Maven과 같은 빌드 자동화 도구와 함께 작동하여 하나 이상의 CI 파이프라인 단계로 테스트 모음을 실행할 수 있습니다. 단위 테스트와 통합 테스트를 성공적으로 통과한 코드를 파이프라인이 실행되는 배포 아티팩트로 패키징할 수 있습니다. 이 빌드를 통과 빌드라고 합니다.
통과 빌드에서 생성된 배포 아티팩트의 수와 유형은 파이프라인 실행 방법에 따라 다릅니다. Apache Beam 자바 SDK를 사용하면 파이프라인 코드를 자체 실행 JAR 파일로 패키징할 수 있습니다. 그런 다음 사전 프로덕션 또는 프로덕션 Google Cloud 프로젝트와 같은 배포 환경을 위해 프로젝트에서 호스팅되는 버킷에 JAR 파일을 저장할 수 있습니다. 기본 템플릿(템플릿 실행 유형)을 사용하는 경우 배포 아티팩트에는 JSON 템플릿 파일, 파이프라인의 JAR 파일, 선택적 메타 데이터 템플릿이 포함됩니다. 그런 후 다음 섹션에 설명된 대로 지속적 배포를 사용하여 아티팩트를 여러 배포 환경에 배포할 수 있습니다.
지속적 배포 및 배포
지속적 배포(CD)는 수동으로 시작할 준비가 된 하나 이상의 배포 환경에 배포 아티팩트를 복사합니다. 일반적으로 CI 서버가 빌드한 아티팩트는 엔드 투 엔드 테스트를 실행하기 위해 하나 이상의 사전 프로덕션 환경에 배포됩니다. 엔드 투 엔드 테스트를 모두 통과하면 프로덕션 환경이 업데이트됩니다.
일괄 파이프라인의 경우 지속적 배포를 통해 파이프라인을 새 Dataflow 작업으로 직접 실행할 수 있습니다. 또는 필요한 경우 다른 시스템에서 아티팩트를 사용하여 일괄 작업을 시작할 수 있습니다. 예를 들어 워크플로 내에서 Cloud Composer를 사용하여 일괄 작업을 실행하거나 Cloud Scheduler를 사용하여 일괄 작업을 예약할 수 있습니다.
스트리밍 파이프라인은 일괄 파이프라인보다 배포하기가 더 복잡합니다. 따라서 지속적 배포를 사용하여 자동화하기가 더 어려울 수 있습니다. 예를 들어 기존 스트리밍 파이프라인을 교체하거나 업데이트하는 방법을 결정해야 할 수 있습니다. 파이프라인을 업데이트할 수 없거나 업데이트하지 않을 경우 여러 Dataflow 작업 조정 등과 같은 방법을 사용하여 비즈니스 중단을 최소화하거나 방지할 수 있습니다.
CI/CD에 필요한 ID 및 역할
CI/CD 파이프라인은 다양한 시스템과 상호작용하여 파이프라인을 빌드, 테스트, 배포합니다. 예를 들어 파이프라인은 소스 코드 저장소에 액세스해야 합니다. 이러한 상호작용을 사용 설정하려면 파이프라인에 적절한 ID와 역할이 있어야 합니다. 다음 파이프라인 활동의 경우에는 파이프라인에 특정 ID와 역할이 있어야 할 수도 있습니다.
Google Cloud를 포함한 외부 서비스와 통합 테스트
임시 테스트 또는 시스템 통합 테스트를 실행하기 위해 Direct Runner를 사용하는 경우, 파이프라인은 Google Cloud CLI 사용자 인증 정보를 사용하여 Google Cloud 데이터 소스와 싱크를 사용하거나 GOOGLE_APPLICATION_CREDENTIALS
환경 변수에서 제공하는 사용자 인증 정보를 사용합니다. 파이프라인에서 액세스하는 Google Cloud 리소스의 사용자 인증 정보를 가져오는 데 사용되는 서비스 계정에 충분한 역할과 권한이 있는지 확인합니다.
다른 배포 환경에 아티팩트 배포
가능하면 각 프로젝트에 효과적으로 각 환경에 대해 고유한 사용자 인증 정보를 사용하고, 그에 따라 리소스에 대한 액세스를 제한합니다.
각 프로젝트에 고유한 서비스 계정을 사용하여 스토리지 버킷에 배포 아티팩트를 읽고 쓸 수 있습니다. 파이프라인에서 템플릿을 사용하는지에 따라 배포 프로세스에서 여러 아티팩트를 스테이징해야 할 수도 있습니다. 예를 들어 Dataflow 템플릿을 만들고 스테이징하려면 파이프라인을 시작하는 데 필요한 배포 아티팩트(예: 파이프라인의 템플릿 파일)를 Cloud Storage 버킷에 쓸 수 있는 권한이 필요합니다.
다른 배포 환경에 파이프라인 배포
가능한 경우 각 프로젝트에 고유한 서비스 계정을 사용하여 Dataflow 자체에 대한 액세스를 포함하여 프로젝트 내의 Google Cloud 리소스에 액세스하고 관리합니다.
Dataflow 작업 만들기 및 관리를 위해 사용하는 서비스 계정은 작업 관리를 위해 충분한 IAM 권한이 있어야 합니다. 자세한 내용은 Dataflow 보안 및 권한 페이지의 Dataflow 서비스 계정 섹션을 참조하세요.
Dataflow 작업을 실행하는 데 사용하는 작업자 서비스 계정에는 작업이 실행되는 동안 Compute Engine 리소스를 관리하고 Apache Beam 파이프라인과 Dataflow 서비스 간의 상호작용을 관리할 수 있는 권한이 필요합니다. 자세한 내용은 Dataflow 보안 및 권한 페이지의 작업자 서비스 계정 섹션을 참조하세요.
작업에 사용자 관리형 작업자 서비스 계정을 지정하려면 --serviceAccount
파이프라인 옵션을 사용합니다.
작업을 만들 때 작업자 서비스 계정을 지정하지 않으면 Dataflow가 Compute Engine 기본 서비스 계정을 사용하려고 시도합니다.
대신 Compute Engine 기본 서비스 계정에 일반적으로 Dataflow 작업에 필요한 권한보다 더 넓은 권한 집합이 포함되기 때문에 프로덕션 환경에 대해 사용자 관리 작업자 서비스 계정을 지정하는 것이 좋습니다.
프로덕션 시나리오에서는 Dataflow 작업 관리와 작업자 서비스 계정에 대해 별도로 서비스 계정을 사용하는 것이 좋습니다. 이렇게 하면 단일 서비스 계정을 사용할 때와 비교해서 보안이 향상됩니다. 예를 들어 Dataflow 작업 생성을 위해 사용되는 서비스 계정은 데이터 소스 및 싱크에 액세스할 필요가 없거나 파이프라인에서 사용되는 다른 리소스를 사용할 필요가 없을 수 있습니다. 이 시나리오에서는 Dataflow 작업 실행을 위해 사용되는 작업자 서비스 계정에 파이프라인 리소스를 사용할 권한이 부여됩니다. 작업 생성을 위한 다른 서비스 계정에는 Dataflow 작업을 관리(생성 포함)할 수 있는 권한이 부여됩니다.
CI/CD 파이프라인 예시
다음 다이어그램은 데이터 파이프라인의 CI/CD에 대한 일반적이고 도구 제약이 없는 보기를 제공합니다. 또한 이 다이어그램에서는 개발 작업, 배포 환경, 파이프라인 실행기 사이의 관계를 보여줍니다.
이 다이어그램은 다음 단계를 보여줍니다.
코드 개발: 코드 개발 중에 개발자는 Direct Runner를 사용하여 로컬로 파이프라인 코드를 실행합니다. 또한 개발자는 Dataflow Runner를 사용하여 임시 파이프라인을 실행할 때 샌드박스 환경을 사용합니다.
일반적인 CI/CD 파이프라인에서 개발자가 새 코드를 저장소로 푸시하는 등 소스 제어 시스템을 변경하면 지속적 통합 프로세스가 트리거됩니다.
빌드 및 테스트: 지속적 통합 프로세스는 파이프라인 코드를 컴파일한 다음 Direct Runner를 사용하여 단위 테스트 및 변환 통합 테스트를 실행합니다. 필요한 경우 소규모 테스트 데이터 세트를 사용한 외부 소스 및 싱크와의 통합 테스트를 포함하는 시스템 통합 테스트도 실행할 수 있습니다.
테스트가 성공하면 CI 프로세스는 지속적 배포 프로세스에 액세스할 수 있는 위치에 파이프라인을 시작하는 데 필요한 JAR 파일, Docker 이미지 및 템플릿 메타데이터를 포함하는 배포 아티팩트를 저장합니다. 생성된 배포 아티팩트 유형에 따라 Cloud Storage 및 Artifact Registry를 사용하여 서로 다른 아티팩트 유형을 저장할 수 있습니다.
전송 및 배포: 지속적 배포 프로세스는 사전 프로덕션 환경에 배포 아티팩트를 복사하거나 다른 방법으로 해당 환경 내에서 해당 아티팩트를 사용 가능하도록 제공합니다. 개발자는 Dataflow Runner를 사용하여 수동으로 엔드 투 엔드 테스트를 실행하거나 지속적 배포를 사용하여 자동으로 테스트를 시작할 수 있습니다. 일반적으로 지속적 배포 접근 방식은 스트리밍 파이프라인보다 일괄 파이프라인에 사용 설정하는 것이 더 쉽습니다. 일괄 파이프라인은 지속적으로 실행되지 않으므로 새 출시 버전으로 더 쉽게 교체할 수 있습니다.
스트리밍 파이프라인을 업데이트하는 프로세스는 단순하거나 복잡할 수 있으며 사전 프로덕션 환경에서 업데이트를 테스트해야 합니다. 업데이트 절차가 버전 간에 항상 일치하지 않을 수 있습니다. 예를 들어 파이프라인은 인플레이스 업데이트가 불가능하도록 변경될 수 있습니다. 따라서 지속적 배포를 사용하면 파이프라인 업데이트를 자동화하기 어려울 수 있습니다.
모든 엔드 투 엔드 테스트를 통과하면 지속적 배포 프로세스 중에 배포 아티팩트를 복사하거나 프로덕션 환경에 제공할 수 있습니다. 새 파이프라인이 기존 스트리밍 파이프라인을 업데이트하거나 대체하는 경우 사전 프로덕션 환경에서 테스트된 절차를 사용하여 새 파이프라인을 배포합니다.
비템플릿 작업 실행과 템플릿 작업 실행 비교
개발 환경에서 Apache Beam SDK를 직접 사용하여 Dataflow 작업을 만들 수 있습니다. 이 유형의 작업을 비템플릿 작업이라고 부릅니다. 이 접근 방식은 개발자에게 편리하지만 파이프라인의 개발 작업과 실행 작업은 분리하는 것이 좋습니다. 이렇게 분리하면 Dataflow 템플릿을 사용하여 파이프라인을 스테이징하고 독립 태스크로 실행할 수 있습니다. 템플릿이 스테이징된 다음에는 비개발자를 포함한 다른 사용자가 Google Cloud CLI, Google Cloud 콘솔, Dataflow REST API를 사용하여 템플릿에서 작업을 실행할 수 있습니다.
Dataflow는 다음 유형의 작업 템플릿을 제공합니다.
- 기본 템플릿: 개발자는 Apache Beam SDK를 사용하여 파이프라인 코드를 실행하고 JSON 직렬화 실행 그래프를 템플릿으로 저장합니다. Apache Beam SDK는 템플릿 파일을 파이프라인 코드에 필요한 종속 항목과 함께 Cloud Storage 위치에 스테이징합니다.
- Flex 템플릿: 개발자는 Google Cloud CLI를 사용하여 파이프라인을 Docker 이미지로 패키징합니다. 그 다음에는 Artifact Registry에 저장됩니다. Flex 템플릿 사양 파일은 또한 자동으로 생성되며 사용자가 지정한 Cloud Storage 위치에 저장됩니다. Flex 템플릿 사양 파일에는 파이프라인 매개변수와 같이 템플릿 실행 방법을 설명하는 메타데이터가 포함되어 있습니다.
링크된 문서에 설명된 Flex 템플릿 기능 외에도 Flex 템플릿은 기본 템플릿에 비해 템플릿 관리 이점을 제공합니다.
- 기본 템플릿의 경우, JAR 파일과 같은 여러 아티팩트가 Cloud Storage 스테이징 위치에 저장될 수 있지만, 이러한 여러 아티팩트를 관리할 수 있는 기능이 없습니다. 이와 달리 Flex 템플릿은 Docker 이미지 내에 캡슐화되어 있습니다. 이 이미지는 파이프라인에 필요한 모든 종속 항목(Flex 템플릿 사양과 별도)을 Artifact Registry에서 관리되는 하나의 배포 아티팩트로 패키징합니다.
- Flex 템플릿에 대해 Docker 이미지 관리 기능을 사용할 수 있습니다. 예를 들어 Artifact Registry에 pull(및 선택적으로 push) 권한을 부여하여 Flex 템플릿을 안전하게 공유하고, Flex 템플릿의 여러 버전에 대해 Docker 이미지 태그를 사용할 수 있습니다.
개발자는 기본 템플릿 및 Flex 템플릿을 사용하여 레지스트리 및 템플릿 애셋을 호스팅하는 스토리지 버킷 또는 클래식 템플릿을 사용하는 경우 스토리지 버킷을 소유하는 프로젝트와 다른 프로젝트에서 작업을 실행할 수 있습니다. 이 기능은 여러 고객의 데이터 처리를 서로 다른 프로젝트 및 파이프라인 작업으로 격리시켜야 할 때 유용합니다. Flex 템플릿을 사용하면 파이프라인을 실행할 때 사용할 Docker 이미지의 다른 버전을 지정할 수 있습니다. 이렇게 하면 일괄 파이프라인의 단계별 바꾸기 또는 나중에 템플릿을 업데이트할 때 여러 프로젝트로 파이프라인을 스트리밍하는 작업을 간소화할 수 있습니다.
리소스 사용량 최적화를 위한 Dataflow 기능
Dataflow는 리소스 사용량을 최적화하기 위해 다음과 같은 실행기별 기능을 제공하여 성능을 개선하고 비용을 줄일 수 있습니다.
- Streaming Engine: Streaming Engine은 스트리밍 파이프라인 실행 주체를 VM 작업자에서 전용 서비스로 이동합니다. 자동 확장 응답 개선, 작업자 VM의 리소스 소비 감소, 재배포 없이 자동 서비스 업데이트 등의 이점이 있습니다. 경우에 따라 중복을 허용할 수 있는 사용 사례에 최소 1회 처리를 사용하여 리소스 사용량을 줄일 수도 있습니다. 스트리밍 파이프라인에는 Streaming Engine을 사용 설정하는 것이 좋습니다. 최신 버전의 Apache Beam 자바 SDK 또는 Python SDK를 사용하면 이 기능이 기본적으로 사용 설정됩니다.
- Dataflow Shuffle: Dataflow Shuffle은 일괄 파이프라인의 셔플 작업을 VM 작업자에서 전용 서비스로 이동합니다. 대부분의 일괄 파이프라인에 대한 빠른 실행, 작업자 VM의 리소스 소비 감소, 자동 확장 응답 개선, 내결함성 개선 등의 이점이 있습니다. 일괄 파이프라인에는 Dataflow Shuffle을 사용 설정하는 것이 좋습니다. Apache Beam 자바 SDK 및 최신 Python SDK를 사용하면 이 기능이 기본적으로 사용 설정됩니다.
- 유연한 리소스 예약(FlexRS): FlexRS는 고급 예약 기술, Dataflow Shuffle 서비스, 선점형 VM 인스턴스와 일반 VM의 조합을 사용하여 일괄 처리 비용을 줄입니다.
프로덕션 환경에서 스트리밍 파이프라인 업데이트
스트리밍 파이프라인 업그레이드를 참조하세요.
Dataflow 작업의 수명
Dataflow 작업은 다양한 작업 상태로 표현되는 수명 주기를 거칩니다.
Dataflow 작업을 실행하려면 리전에 작업을 제출합니다.
작업은 리전 내의 영역 중 하나에 있는 사용 가능한 Dataflow 백엔드로 라우팅됩니다. Dataflow가 백엔드를 할당하기 전에 작업을 실행할 수 있을 정도로 충분한 할당량과 권한이 있는지 확인합니다. 이러한 실행 전 검사가 완료되고 백엔드가 할당되면 작업이 JOB_STATE_PENDING
상태로 전환됩니다. FlexRS 작업의 경우 백엔드 할당이 미래의 시점으로 지연될 수 있으며 이러한 작업은 JOB_STATE_QUEUED
상태가 됩니다.
할당된 백엔드는 실행할 작업을 선택하고 Google Cloud 프로젝트에서 Dataflow 작업자를 시작하려고 시도합니다. 작업자 VM에 선택된 영역은 여러 요인에 따라 달라집니다. Dataflow Shuffle을 사용하는 일괄 작업의 경우 이 서비스는 영역 간 트래픽 방지를 위해 Dataflow 백엔드와 작업자 VM이 같은 영역에 있도록 합니다.
Dataflow 작업자가 시작된 후에는 이 작업자가 Dataflow 백엔드에서 작업을 요청합니다. 백엔드는 작업자 간에 분산되는 동시 로드가 가능한 청크(번들이라고 함)로 작업을 분할합니다. 작업자가 기존 작업을 처리할 수 없고 자동 확장이 사용 설정된 경우 작업을 처리하기 위해 백엔드에서 더 많은 작업자를 시작합니다. 마찬가지로, 필요한 것보다 많은 작업자가 시작되면 일부 작업자가 종료됩니다.
Dataflow 작업자가 시작되면 Dataflow 백엔드는 작업 실행을 조정하는 제어 영역 역할을 합니다. 처리 중에 작업의 데이터 영역은 GroupByKey
, CoGroupByKey
및 Combine
과 같은 셔플 작업을 수행합니다.
작업은 셔플 작업에 다음과 같은 데이터 영역 구현 중 하나를 사용합니다.
- 데이터 영역은 Dataflow 작업자에서 실행되고 셔플 데이터는 영구 디스크에 저장됩니다.
- 데이터 영역은 작업자 VM에서 외부화된 서비스로 실행됩니다. 이 구현에는 작업을 만들 때 지정할 수 있는 두 가지 변수가 있습니다. 일괄 파이프라인을 위한 Dataflow Shuffle과 스트리밍 파이프라인을 위한 Streaming Engine입니다. 작업자 기반 셔플과 비교할 때 서비스 기반 셔플은 데이터 셔플링 작업의 성능과 확장성을 크게 개선합니다.
JOB_STATE_RUNNING
상태로 전환되는 스트리밍 작업은 작업이 실패하지 않는 한 취소 또는 드레이닝될 때까지 무기한 실행됩니다. 모든 처리가 완료되거나 복구 불가 오류가 발생하면 일괄 작업이 자동으로 종료됩니다. 작업이 중지된 원인에 따라 Dataflow는 작업의 상태를 JOB_STATE_CANCELLED
, JOB_STATE_DRAINED
, JOB_STATE_DONE
등 여러 터미널 상태 중 하나로 설정합니다.
파이프라인 안정성 권장사항
이 섹션에서는 Dataflow를 사용할 때 발생할 수 있는 오류와 Dataflow 작업에 대한 권장사항을 설명합니다.
격리 원칙 준수
전체 파이프라인의 안정성을 개선하기 위한 일반적인 권장사항은 리전 및 영역의 격리 원칙을 따르는 것입니다. 파이프라인에는 중요한 리전 간 종속 항목이 없어야 합니다. 여러 리전의 서비스에서 중요한 종속 항목이 있는 파이프라인이 있는 경우 해당 파이프라인은 이러한 리전 중 하나의 오류로 인해 영향을 받을 수 있습니다. 이 문제를 피하려면 중복 및 백업을 위해 멀티 리전에 배포하세요.
Dataflow 스냅샷 만들기
Dataflow는 파이프라인 상태 백업을 제공하는 스냅샷 기능을 제공합니다. 파이프라인 스냅샷을 다른 영역 또는 리전의 새 스트리밍 Dataflow 파이프라인으로 복원할 수 있습니다. 그런 다음 스냅샷 타임스탬프부터 Pub/Sub 또는 Kafka 주제의 메시지 재처리를 시작할 수 있습니다. 파이프라인의 정기 스냅샷을 설정하면 복구 시간 목표(RTO) 시간을 최소화할 수 있습니다.
Dataflow 스냅샷에 대한 자세한 내용은 Dataflow 스냅샷 사용을 참조하세요.
작업 제출 실패 처리
Apache Beam SDK를 사용하여 비템플릿 Dataflow 작업을 제출합니다. 작업을 제출하려면 파이프라인 옵션의 일부로 지정된 Dataflow Runner를 사용하여 파이프라인을 실행합니다. Apache Beam SDK는 Cloud Storage에서 파일을 스테이징하고, 작업 요청 파일을 만들고, 파일을 Dataflow에 제출합니다.
또는 Dataflow 템플릿에서 생성된 작업은 일반적으로 템플릿 API를 사용하는 다른 제출 방법을 사용합니다.
Dataflow에서 템플릿 작업과 비 템플릿 작업의 작업 실패를 나타내는 다양한 오류를 반환할 수 있습니다. 이 섹션에서는 다양한 유형의 작업 제출 실패를 처리하거나 완화하기 위한 권장사항을 설명합니다.
일시적인 실패 후 작업 제출 재시도
Dataflow 서비스 문제로 인해 작업이 시작되지 않으면 작업을 몇 번 다시 시도합니다. 재시도하면 일시적인 서비스 문제가 완화됩니다.
작업자 리전을 지정하여 영역 오류 완화
Dataflow는 리전별 가용성을 제공하며 멀티 리전에서 사용할 수 있습니다. 사용자가 명시적으로 영역을 지정하지 않고 리전에 작업을 제출하면 Dataflow는 리소스 가용성에 따라 지정된 리전의 영역으로 작업을 라우팅합니다.
작업 배치에 권장되는 옵션은 가능한 경우 --zone
플래그 대신 --region
플래그를 사용하여 작업자 리전을 지정하는 것입니다. 이 단계를 통해 Dataflow는 해당 작업에 가장 적합한 영역을 자동으로 선택하여 파이프라인의 내결함성을 강화할 수 있습니다. 명시적 영역이 지정된 작업은 이러한 이점이 없으며 영역 내에서 문제가 발생하면 실패합니다. 영역 문제로 인해 작업 제출이 실패하면 명시적으로 영역을 지정하지 않고 작업을 다시 시도하여 문제를 해결할 수 있습니다.
멀티 리전에 데이터를 저장하여 리전 오류 완화
전체 리전을 사용할 수 없는 경우 다른 리전에서 작업을 시도하세요. 여러 리전에서 작업이 실패하면 데이터의 가용성을 고려해야 합니다. 여러 리전에 데이터를 수동으로 복사하지 않고 단일 리전 장애를 방지하려면 여러 리전에 데이터를 자동으로 저장하는 Google Cloud 리소스를 사용하세요. 예를 들어 데이터 세트 또는 Cloud Storage 이중 리전 및 멀티 리전 버킷에는 BigQuery 멀티 리전 위치를 사용합니다. 한 리전을 사용할 수 없게 되면 데이터를 사용할 수 있는 다른 리전에서 파이프라인을 다시 실행할 수 있습니다.
Dataflow에서 멀티 리전 서비스를 사용하는 예시는 고가용성 및 지리적 중복성을 참조하세요.
파이프라인 실행 실패 처리
작업이 제출되고 수락되면 해당 작업에 유효한 작업은 다음과 같습니다.
- 일괄 작업 취소
- 스트리밍 작업의 업데이트, 드레이닝 또는 취소
작업을 제출한 후에는 실행 중인 작업의 위치를 변경할 수 없습니다. FlexRS를 사용하지 않는 경우 일반적으로 작업은 제출 후 몇 분 내에 데이터 처리를 시작합니다. FlexRS 작업은 데이터 처리를 시작하는 데 최대 6시간이 걸릴 수 있습니다.
이 섹션에서는 작업 실행 실패 및 처리 권장사항을 설명합니다.
작업 모니터링을 통해 일시적인 오류로 인한 문제 파악 및 해결
일괄 작업의 경우 실패한 항목이 포함된 번들은 4번 재시도됩니다. Dataflow는 단일 번들이 4번 실패하면 작업을 종료합니다. 이 프로세스를 통해 많은 일시적인 문제를 해결할 수 있습니다. 하지만 장기적 실패가 발생하면 보통 최대 재시도 한도에 빠르게 도달하므로 작업이 빠르게 실패할 수 있습니다.
모니터링 및 이슈 관리의 경우 실패한 작업을 감지하도록 알림 규칙을 구성합니다. 작업이 실패하면 작업 로그를 검사하여 재시도 한도를 초과한 실패한 작업 항목으로 인해 발생한 작업 실패를 파악합니다.
스트리밍 작업의 경우 Dataflow는 실패한 작업 항목을 무기한 재시도하므로 작업이 종료되지 않습니다. 하지만 문제가 해결될 때까지 작업이 중단될 수 있습니다. 모니터링 정책을 만들어 시스템 지연 시간 증가 및 데이터 최신 상태 저하와 같은 중단된 파이프라인의 신호를 감지합니다. 파이프라인 코드에 오류 로깅을 구현하면 반복적으로 실패하는 작업 항목으로 인해 발생한 파이프라인 중단을 식별할 수 있습니다.
영역 중단이 발생하면 다른 영역에서 작업 다시 시작
작업이 시작된 후 사용자 코드를 실행하는 Dataflow 작업자는 단일 영역으로 제한됩니다. 영역별 서비스 중단이 발생하면 중단 범위에 따라 Dataflow 작업이 영향을 받는 경우가 많습니다.
Dataflow 백엔드에만 영향을 미치는 중단의 경우 백엔드에서 작업을 계속할 수 있도록 관리형 서비스에 의해 백엔드가 다른 영역으로 자동 마이그레이션됩니다. 작업에서 Dataflow Shuffle을 사용하는 경우 백엔드를 다른 영역으로 이동할 수 없습니다. Dataflow 백엔드 마이그레이션이 발생하면 작업이 일시적으로 중단될 수 있습니다.
영역 중단이 발생하면 실행 중인 작업은 실패하거나 영역 가용성이 복원될 때까지 중단될 수 있습니다. 영역을 오랫동안 사용할 수 없게 되면 작업을 중지(일괄 작업의 경우 취소, 스트리밍 작업의 경우 드레이닝)한 다음 다시 시작하여 Dataflow가 새로운 정상 영역을 선택하도록 해야 합니다.
리전 중단이 발생하면 다른 리전에서 일괄 작업을 다시 시작
Dataflow 작업이 실행 중인 리전에서 리전 중단이 발생하면 작업이 실패하거나 중단될 수 있습니다. 일괄 작업의 경우 가능하면 다른 리전에서 작업을 다시 시작합니다. 다른 리전에서 데이터를 사용할 수 있는지 확인해야 합니다.
고가용성 또는 장애 조치를 사용하여 리전 중단 완화
스트리밍 작업의 경우 애플리케이션의 내결함성과 예산에 따라 실패를 완화할 수 있는 옵션을 사용할 수 있습니다. 리전 중단의 경우 가장 간단하고 비용 효율적인 옵션은 중단이 끝날 때까지 기다리는 것입니다. 하지만 애플리케이션이 지연 시간에 민감하거나 데이터 처리가 중단되어서는 안 되거나 최소한의 지연 후 재개되어야 하는 경우 다음 섹션에 설명된 옵션을 참조합니다.
고가용성: 데이터 손실 없이 지연 시간에 민감함
애플리케이션에서 데이터 손실을 허용할 수 없는 경우 두 개의 서로 다른 리전에서 중복 파이프라인을 동시에 실행하고 파이프라인이 동일한 데이터를 사용하도록 합니다. 두 리전 모두에서 동일한 데이터 소스를 사용할 수 있어야 합니다. 이러한 파이프라인의 출력에 의존하는 다운스트림 애플리케이션은 이 두 리전의 출력 간에 전환할 수 있어야 합니다. 리소스 중복으로 인해 이 옵션은 다른 옵션에 비해 비용이 많이 듭니다. 배포의 예시는 고가용성 및 지리적 중복성 섹션을 참조하세요.
장애 조치: 잠재적인 데이터 손실이 약간 발생하며 지연 시간에 민감함
애플리케이션이 잠재적인 데이터 손실을 허용할 수 있는 경우 스트리밍 데이터 소스를 여러 리전에서 사용할 수 있도록 합니다. 예를 들어 Pub/Sub를 사용하면 동일한 주제에 대해 리전마다 하나씩 2개의 독립적인 구독을 유지할 수 있습니다. 리전 중단이 발생하면 다른 리전에서 교체 파이프라인을 시작하고 파이프라인이 백업 구독의 데이터를 사용하도록 할 수 있습니다.
지연 시간은 그대로 유지하면서 데이터 손실을 최소화하려면 백업 구독을 적절한 시간으로 재생합니다. 다운스트림 애플리케이션은 실행 중인 파이프라인의 출력으로 전환하는 방법을 알아야 합니다(고가용성 옵션과 유사). 이 옵션은 데이터만 중복되므로 중복 파이프라인을 실행할 때보다 리소스를 적게 사용합니다.
고가용성 및 지리적 중복성
고가용성 데이터 처리를 위해 여러 스트리밍 파이프라인을 동시에 실행할 수 있습니다. 예를 들어 데이터 처리를 위한 지리적 중복성과 내결함성을 제공하는 서로 다른 리전에서 두 개의 병렬 스트리밍 작업을 실행할 수 있습니다.
데이터 소스 및 싱크의 지리적 가용성을 고려하여 가용성이 높은 멀티 리전 구성에서 엔드 투 엔드 파이프라인을 운영할 수 있습니다. 다음 다이어그램은 배포의 예시를 보여줍니다.
이 다이어그램은 다음 흐름을 보여줍니다.
Pub/Sub는 전 세계 대부분의 리전에서 실행되므로 사용자는 서비스를 통해 빠른 글로벌 데이터 액세스를 제공받고 메시지가 저장되는 위치를 관리할 수 있습니다. Pub/Sub는 게시된 메시지를 구독자와 가장 가까운 Google Cloud 리전에 자동으로 저장하거나 메시지 스토리지 정책을 사용하는 특정 리전 또는 여러 리전을 사용하도록 메시지를 구성할 수 있습니다.
그런 다음 Pub/Sub는 메시지가 저장된 위치에 상관없이 전 세계 구독자에게 메시지를 전달합니다. Pub/Sub 클라이언트는 연결되는 서버 위치를 알 필요가 없습니다. 전역 부하 분산 메커니즘이 메시지가 저장된 가장 가까운 Google Cloud 데이터 센터로 트래픽을 전달하기 때문입니다.
Dataflow는 특정 Google Cloud 리전에서 실행됩니다. 별도의 Google Cloud 리전에서 병렬 파이프라인을 실행하면 단일 리전에 영향을 미치는 오류로부터 작업을 격리할 수 있습니다. 이 다이어그램은 동일한 파이프라인의 두 인스턴스를 보여줍니다. 각 인스턴스는 별도의 Google Cloud 리전에서 실행됩니다.
BigQuery는 리전 및 멀티 리전 데이터 세트 위치를 제공합니다. 멀티 리전 위치를 선택하면 데이터 세트는 두 개 이상의 리전에 있습니다. 이 다이어그램은 각각 별도의 멀티 리전 데이터 세트에 쓰는 두 개의 개별 파이프라인을 보여줍니다.