핵심 요약
GitHub 블로그 'The bridge to agent-scale Git infrastructure'에 따르면, 지난 1년 동안 Git 트래픽이 급증하고 자체 데이터 센터의 전력 용량 및 지리적 한계에 부딪히면서 99.99999%에 달하는 Git 저장소의 복제본이 자체 데이터 센터와 Azure 양쪽에 공존하게 되었습니다. 이 과정에서 데이터 센터와 Azure 간의 약 25ms에 달하는 왕복 지연 시간(round trip)과 기존 저장소 단위 쿼럼(quorum) 방식의 한계로 인해 가장 바쁜 잔여 저장소들의 이전이 지연되었습니다. 기존 구조에서는 쿼럼이 쓰기 작업을 수행할 때 저장소 전체에 락(lock)을 걸고 가장 느린 건강한 복제본의 응답을 기다리기 때문에, 네트워크 거리가 멀어지면 쓰기 처리량 한계가 급격히 떨어지는 문제가 있었습니다. GitHub는 첫 번째 원칙인 '조율 최소화(minimize coordination)'를 적용하여 저장소 단위의 락과 쿼럼 대신 개별 참조(reference) 단위로 직렬화 범위를 변경했습니다. 이에 따라 서로 다른 레퍼런스(예: 개발자와 에이전트들이 각자의 브랜치에 푸시하는 경우)에 대한 쓰기 작업은 서로 대기하지 않고 동시에 진행될 수 있게 되며, 내부 테스트 결과 서로 다른 레퍼런스에 대한 쓰기 처리량이 3~4배 향상되고 지연 시간이 감소했습니다. 두 번째 원칙인 '저장소와 컴퓨팅의 분리(decouple storage from compute)' 측면에서는, 읽기와 쓰기가 동일한 복제본을 공유하여 자원을 경쟁하던 문제를 해결하기 위해 Azure Blob Storage를 활용합니다. 객체 스토리지를 쿼럼의 가상 복제본(virtual replica)으로 참여시켜 쓰기 작업을 객체 스토리지에 스트리밍하는 방식으로 내구성을 확보하고, 향후 읽기 트래픽과 쓰기 컴퓨팅 자원을 독립적으로 확장할 수 있는 기반을 구축하고 있습니다.