GitHub, 저장소 쓰기 잠금을 참조 단위로 바꿔 Azure 이전 및 처리량 향상
The bridge to agent-scale Git infrastructure
GitHub가 저장소 전체 단위로 걸리던 쿼럼 잠금을 개별 참조(reference) 단위로 좁혀, 가장 바쁜 저장소까지 Azure로 옮길 수 있는 다리 구조를 공개했다. 이 변경으로 서로 다른 참조에 대한 쓰기가 동시에 진행될 수 있게 되어 저장소의 쓰기 처리량 상한이 올라간다. 기존 쿼럼은 쓰기 하나를 커밋할 때 정상 복제본 전부의 응답(타임아웃까지)을 기다리고 쓰기 동안 저장소 전체에 잠금을 걸었다. 두 지역 사이의 왕복 지연이 약 25ms라 가장 느린 복제본이 모든 쓰기의 지연과 처리량 상한을 정했다. 이를 참조별 직렬화로 바꾸면 서로 다른 브랜치에 대한 쓰기는 기다리지 않고 동시에 진행된다. 내부 테스트에서 실제에 가까운 트래픽으로 측정했을 때 서로 다른 참조에 대한 쓰기 처리량이 3~4배 높았고 지연은 더 낮았다. 기사에 따르면 대부분 저장소는 읽기가 쓰기보다 100~1,000배 많다. 저장소 데이터를 Azure Blob Storage에 내구성 있게 저장하고 쓰기마다 갱신하면, 읽기 트래픽을 쓰기 쿼럼에서 분리해 각각 따로 확장할 수 있다고 설명했다.
서로 다른 브랜치에 쓰는 워크로드가 많은 저장소라면, 참조 단위 직렬화로 같은 Git 쓰기 요청이 기다리는 시간이 줄어든다는 점이 GitHub 인프라 설계의 핵심 변화다.
원문 출처
GitHub Blog