직접 전송을 통한 그룹 마이그레이션
직접 전송을 통한 그룹 마이그레이션은
파일 내보내기를 사용하여 그룹과 프로젝트를 마이그레이션하는 진화된 방법입니다.
목표는 사용자가 전체 그룹을 더 쉽게 마이그레이션할 수 있는 방법을 제공하는 것입니다.
그룹과 프로젝트를 한 GitLab 인스턴스에서 다른 인스턴스로 마이그레이션합니다.
설계 결정
다음 아키텍처 다이어그램은 현재 GitLab API를 활용한
일련의 ETL 파이프라인을 통해 그룹 마이그레이션이 작동하는 방식을 설명합니다.
ETL
ETL, 즉 추출, 변환 및 적재는 데이터 통합 프로세스로,
여러 데이터 출처의 데이터를 결합하여
단일 일관된 데이터 저장소에 로드하여 데이터 웨어하우스 또는 다른 대상 시스템으로 이동합니다.
ETL 아키텍처를 사용하면 코드를 더 명확하고 쉽게 따라가고,
테스트하며 확장할 수 있습니다.
아이디어는 가져올 각 관계에 대해 하나의 ETL 파이프라인을 갖는 것입니다.
API
현재 프로젝트와
group 수입은 파일 기반이므로
내보내기 단계가 필요하여 가져올 파일을 생성해야 합니다.
직접 전송을 통한 그룹 마이그레이션은 마이그레이션 속도를 높이기 위해
GitLab API를 활용합니다.
그리고 우리는 GraphQL로 나아가고 있기 때문에,
직접 전송을 통한 그룹 마이그레이션은 GraphQL API 커버리지를 확장하는 데 기여할 수 있으며,
이로 인해 GitLab과 사용자가 모두 혜택을 볼 수 있습니다.
네임스페이스
마이그레이션 프로세스는 마이그레이션을 추적하기 위해
BulkImport
레코드를 생성하는 것으로 시작합니다.
이후 GitLab 그룹 마이그레이션과 관련된 모든 코드는
모든 애플리케이션 계층에서 새로운 BulkImports
네임스페이스 아래에서 찾을 수 있습니다.
멱등성
같은 Sidekiq 작업을 재실행할 때 중복 항목이 생성되지 않도록
각 항목을 처리할 때 캐시하고, 캐시에 있는 경우 항목을 건너뜁니다.
두 가지 다른 전략이 있습니다:
-
BulkImports::Pipeline::HexdigestCacheStrategy
, 데이터의 해시 다이제스트 표현을 캐시합니다. -
BulkImports::Pipeline::IndexCacheStrategy
, 파이프라인에서 항목의 마지막 처리된 색인을 캐시합니다.