객체 스토리지 기반의 분산형 Git 서버 Walgit 소개
Walgit: A Git server that is one binary in front of an object store
Hacker News객체 스토리지(S3/GCS)의 WAL을 단일 진실 공급원으로 사용하여 Git 저장소를 관리하는 서버입니다. 복잡한 DB나 리더 없이 모든 노드가 독립적인 캐시 역할을 수행합니다.
- 전통적인 분산 시스템이 요구하던 Primary, Quorum 같은 복잡한 합의 메커니즘을 제거했습니다. 객체 스토리지에 쓰기 로그를 기록하고 CAS(Compare-and-Swap)로 리더 없이도 높은 일관성을 확보합니다.
- 대규모 분산 Git 코드 관리의 난제를 해결하며, 복잡한 인프라 구축 없이 무제한에 가까운 확장성과 가용성을 제공하여 개발 환경을 혁신할 잠재력을 지닙니다.
- S3 또는 GCS와 같은 객체 스토리지에 전적으로 의존하는 구조이므로, 대규모 분산 환경에서 최적의 성능과 안정성을 위해서는 노드 배치 및 네트워크 설정을 신중히 고려해야 합니다.
walgit은 데이터베이스나 리더, 로컬 상태가 필요 없는 단일 바이너리 형태로 작동하는 Git 서버입니다. S3 또는 GCS와 같은 객체 스토리지에 연결하여 스마트 HTTP(v0/v2) 페치 및 푸시 기능을 제공하며, `bundle-uri` 클론, Git LFS 지원, 웹 UI, JSON 등을 갖추고 있습니다. 이 아키텍처는 서버가 구동되는 머신보다 더 큰 저장소에도 확장할 수 있도록 설계되었으며, 모든 기기는 일회성 캐시 역할을 하고 실제 저장소는 객체 스토리지 버킷이 담당합니다.
기존 Git 시스템은 패크파일 구조 때문에 네트워크 파일시스템에서 대규모 운영 시 어려움을 겪었습니다. walgit의 접근 방식은 쓰기 전 로그(WAL)를 객체 스토리지에 불변 객체로 저장하고, 모든 온디스크 저장소를 캐시로 활용합니다. 푸시는 버킷 내의 불변 객체로 기록되며, CAS(Compare-and-Swap)가 합의 메커니즘 역할을 수행하여 선출이나 쿼럼 없이도 높은 일관성을 확보할 수 있습니다.
배포는 S3 호환 스토리지와 설정 파일만으로 완료됩니다. 사용자는 기반 인증을 설정하고, `walgit serve` 명령어로 서버를 구동하며, 푸시를 통해 새로운 저장소를 생성할 수 있습니다. walgit은 원격 리더(remote reader) 기능을 통해 패크가 인스턴스에 담기지 않는 대용량 저장소의 참조 및 웹 페이지 서비스도 제공하고, 클론 데이터를 정적 파일로 처리하는 `bundle-uri` 기능으로 서버 부하를 줄입니다.
용어 풀이
- API
- 프로그램끼리 기능을 주고받는 약속된 창구. AI 모델은 보통 API로 불러 써요.
- 토큰
- AI 모델이 글을 처리하는 단위. 단어보다 작은 조각이며 사용량과 요금을 셀 때 기준이 돼요.