대규모 S3 데이터 마이그레이션은 여러 가지 기술적 및 운영적 난관에 직면했습니다. 이 프로젝트의 핵심 도전 과제와 이를 해결하기 위한 전략은 다음과 같습니다.
주요 도전 과제
-
비용 및 AWS 제약: S3의 높은 egress 비용과 API 요청 비용은 데이터를 외부로 옮기는 데 큰 장벽이었습니다. 또한, 버킷 파티션당 초당 5,500개의 GET 요청으로 제한되는 읽기 속도는 대량의 작은 객체를 처리할 때 병목 현상을 유발했습니다.
-
데이터 규모: 약 50억 개의 객체와 5페타바이트에 달하는 데이터가 수백 개의 버킷에 분산되어 있어, 일반적인 파일 복사 도구로는 효율적인 처리가 불가능했습니다.
-
시간 제약: AWS로부터 egress 비용 면제를 받기 위해 90일 이내에 모든 데이터를 옮겨야 하는 엄격한 계약 조건이 있었습니다.
핵심 기술 및 전략
-
커스텀 Rails 애플리케이션 (Nostos): 마이그레이션 작업을 총괄하고 모니터링하기 위해 Rails 애플리케이션을 개발했습니다. ActiveJob과 Solid Queue를 활용하여 작업을 분산하고, 상태 추적, 오류 처리 및 재시도 로직을 구현하여 작업의 안정성을 높였습니다.
-
데이터 인벤토리 및 분할: 대규모 버킷 목록을 효율적으로 가져오기 위해 S3 Inventory Reports를 활용했습니다. 이 보고서를 DuckDB와 결합하여, 대용량 데이터를 메모리에 올리지 않고도 Parquet 파일을 스트리밍 방식으로 처리하여 효율적으로 작업 배치로 분할했습니다. 이는 수작업으로 코드를 작성할 필요 없이 데이터 분할 작업을 자동화하는 데 결정적인 역할을 했습니다.
-
고성능 스토리지 및 네트워크: 새로운 스토리지 시스템으로는 Pure Storage Flashblade를 도입하여 높은 쓰기 속도와 메타데이터 처리 성능을 확보했습니다. 또한, 데이터 센터에 100기가비트 전용 네트워크 연결을 구축하여 S3로부터의 데이터 전송에 대한 대역폭 병목 현상을 최소화했습니다.
-
Rclone: 실제 데이터 복사 작업의 핵심 도구로 오픈소스 Rclone을 사용했습니다. Rclone은 체크섬 검증, 대역폭 및 메타데이터 작업 효율성, 그리고 뛰어난 복원력을 제공하여 안정적인 데이터 전송을 가능하게 했습니다. 37signals는 Flashblade를 Rclone의 공식 목적지로 추가하는 데 기여했습니다.
-
무중단 전략: 마이그레이션 기간 동안 S3와 새로운 스토리지 시스템에 동시에 데이터를 쓰는 듀얼 라이트(dual writes) 방식을 채택하여 서비스 중단 없이 데이터 일관성을 유지했습니다. 이어서 엄격한 검증 및 재조정(reconciliation) 절차를 통해 모든 데이터가 정확하게 복사되었는지 확인했습니다.