30 votes

Architecture d'une application PHP sur Amazon EC2

J'ai récemment vécu un flot de trafic sur un Facebook application que j'ai créé (surtout pour l'intérêt de l'enseignement, non pas avec l'intention de marketing)

Inutile de dire que je n'ai pas penser à l'évolutivité quand j'ai créé l'application. Je suis maintenant dans une position où mes maigres serveur virtuel hébergé par MediaTemple n'est pas le découpage à tous, et c'est vraiment à raw I/O de la machine. Depuis que ce projet a été aussi éduquer pour moi pour l'instant, j'ai pensé que je prendrais cela comme une occasion de comprendre les Amazon EC2 plate-forme.

L'application elle-même est créé en PHP (à l'aide de Zend Framework) avec un backend MySQL. J'ai utiliser la mise en cache des applications dans la mesure du possible avec memcached. J'ai passé le week-end en jouant autour de l'EC2, de le faire tourner des cas, installer les paquets que je veux, et le montage d'un volume EBS à une instance.

Mais quelle est la prochaine étape logique qui va donner de bons résultats pour l'évolutivité? Dois-je le feu jusqu'à une instance AMI pour la base de données MySQL et un pour le service Apache? Ou dois-je simplement reproduire les instances autant de fois que j'en ai besoin et puis faire un peu de tri de l'équilibrage de la charge sur l'extrémité avant? Idéalement, j'aimerais avoir une base de données centralisée parce que je fais des statistiques globales à travers toutes les lignes de la base de données, cependant, ce n'est pas un dur exigence (il y en a probablement certains spécifiques à l'application de solutions que je pouvais venir pour contourner ce)

Je sais que ce n'est probablement pas un simple réponse, de sorte que les opinions et les suggestions sont les bienvenues.

14voto

David Caunt Points 30636

Autant de questions - tous bons.

En termes de mise à l'échelle, vous avez quelques options.

La première est de commencer avec une seule boîte. Vous pouvez mettre à l'échelle en haut - avec un moteur plus puissant de la boîte. EC2 ont divers taille des instances. Cela implique une migration de serveur à chaque fois que vous voulez une boîte plus grande.

Plus facile est d'ajouter des serveurs. Vous pouvez commencer avec un seul exemple pour Apache et de MySQL. Puis, quand le trafic augmente, créer une instance distincte pour MySQL et le point votre candidature à cette nouvelle instance. Cela crée une belle couche entre l'application et la base de données. Il semble que cela est un bon point de départ en fonction de votre trafic.

Ensuite, vous aurez probablement besoin de plus de puissance d'application (serveurs web) ou plus d'alimentation de la base de données (MySQL cluster etc.). Vous pouvez avoir vos enregistrements DNS pointant vers un couple de l'avant boîtes exécutant un logiciel d'équilibrage de charge (essayez de Livre). Ces serveurs d'équilibrage de charge de distribuer les demandes de vos serveurs web. EC2 a Elastic Load Balancing qui est une alternative à la gestion de vous-même, et est probablement plus facile que je ne l'ai pas utilisé personnellement.

Autre chose d'être conscient de l' - EC2 a pas de stockage persistant. Vous avez à gérer des données persistantes-vous à l'aide de l'Elastic Block Store. Ce guide est un excellent tutoriel sur la façon de le faire, avec des sauvegardes automatiques.

Je recommande que vous achetez des instances réservées si vous décidez EC2 est la voie à suivre. Vous vous économiserez environ 50% plus de 3 ans!

Enfin, vous pourriez être intéressés par des services comme RightScale qui offrent des services de gestion à un coût. Il y a d'autres fournisseurs disponibles.

10voto

patcoll Points 680

La première étape est de séparer les préoccupations. J'avais scission avec un serveur MySQL et éventuellement un dédié memcached zone, en fonction de votre chargement est là. Alors je vais surveiller la mémoire et l'utilisation du PROCESSEUR sur chaque boîte et de voir où vous pouvez optimiser si possible. Cela peut être fait avec l'essaimage des nouveaux Médias Temple boîtes. Je voudrais aussi suggérer Slicehost pour moins cher, plus de développeur de solution respectueuse de l'environnement.

Certains plus faible budget de déploiement PHP optimisations:

  • Utilisation plus efficace de serveur web comme nginx pour gérer les fichiers statiques service puis reverse proxy application demande à une instance d'Apache
  • Mettre en œuvre PHP en FastCGI sur le dessus de nginx en utilisant quelque chose comme PHP-FPM, se débarrasser de Apache entièrement. Cela peut être une bonne alternative si votre Apache doit ne pas s'étendre bien au-delà de mod_rewrite et plus simple des modules Apache.

Si vous préférez un plus haut niveau, faites-le vous-même, vous voudrez peut-être vérifier Scalr (code à Google Code). Il vaut la peine de regarder la vidéo sur leur site web. C'installations d'un hébergement évolutif de l'environnement à l'aide d'Amazon EC2. La technologie est open source, donc vous pouvez le télécharger et le mettre en œuvre vous-même sur votre propre serveur de gestion. (Votre Media Temple de la boîte, peut-être?) Scalr a pré-construit AMIs (EC2 appareils) disponible pour certains cas d'utilisation courants.

  • web: Utilise nginx et ses nombreuses fonctionnalités: logiciel d'équilibrage de charge statique de service de fichiers, etc. Vous auriez probablement avoir un seul de ceux-ci, et il serait sans doute de mettre en œuvre une sorte de connexion à Amazon EBS, ou persistante solution de stockage, tel que mentionné par dcaunt.
  • application: Une application serveur avec Apache et PHP. Vous auriez probablement beaucoup de ces pays, et ils s'en créé automatiquement si plus de la charge nécessaire pour être manipulés. Ce type de serveur serait de conserver une copie de votre ZF app.
  • db: Un serveur de base de données avec MySQL. Encore une fois, vous auriez probablement beaucoup de ces pays, et plus esclave les instances sont créées automatiquement si plus de la charge nécessaire pour être manipulés.
  • memcached: Un dédié serveur memcache vous pouvez utiliser pour avoir centralisé de mise en cache, gestion de session, etc sur tous vos app instances.

Le Scalr option prendra sans doute un peu plus de modifications de la configuration, mais si vous sentez que votre mise à l'échelle des besoins d'accélérer rapidement, il peut être vaut le temps et d'efforts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X