직접 전송에 의한 그룹 이전
- GitLab 13.7에서 소개되었습니다.
직접 전송에 의한 그룹 이전은 파일 익스포트를 사용하여 그룹 및 프로젝트를 이전하는 과정의 진화입니다. 사용자가 한 GitLab 인스턴스에서 다른 인스턴스로 전체 그룹 및 프로젝트를 더 쉽게 이전할 수 있도록 하는 것이 목표입니다.
설계 결정
다음 아키텍처 다이어그램은 ETL 파이프라인 세트를 활용하여 작동하는 그룹 이전 방식을 설명합니다. 이 파이프라인은 현재 GitLab API를 활용합니다.
ETL
ETL(추출, 변환, 로드)은 여러 데이터 소스에서 데이터를 결합하여 단일하고 일관된 데이터 리포지터리에 로드하는 데이터 통합 프로세스입니다. 이 리포지터리는 데이터 웨어하우스나 다른 대상 시스템에 로드됩니다.
ETL 아키텍처를 사용하면 코드를 명확하게 만들고 추적 및 확장하기 쉽습니다. 각 관계에 대해 하나의 ETL 파이프라인을 갖는 것이 아이디어입니다.
API
현재 프로젝트 및 그룹 이전은 파일 기반이므로 이들은 가져올 파일을 생성하는 내보내기 단계가 필요합니다.
직접 전송에 의한 그룹 이전은 GitLab API를 활용하여 이전 속도를 높입니다.
그리고, 우리는 GraphQL로 나아가고 있기 때문에, 직접 전송에 의한 그룹 이전은 GraphQL API 범위를 확장하는 데 기여할 수 있으며, 이는 GitLab과 사용자 모두에게 이점을 줍니다.
네임스페이스
이전 프로세스는 이전을 추적하는 BulkImport
레코드를 생성하는 것으로 시작됩니다. 그런 다음 GitLab 그룹 이전과 관련된 모든 코드는 각 응용 프로그램 레이어에서 새로운 BulkImports
네임스페이스 아래에서 찾을 수 있습니다.
아이덤포턴시
동일한 Sidekiq 작업을 재실행할 때 중복 항목이 생성되지 않도록하기 위해 각 항목을 처리하는 동안 캐시에 저장하고 캐시에 있는 경우 항목을 건너뛸 수 있는지 확인합니다.
두 가지 다른 전략이 있습니다:
-
BulkImports::Pipeline::HexdigestCacheStrategy
: 데이터의 해시 대표값을 캐시합니다. -
BulkImports::Pipeline::IndexCacheStrategy
: 파이프라인 내에서 항목의 마지막 처리된 인덱스를 캐시합니다.