2012-07-17 3 views
3

Je suis actuellement nouveau sur AWS. Et j'ai configuré 2 instances EC2.Instance AWS MongoDB EC2 en tant qu'hôte local avec l'instance d'application EC2

Un pour ma base de données MongoDB et un autre pour mon application. J'utilise pymongo pour établir la connexion. Mais si envoyer des données à travers les instances à chaque fois, cela prend trop de temps. Je voudrais savoir s'il est possible d'avoir l'instance mongoDB comme localhost pour l'application, en utilisant des groupes ou je ne sais pas, pour obtenir de meilleures performances.

Ou S'il est préférable de mettre la base de données sur la même instance que mon application et obtenir plus d'EBS.

Répondre

3

Assurez-vous de connaître l'emplacement de votre goulot d'étranglement.

Si les deux instances se trouvent dans la même zone de disponibilité, la latence réseau ne devrait pas être le problème de performances le plus important. En fait, si vous avez des instances qui sont au moins grand ... en raison de la meilleure NIC ... la latence du réseau devrait être un non-problème. Pour en être certain, mesurez l'utilisation de votre réseau à l'aide d'un outil de surveillance.

Si l'un de vos jeux de documents (documents MongoDB utilisés avec n'importe quelle fréquence) ne peut pas entrer dans la RAM de l'instance, cela signifie que vous touchez EBS. EBS est très, très lent par rapport à ce dont MongoDB a besoin. J'ai mesuré un seul volume EBS en utilisant iozone récemment et trouvé le volume EBS à moitié moins rapide que le disque dur rotatif de mon ordinateur portable.

Vous pouvez améliorer considérablement les performances EBS par striping multiple EBS volumes dans une configuration RAID logicielle.

La dernière ligne lorsque vous exécutez MongoDB sur AWS est que vous avez besoin de suffisamment de RAM pour contenir les documents MongoDB que vous allez toucher avec n'importe quelle fréquence.

+0

Je vais essayer de rayonner plusieurs EBS et voir la différence, merci! – kschaeffler

0

J'ai une application en production qui utilise une instance de mongodb sur la même machine que le serveur web. Fonctionne bien pour moi, mais je n'ai pas besoin d'évolutivité pour le moment. Une instance est suffisante. Donc, pour répondre à votre question, assurez-vous que vous pouvez l'exécuter comme localhost. Cependant, si votre application est activée et que vous avez besoin de plusieurs instances ou d'une partition, vous devez également déployer des instances sur d'autres machines.

+0

Je ne préconiserais pas vraiment de courir sur 'localhost' à moins que vous ne soyez vraiment sûr que l'instance ne commencera pas à échanger. FourSquare est tombé en panne lorsque son jeu de travail MongoDB a cessé d'être installé dans la RAM, et exécuter des éléments autres que MongoDB sur une instance signifie simplement que la mémoire disponible pour MongoDB est inférieure. http://blog.foursquare.com/2010/10/05/so-that-was-a-bummer/ –

+0

Que voulez-vous dire que l'instance pourrait commencer à échanger? Est-ce que cela (swapping) ne se produirait pas non plus sur une instance EC2 autonome sur laquelle on héberge MongoDB? – Sid

+0

Bien sûr, mais si vous exécutez aussi Apache et d'autres choses sur la même case, vous commencerez à échanger plus tôt. MongoDB est vraiment, vraiment RAM affamé. –

Questions connexes