피드로 돌아가기
Node.js BlogBackend
원문 읽기
npm Registry가 2013년 11월 3회 다운타임(총 약 8시간)을 겪으면서 단일 CouchDB 서버에서 다중 마스터 구조로 전환 및 첨부파일 분리 계획 수립
Keeping The npm Registry Awesome
AI 요약
Context
npm Registry는 2013년 11월 4일, 13일, 15일에 각각 다운타임을 경험했으며, 근본 원인은 CouchDB 서버의 하드웨어 리소스 부족과 /registry 데이터베이스에 저장된 방대한 첨부파일로 인한 응답 불가 상태였다. 같은 기간 월 다운로드는 1,135만 건(2012년 11월)에서 1억 1,460만 건(2013년 10월)으로 10배 증가하면서 단일 서버 아키텍처의 한계가 노출되었다.
Technical Solution
- 단일 마스터 CouchDB에서 다중 마스터(Multi-Master) CouchDB 구조로 전환: 지속적 복제를 통한 2개 이상 CouchDB 서버 운영
- /registry 데이터베이스 압축(Compaction) 수행: 매주 약 10GB씩 증가하는 디스크 용량 관리
- 핫 스페어 복제 서버 추가 배포: 필요시 장애 대응을 위한 상시 대기 레플리카 운영
- 첨부파일(패키지 타르볼) 분리 계획: CouchDB에서 Joyent Manta 스토리지 서비스로 이전 및 MaxCDN을 통한 CDN 제공
- www.npmjs.org와 registry.npmjs.org 분리: 별도 레플리카를 추가하여 웹 인터페이스가 레지스트리 장애의 영향을 받지 않도록 아키텍처 분리
Key Takeaway
급속한 트래픽 증가 시 단일 서버 기반 아키텍처는 반드시 다중 마스터 복제와 데이터 분리 전략으로 전환해야 하며, 특히 대규모 바이너리 첨부파일은 데이터베이스에서 분리하여 별도 스토리지 및 CDN으로 관리하는 것이 I/O 부하 감소의 핵심이다.
실천 포인트
CouchDB 기반 패키지 레지스트리나 대규모 첨부파일을 저장하는 서비스를 운영할 때, 지속적 복제를 갖춘 다중 마스터 구조를 초기에 도입하고, 주기적 데이터베이스 압축을 자동화하며, 바이너리 콘텐츠를 전용 객체 스토리지로 분리하면 장애 시간을 최소화하고 초당 다운로드 처리량을 향상시킬 수 있다.