개요
- Gitaly는 Git 리포지토리에 대한 고수준의 RPC 접근을 제공하고, Git 데이터를 읽고 쓰기 위해 GitLab에서 사용됩니다.
- 모든 GitLab 설치 방식에 존재하며 Git 리포지토리의 저장 및 검색을 조율 합니다.
- 단일 인스턴스 Linux 패키지 설치에서 백그라운드 서비스로 운영 (모든 GitLab이 한 머신에서 운영)
- 확장성과 가용성 요구사항에 따라 자체 인스턴스로 분리되고 전체 클러스터 구성으로 설정
구성
graph TD
GitLabRails[GitLab Rails] --gRPC--> Gitaly[Gitaly]
GitLabWorkhorse[GitLab Workhorse] --gRPC--> Gitaly[Gitaly]
GitLabShell[GitLab Shell] --gRPC--> Gitaly[Gitaly]
etc[...] --gRPC--> Gitaly[Gitaly]
subgraph "Gitaly Client"
GitLabRails[GitLab Rails]
GitLabWorkhorse[GitLab Workhorse]
GitLabShell[GitLab Shell]
etc[...]
end
subgraph "Gitaly Server"
Gitaly[Gitaly]
end
Gitaly[Gitaly] --> Localfilesystem[Local filesystem]
- Gitaly는
클라이언트-서버 아키텍처
로 구성되어 있습니다.
- Gitaly 서버는 Gitaly 자체를 실행하는 노드입니다.
- Gitaly 클라이언트는 Gitaly 서버에 요청 프로세스를 실행하는 노드입니다.
- Gitaly 클라이언트는 Gitaly consumers라고도 하며 다음을 포함하고 있습니다.
- GitLab Rails 애플리케이션
- GitLab Shell
- GitLab Workhorse
- GitLab Elasticsearch Indexer
- GitLab Zoekt Indexer
- Gitaly는 GitLab의 Git 리포지토리 접근만 관리합니다. (다른 유형의 GitLab 데이터는 Gitaly를 사용하여 접근하지 않습니다.)
- GitLab은 설정된 리포지토리 저장소를 통해 리포지토리에 접근합니다. 각 새로운 리포지토리는 설정된 가중치에 따라 하나의 리포지토리 저장소에 저장됩니다.
- 저장소 경로를 사용하여 리포지토리에 직접 접근하는 Gitaly 저장소로, 각 리포지토리는 단일 Gitaly 노드에 저장됩니다. 모든 요청은 이 노드로 라우팅됩니다.
- Gitaly Cluster가 제공하는 가상 저장소로, 각 리포지토리는 내결함성을 위해 여러 Gitaly 노드에 저장될 수 있습니다.
- 읽기 요청은 여러 Gitaly 노드에 분배되어 성능을 향상시킬 수 있습니다.
- 쓰기 요청은 리포지토리 복제본에 브로드캐스트됩니다.
디스크 요구사항
- Gitaly와 Gitaly Cluster는 I/O 기반 프로세스가 많기 때문에 빠른 로컬 스토리지가 필요합니다.
- 이에 공식적으로 모든 Gitaly 노드에 SSD(Solid-State Drives)를 사용할 것을 권장합니다.
- 처리량 요구사항
- 읽기 작업에 대해 초당 8,000 입출력 작업(IOPS)
- 쓰기 작업에 대해 초당 2,000 IOPS
주의사항
- GitLab은 Git 클라이언트나 다른 도구를 사용하여 디스크에 저장된 Gitaly 리포지토리에 직접 접근하는 것을 권장하지 않습니다.
- Gitaly 프로세스를 통해 지속해서 작업이 수행되고, 디스크 데이터가 변경되고 있기 때문에 성능 저하, 불안정성, 심지어 데이터 손실을 초래할 수 있습니다.
Gitaly Cluster