Bekerja dengan asumsi bahwa waktu pengunduhan (dan karenanya penggunaan bandwidth) adalah faktor pembatas Anda, saya akan membuat saran berikut:
Pertama, pilih m1.large instances. Dari tiga 'level' kinerja I / O (yang termasuk bandwidth), instance m1.large dan m1.xlarge keduanya menawarkan kinerja I / O 'tinggi'. Karena tugas Anda tidak terikat CPU, yang paling murah di antaranya akan menjadi pilihan yang lebih disukai.
Kedua, instance Anda akan dapat mengunduh jauh lebih cepat daripada situs mana pun dapat melayani halaman - jangan mengunduh satu halaman sekaligus pada contoh yang diberikan, jalankan tugas secara bersamaan - Anda harus dapat melakukan setidaknya 20 halaman secara bersamaan (walaupun , Saya kira Anda mungkin dapat melakukan 50-100 tanpa kesulitan). (Ambil contoh pengunduhan dari forum dari komentar Anda - itu adalah halaman dinamis yang akan mengambil waktu server untuk menghasilkan - dan ada pengguna lain yang menggunakan bandwidth situs, dll.). Terus tingkatkan konkurensi hingga Anda mencapai batas bandwidth instance. (Tentu saja, jangan membuat beberapa permintaan secara bersamaan ke situs yang sama).
Jika Anda benar-benar mencoba memaksimalkan kinerja, Anda dapat mempertimbangkan untuk meluncurkan instance di zona yang sesuai secara geografis untuk meminimalkan latensi (tetapi itu akan mensyaratkan geolokasi semua URL Anda, yang mungkin tidak praktis).
Satu hal yang perlu diperhatikan adalah bahwa bandwidth misalnya adalah variabel, kadang-kadang Anda akan mendapatkan kinerja yang lebih tinggi, dan pada saat lain Anda akan mendapatkan kinerja yang lebih rendah. Pada contoh yang lebih kecil, variasi dalam kinerja lebih signifikan karena tautan fisik dibagi oleh lebih banyak server dan yang mana saja dapat mengurangi bandwidth yang tersedia. Antara instance m1.large, dalam jaringan EC2 (zona ketersediaan yang sama), Anda harus mendekati throughput gigabit teoretis.
Secara umum, dengan AWS, hampir selalu lebih efisien untuk menggunakan instance yang lebih besar sebagai lawan dari beberapa instance yang lebih kecil (kecuali Anda secara khusus melihat sesuatu seperti failover, dll. Di mana Anda memerlukan banyak instance).
Saya tidak tahu apa yang dibutuhkan oleh pengaturan Anda, tetapi ketika saya sebelumnya telah mencoba ini (antara 1 dan 2 juta tautan, diperbarui secara berkala), pendekatan saya adalah mempertahankan basis data tautan yang menambahkan tautan baru saat ditemukan, dan proses forking untuk mengikis dan mengurai halaman. Sebuah URL akan diambil (secara acak) dan ditandai sebagai sedang berlangsung di database, skrip akan mengunduh halaman dan jika berhasil, tandai url yang diunduh dalam database dan mengirimkan konten ke skrip lain yang menguraikan halaman, tautan baru ditambahkan ke database ketika mereka ditemukan. Keuntungan dari database di sini adalah sentralisasi - banyak skrip dapat meminta database secara bersamaan dan (selama transaksi bersifat atomik) orang dapat yakin bahwa setiap halaman hanya akan diunduh satu kali.
Beberapa poin tambahan menyebutkan - ada batasan (saya percaya 20) pada jumlah instance berdasarkan permintaan yang dapat Anda jalankan pada satu waktu - jika Anda berencana untuk melampaui batas itu, Anda akan perlu meminta AWS untuk meningkatkan akun Anda batas. Akan jauh lebih ekonomis bagi Anda untuk menjalankan instance spot, dan untuk meningkatkan angka Anda ketika harga spot rendah (mungkin satu instance berdasarkan permintaan untuk menjaga semuanya terorganisir, dan sisanya, instance spot).
Jika waktu adalah prioritas lebih tinggi daripada biaya untuk Anda, contoh komputasi cluster menawarkan bandwidth 10Gbps - dan akan menghasilkan bandwidth unduhan terbesar.
Rekap: coba beberapa instance besar (daripada banyak instance kecil) dan jalankan beberapa unduhan bersamaan pada setiap instance - tambahkan lebih banyak instance jika Anda menemukan bandwidth terbatas, pindahkan ke instance lebih besar jika Anda menemukan diri Anda terikat CPU / memori.