Ada beberapa faktor kunci yang menentukan throughput dari EC2 ke S3:
- Ukuran file - file yang lebih kecil membutuhkan jumlah permintaan yang lebih besar dan lebih banyak overhead dan transfer lebih lambat. Keuntungan dengan filesize (ketika berasal dari EC2) dapat diabaikan untuk file yang lebih besar dari 256kB. (Padahal, transfer dari lokasi terpencil, dengan latensi lebih tinggi, cenderung terus menunjukkan peningkatan yang cukup besar hingga antara 1MiB dan 2MiB).
- Jumlah utas paralel - utas unggahan tunggal biasanya memiliki keseluruhan yang cukup rendah - seringkali di bawah 5MiB / s. Throughput meningkat dengan jumlah utas bersamaan, dan cenderung memuncak antara 64 dan 128 utas. Perlu dicatat bahwa instance yang lebih besar mampu menangani lebih banyak thread bersamaan.
- Ukuran instance - Sesuai spesifikasi instance , instans yang lebih besar memiliki sumber daya yang lebih khusus, termasuk alokasi bandwidth jaringan yang lebih besar (dan lebih sedikit variabel) (dan I / O secara umum - termasuk membaca dari disk ephemeral / EBS - yang terpasang di jaringan. nilai angka untuk setiap kategori adalah:
- Sangat Tinggi: Teoretis: 10Gbps = 1250MB / s; Realistis: 8,8Gbps = 1100MB / s
- Tinggi: Teoretis: 1Gbps = 125MB / s; Realistis: 750Mbps = 95MB / s
- Sedang: Teoritis: 250Mbps; Realistis: 80Mbps = 10MB / s
- Rendah: Teoretis: 100Mbps; Realistis: 10-15Mbps = 1-2MB / s
Dalam kasus transfer data dalam jumlah besar, mungkin secara ekonomis praktis untuk menggunakan instance komputasi cluster, karena keuntungan efektif dalam throughput (> 10x) lebih dari perbedaan dalam biaya (2-3x).
Meskipun ide-ide di atas cukup logis (meskipun, per-thread cap mungkin tidak), cukup mudah untuk menemukan tolok ukur yang mendukungnya. Satu yang sangat rinci dapat ditemukan di sini .
Menggunakan antara 64 dan 128 paralel (simultan) mengunggah objek 1MB harus menjenuhkan uplink 1Gbps bahwa m1.xlarge memiliki dan bahkan harus menjenuhkan uplink 10Gbps dari sebuah cluster compute (cc1.4xlarge) instance.
Meskipun cukup mudah untuk mengubah ukuran instance, dua faktor lainnya mungkin lebih sulit untuk dikelola.
- Ukuran file biasanya diperbaiki - kami tidak dapat menggabungkan file bersama di EC2 dan memisahkannya di S3 (jadi, tidak banyak yang bisa kami lakukan tentang file kecil). Namun file-file besar, kita dapat dipisah di sisi EC2 dan berkumpul kembali di sisi S3 (menggunakan unggahan multi-bagian S3). Biasanya, ini menguntungkan untuk file yang lebih besar dari 100MB.
- Utas paralel agak sulit untuk dipenuhi. Pendekatan paling sederhana adalah menulis pembungkus untuk beberapa skrip unggahan yang ada yang akan menjalankan banyak salinan sekaligus. Pendekatan yang lebih baik menggunakan API secara langsung untuk mencapai sesuatu yang serupa. Perlu diingat bahwa kuncinya adalah permintaan paralel, tidak sulit untuk menemukan beberapa skrip potensial, misalnya:
- s3cmd-modifikasi - cabang dari versi awal s3cmd yang menambahkan fungsi ini, tetapi belum diperbarui dalam beberapa tahun.
- s3-parallel-put - skrip python yang cukup baru yang bekerja dengan baik