정의
- S3 버킷에 단일 객체를 여러 부분의 집합으로 업로드하는 기능
- 각 부분은 객체 데이터의 연속적인 부분, 이러한 객체 부분은 독립적으로 그리고 임의의 순서로 업로드 가능
- 부분의 전송이 실패할 경우 다른 부분에 영향을 주지 않고도 해당 부분을 재전송
- 일반적으로 객체 크기가 100MB에 근접할 경우, 단일 작업에서 객체를 업로드하는 대신 멀티파트 업로드 사용을 고려
그림 1, Multipart Upload 과정
사용 이유
- 개선된 처리량 개선
- 네트워크 문제로부터 빠른 복구
: 단위 업로드 파일 용량이 작아져 네트워크 오류로 인한 복구에 용이
- 객체 업로드 일시 중지 및 재개
: 객체 부분을 장시간에 걸쳐 업로드할 수 있습니다. 일단 멀티파트 업로드가 시작되면 제한 시간이 없습니다. 멀티파트 업로드를 명시적으로 완료하거나 중단해야 합니다.
- 최종 객체 크기를 알기 전에 업로드를 시작
: 데이터를 업로드하는 사용자 입장에서 전송할 데이터를 미리 알고 메모리나 디스크에 올릴 것인데, 미리 알 필요가 없고 단위 전송 데이터만 메모리나 디스크에 올리게 되어 리소스 사용량이 줄어들 수 있음, 효율적임
: 스트리밍 환경에서 사용했을 때 효율적인 구조
사용 환경
- 안정적인 높은 대역폭 네트워크: 멀티 스레드 성능을 위해 여러 객체 부분을 동시에 업로드함으로써 대역폭 사용을 극대화
- 불규칙한(불안정한) 네트워크: 업로드가 다시 시작되는 것을 방지하여 네트워크 오류에 대한 복원력 높임
사용 예시
- 수집하는 데이터의 평균 볼륨은 500GB, 최대한 빨리 데이터 집계...
정리
- 데이터를 여러 단위 파일로 쪼개서 S3에 병렬적으로 데이터 전송 및 저장하는 기능
- 비교적 큰 객체 파일(100MB 이상)일 때 사용을 고려, 네트워크 오류에 대한 복원력이 높으며 병렬적인 네트워크 전송으로 전송 속도가 빠름
출처
정의, 사용 이유, 사용 환경 내용 참고: https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/mpuoverview.html
그림 1: https://www.linkedin.com/pulse/uploading-large-objects-amazon-s3-using-multipart-upload-nair/