EC2에서 S3까지의 처리량을 결정하는 몇 가지 주요 요소가 있습니다.
- 파일 크기-파일이 작을수록 더 많은 수의 요청과 더 많은 오버 헤드 및 전송이 필요합니다. 파일 크기가 EC2에서 발생했을 때의 이득은 256kB보다 큰 파일에서는 무시할 수 있습니다. (대기 시간이 긴 원격 위치에서 전송하면 1MiB와 2MiB 사이에서 계속 눈에 띄게 개선되는 경향이 있습니다).
- 병렬 스레드 수-단일 업로드 스레드는 일반적으로 전체적으로 상당히 낮으며 종종 5MiB / s 미만입니다. 동시 스레드 수에 따라 처리량이 증가하고 64-128 스레드 사이에서 피크가 발생하는 경향이 있습니다. 더 큰 인스턴스는 더 많은 수의 동시 스레드를 처리 할 수 있습니다.
- 인스턴스 크기- 인스턴스 사양에 따라 더 큰 인스턴스에는 네트워크 대역폭에 대한 더 큰 (그리고 덜 가변적 인) 할당 및 일반적으로 네트워크에 연결된 임시 / EBS 디스크에서 읽는 것을 포함하여 I / O가 더 많은 전용 리소스가 있습니다. 각 카테고리의 숫자 값은 다음과 같습니다.
- 매우 높음 : 이론적 : 10Gbps = 1250MB / s; 현실적 : 8.8Gbps = 1100MB / s
- 높음 : 이론적 : 1Gbps = 125MB / s; 현실적 : 750Mbps = 95MB / s
- 보통 : 이론적 : 250Mbps; 현실적 : 80Mbps = 10MB / s
- 낮음 : 이론적 : 100Mbps; 현실적 : 10-15Mbps = 1-2MB / s
대량의 데이터를 전송하는 경우 처리량의 유효 이득 (> 10x)이 비용 차이 (2-3x)보다 크므로 클러스터 컴퓨팅 인스턴스를 사용하는 것이 경제적으로 실용적 일 수 있습니다.
위의 아이디어는 상당히 논리적이지만 (스레드 당 캡이 아닐 수도 있지만) 백업하는 벤치 마크를 찾는 것은 매우 쉽습니다. 하나 특히 자세한 하나를 찾을 수 있습니다 여기에 .
1MB 객체의 64 ~ 128 개의 병렬 (동시) 업로드를 사용하면 m1.xlarge에있는 1Gbps 업 링크가 포화되고 클러스터 컴퓨팅 (cc1.4xlarge) 인스턴스의 10Gbps 업 링크가 포화되어야합니다.
인스턴스 크기를 변경하기는 쉽지만 다른 두 가지 요소는 관리하기가 어려울 수 있습니다.
- 파일 크기는 일반적으로 고정되어 있습니다. EC2에서 파일을 결합하여 S3에서 분할 할 수는 없습니다 (따라서 작은 파일에 대해서는 할 수있는 것이 많지 않습니다). 그러나 큰 파일은 EC2 측에서 분리하여 S3 측에서 재 조립할 수 있습니다 (S3의 멀티 파트 업로드 사용). 일반적으로 이것은 100MB보다 큰 파일에 유리합니다.
- 병렬 스레드는 제공하기가 조금 더 어렵습니다. 가장 간단한 방법은 한 번에 여러 복사본을 실행하는 기존 업로드 스크립트에 대한 래퍼를 작성하는 것입니다. 더 나은 접근법은 API를 직접 사용하여 유사한 것을 달성합니다. 이 키는 병렬 요청이라는 점을 명심하면 다음과 같은 여러 가지 잠재적 인 스크립트를 찾는 것이 어렵지 않습니다.