En supposant que le temps de téléchargement (et donc l'utilisation de la bande passante) est votre facteur limitant, je ferais les suggestions suivantes:
Tout d'abord, choisissez les instances m1.large. Des trois «niveaux» de performances d'E / S (qui incluent la bande passante), les instances m1.large et m1.xlarge offrent toutes deux des performances d'E / S «élevées». Étant donné que votre tâche n'est pas liée au processeur, le moins cher d'entre eux sera le choix préférable.
Deuxièmement, votre instance pourra télécharger beaucoup plus rapidement que n'importe quel site peut servir des pages - ne téléchargez pas une seule page à la fois sur une instance donnée, exécutez la tâche simultanément - vous devriez pouvoir faire au moins 20 pages simultanément (bien que , Je suppose que vous pouvez probablement faire 50-100 sans difficulté). (Prenez l'exemple du téléchargement à partir d'un forum à partir de votre commentaire - c'est une page dynamique qui va prendre du temps au serveur à générer - et d'autres utilisateurs utilisent la bande passante de ce site, etc.). Continuez à augmenter la simultanéité jusqu'à ce que vous atteigniez les limites de la bande passante de l'instance. (Bien sûr, ne faites pas plusieurs demandes simultanées au même site).
Si vous essayez vraiment de maximiser les performances, vous pouvez envisager de lancer des instances dans des zones géographiquement appropriées pour minimiser la latence (mais cela nécessiterait de géolocaliser toutes vos URL, ce qui peut ne pas être pratique).
Une chose à noter est que la bande passante de l'instance est variable, parfois vous obtiendrez des performances plus élevées et d'autres fois vous obtiendrez des performances plus faibles. Sur les instances plus petites, la variation des performances est plus importante car les liaisons physiques sont partagées par plusieurs serveurs et n'importe lequel d'entre eux peut réduire votre bande passante disponible. Entre les instances m1.large, au sein du réseau EC2 (même zone de disponibilité), vous devriez obtenir un débit gigabit théorique proche.
En général, avec AWS, il est presque toujours plus efficace d'utiliser une instance plus grande que plusieurs instances plus petites (sauf si vous examinez spécifiquement quelque chose comme le basculement, etc. où vous avez besoin de plusieurs instances).
Je ne sais pas ce que votre configuration implique, mais quand j'ai déjà tenté cela (entre 1 et 2 millions de liens, mis à jour périodiquement), mon approche était de maintenir une base de données des liens en ajoutant de nouveaux liens tels qu'ils ont été trouvés et en forçant les processus pour gratter et analyser les pages. Une URL serait récupérée (au hasard) et marquée comme en cours sur la base de données, le script téléchargerait la page et en cas de succès, marquerait l'url comme téléchargée dans la base de données et enverrait le contenu à un autre script qui analysait la page, de nouveaux liens ont été ajoutés à la base de données au fur et à mesure de leur découverte. L'avantage de la base de données ici était la centralisation - plusieurs scripts pouvaient interroger la base de données simultanément et (tant que les transactions étaient atomiques), on pouvait être sûr que chaque page ne serait téléchargée qu'une seule fois.
Quelques points supplémentaires à mentionner - il y a des limites (je crois 20) sur le nombre d'instances à la demande que vous pouvez avoir en même temps - si vous prévoyez de dépasser ces limites, vous devrez demander à AWS d'augmenter votre compte. limites. Il serait beaucoup plus économique pour vous d'exécuter des instances ponctuelles et d'augmenter vos nombres lorsque le prix au comptant est bas (peut-être une instance à la demande pour tout organiser et les autres instances ponctuelles).
Si le temps est plus prioritaire que le coût pour vous, les instances de calcul de cluster offrent une bande passante de 10 Gbit / s et devraient fournir la plus grande bande passante de téléchargement.
Récapitulatif: essayez quelques grandes instances (au lieu de nombreuses petites instances) et exécutez plusieurs téléchargements simultanés sur chaque instance - ajoutez plus d'instances si la bande passante est limitée, passez à des instances plus grandes si vous vous trouvez lié à la CPU / mémoire.