OpenAI의 Git 확장, 병렬 푸시와 팩 재사용을 위한 Pando 구축

2 days ago 7

OpenAI가 Git 프로토콜과 기존 작업 방식을 유지하면서 동시 작업을 확장하는 새 저장소 백엔드 Pando를 구축해 모노레포 전체 개발에 적용함 저장소 전체의 시점 일관성 대신 인과적 일관성을 채택해 서로 다른 브랜치의 푸시를 병렬 처리하고, 개별 참조 업데이트에는 직렬 가능성을 보장함 클라이언트마다 팩파일을 새로 만드는 대신 기존 팩파일을 재사용하고 지역별 캐시에서 제공해 읽기 처리량을 확장함 프로덕션에서 푸시 지연 시간 중앙값을 약 80% 줄였으며, 하루 약 1페타바이트의 Git 데이터를 제공함 Codex와 함께 10주 만에 프로덕션에 도입했으며, 팩 다운로드와 검증, 관측 기능 등 Git 클라이언트 개선 사항을 업스트림에 기여하고 있음 Codex가 바꾼 소스 관리 시스템의 요구 Codex로 엔지니어가 병렬로 수행하는 작업이 늘면서 브랜치, 푸시, 병합뿐 아니라 개발 환경, 연구 작업, CI의 fetch와 clone도 증가함 한 엔지니어가 여러 변경을 동시에 CI에 올리고, 푸시 하나가 같은 커밋을 가져오는 여러 작업을 실행할 수 있음 지난해 말 무렵부터 기존 모노레포 시스템에 느린 fetch와 push, 병합 실패가 발생했으며, 신뢰성이 90% 아래로 떨어지는 때도 있었음 기존 Git 작업 방식을 유지하면서 백엔드를 재설계하고, OpenAI의 Git 저장소에서 만든 클라이언트 개선을 업스트림에 기여하기로 함 확장 목표는 서로 다른 브랜치에 대한 쓰기 병렬화와 다수 클라이언트에 같은 이력을 빠르게 전달하는 것임 브랜치별 업데이트를 독립적으로 조정하는 대신, 여러 브랜치를 읽을 때 서로 다른 시점의 상태를 볼 수 있음 팩파일을 재사용하는 대신, 클라이언트가 이미 가진 일부 객체를 다시 다운로드할 수 있음 Git의 객체, 참조와 복제 조건 Git 저장소는 객체와 참조(ref) 를 함께 관리함 객체는 blob, tree, commit, tag로 구성되며, blob은 파일 내용, tree는 이름과 파일/하위 디렉터리의 연결을 저장함 commit은 루트 tree와 0개 이상의 부모 commit을 가리켜 이력을 구성함 객체는 유형과 내용의 해시로 식별되는 불변 데이터이므로, 파일 변경 시 새 blob을 만들고 변경되지 않은 파일과 디렉터리는 기존 객체를 재사용함 브랜치와 태그는 커밋을 가리키는 참조이며, 브랜치에 커밋하면 해당 참조가 새 커밋을 가리키도록 바뀜 객체 그래프에서는 변경된 파일만 새 객체로 교체하고 나...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵