InfoGrab DocsInfoGrab Docs

Geo (개발)

GitLab Geo의 아키텍처, 복제 계층, 인증, 데이터 저장소, 검증, 개발 워크플로를 설명합니다.

Geo는 여러 GitLab 인스턴스를 서로 연결합니다. 하나의 GitLab 인스턴스가 primary 사이트로 지정되며 여러 secondary 사이트와 함께 운영할 수 있습니다. Geo는 아래 다이어그램에서 볼 수 있고 이 문서에서 더 자세히 설명하는 여러 컴포넌트를 조율합니다. 복제 계층 # Geo는 여러 컴포넌트의 복제를 처리합니다. 데이터베이스 : 캐시와 job을 제외한 전체 애플리케이션을 포함합니다. Git 리포지터리 : 프로젝트와 위키를 모두 포함합니다. Blob : 이슈에 첨부된 이미지부터 CI의 원시 로그와 에셋까지 모든 항목을 포함합니다. 데이터베이스 복제를 제외하면 secondary 사이트에서는 모든 작업이 Geo Log Cursor 에 의해 조율됩니다. 복제 상태 # 다음 다이어그램은 복제가 동작하는 방식을 보여 줍니다. 일부 허용된 전환은 명확성을 위해 생략했습니다. Mermaid 다이어그램 (7줄) 소스 코드 보기 stateDiagram-v2 Pending --> Started Started --> Synced Started --> Failed Synced --> Pending: Mark for resync Failed --> Pending: Mark for resync Failed --> Started: Retry Geo Log Cursor 데몬 # Geo Log Cursor 데몬 은 각 secondary 사이트에서 실행되는 별도의 프로세스입니다. Geo Event Log 에서 새 이벤트가 있는지 모니터링하고, 각 특정 이벤트 유형에 대해 백그라운드 job을 생성합니다. 예를 들어 리포지터리가 업데이트되면 Geo primary 사이트는 연관된 리포지터리 업데이트 이벤트와 함께 Geo 이벤트를 생성합니다. Geo Log Cursor 데몬은 이 이벤트를 가져와 Geo::EventWorker job을 스케줄링하며, 이 job은 Geo::EventService 를 사용해 리포지터리를 업데이트합니다. Geo Log Cursor 데몬은 고가용성 모드로 자동으로 동작할 수 있습니다. 데몬은 주기적으로 잠금 획득을 시도하고, 잠금을 획득하면 활성 데몬으로 동작합니다. 같은 사이트에서 추가로 실행 중인 데몬은 대기 모드에 있으며, 활성 데몬이 잠금을 해제하면 작업을 재개할 준비가 되어 있습니다. GitLab은 TTL이 짧은 ExclusiveLease 잠금 유형을 사용하며, 이 잠금은 풀링 주기마다 갱신됩니다. 이를 통해 타임아웃이 있는 전역 잠금을 구현할 수 있습니다. 풀링 주기가 끝날 때 데몬이 잠금을 갱신하거나 다시 획득할 수 없으면 대기 모드로 전환됩니다. 데이터베이스 복제 # Geo는 스트리밍 복제 를 사용해 primary 사이트에서 secondary 사이트로 데이터베이스를 복제합니다. 이 복제를 통해 secondary 사이트는 데이터베이스에 저장된 모든 데이터에 액세스할 수 있으므로, 사용자는 secondary 사이트에 로그인해 예를 들어 모든 이슈와 머지 리퀘스트를 읽을 수 있습니다. 리포