pile·
인프라 / DevOps·vercel-blogVercel Blog·

Vercel Sandbox 스냅샷 복구 최적화 — 40초에서 서브-초로

Vercel 팀이 Sandbox 파일시스템 스냅샷 복구 성능 문제를 해결하는 과정을 다룬다. 초기 구현은 안정성 우선으로 순차 처리였고 p75 복구 시간이 40초를 넘겼다. 병렬화와 NVMe LRU 캐시를 단계적으로 적용해 최종적으로 p75 서브-초(sub-second), p95 10초 미만을 달성했다.

핵심 포인트
  • p75 복구 시간 40초+ → sub-second, p95 50초 → 10초 미만으로 개선
  • S3 range request 병렬 다운로드(AWS Go SDK transfermanager)로 2~5배 속도 향상
  • Go goroutine 기반 압축 해제 병렬화로 추가 2~4배 개선
  • S3 스트림을 압축 해제 단계로 직접 파이프해 중간 디스크 쓰기 제거 → 2배 추가 단축
  • NVMe LRU 캐시 도입 후 캐시 히트율 95% 이상 — 콜드 패스 최적화의 핵심 돌파구
상세 정리
  • 배경: Vercel Sandbox는 매 실행마다 파일시스템 스냅샷을 복구하는 방식으로 동작. 초기에는 신뢰성을 우선해 순차 처리로 구현했다.
  • 문제 발견: p75 복구 시간 40초 이상, p95는 50초 — 사용자 경험에 직접 영향을 줬다.
  • 스냅샷 포맷: 원시 디스크 이미지(.img, 수 GB)와 압축된 VHS(Vercel Hive Snapshot) 두 가지. S3에 저장하며 압축은 네트워크 전송량 절감에 필수.
  • 최적화 1 — S3 병렬 다운로드: 순차 다운로드를 AWS Go SDK transfermanager의 range request 기반 병렬 다운로드로 교체. 청크 크기와 동시성 조합 실험으로 2~5배 향상.
  • 최적화 2 — 압축 해제 병렬화: 프레임 단위 순차 처리에서 "디코더 1개 + N개 decompression goroutine" 방식으로 전환. 2~4배 추가 향상.
  • 최적화 3 — 스트림 파이프: S3 다운로드 스트림을 압축 해제 단계로 직접 연결해 중간 디스크 쓰기 단계 제거. 엔드투엔드 복구 시간 2배 추가 단축.
  • 핵심 돌파구 — NVMe LRU 캐시: 메탈 인스턴스의 NVMe 스토리지 유휴 용량을 LRU 기반 캐시로 활용. 여러 샌드박스가 동일 베이스 스냅샷을 재사용하는 패턴을 포착한 결과.
  • 캐시 성과: 히트율 95% 이상. 고객 대부분이 동일 베이스 스냅샷을 반복 사용하는 패턴 확인.
  • 최종 지표: p75 40초+ → sub-second, p95 50초 → 10초 미만. 현재 Automatic Persistence 베타를 지원 중.
  • 향후 과제: 캐시 어피니티 라우팅 검토 중. "장기적으로는 콜드 패스 자체를 충분히 빠르게 만들어 캐싱이 보너스가 되도록" 하는 게 목표.
왜 읽나대용량 파일 스냅샷·복구 성능을 최적화해야 하는 인프라/백엔드 엔지니어에게 Go 기반 병렬화와 LRU 캐시 전략의 실전 레퍼런스.
vercel-blog
Vercel Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·vercel-blogVercel Blog·

    Vercel CLI 드라이런 배포로 실제 배포 전 구성 미리 확인하기

    Vercel CLI v54.17.2부터 vercel deploy --dry 명령으로 실제 파일 업로드 없이 배포 구성을 미리 검사할 수 있다. 프레임워크 감지 결과, 포함/제외 파일 목록, 디렉터리 크기 분포, 콘텐츠 해시까지 사전에 확인하고 나서 배포를 결정할 수 있어 의도치 않은 배포 실패를 예방한다.

    #deployment#ci-cd#vercel-cli+1