tutoriales tutorial services precios espaƱol aws php zend-framework amazon-ec2

php - tutorial - aws registration



Arquitectura de una aplicaciĆ³n PHP en Amazon EC2 (2)

El primer paso es separar las preocupaciones. Me separaría con un servidor MySQL por separado y posiblemente una caja de memcached dedicada, dependiendo de qué tan alta esté tu carga allí. Luego controlaría la memoria y el uso de la CPU en cada cuadro y vería dónde puede optimizar, siempre que sea posible. Esto se puede hacer girando los nuevos cuadros de Media Temple. También sugeriría Slicehost para una alternativa más barata y más amigable para los desarrolladores.

Algunas más optimizaciones de implementación PHP de bajo presupuesto:

  • Usar un servidor web más eficiente como nginx para manejar la entrega de archivos estáticos y luego revertir solicitudes de aplicaciones proxy a una instancia de Apache por separado
  • Implementa PHP con FastCGI encima de nginx usando algo como PHP-FPM, eliminando por completo a Apache. Esta puede ser una gran alternativa si sus necesidades de Apache no mod_rewrite más allá de mod_rewrite y módulos de Apache más simples.

Si prefiere un enfoque de alto nivel y hágalo usted mismo, es recomendable que consulte Scalr ( código en Google Code ). Vale la pena ver el video en su sitio web. Ofrece un entorno de alojamiento escalable con Amazon EC2. La tecnología es de código abierto, por lo que puede descargarla e implementarla usted mismo en su propio servidor de administración. (¿Su caja de Media Temple, quizás?) Scalr tiene AMI (aparatos EC2) preconstruidos disponibles para algunos casos de uso común.

  • web : utiliza nginx y sus muchas capacidades: equilibrio de carga de software, servicio de archivos estáticos, etc. Probablemente solo tenga uno de estos, y probablemente implemente algún tipo de conexión con EBS de Amazon, o solución de almacenamiento persistente, como se menciona en dcaunt.
  • aplicación : un servidor de aplicaciones con Apache y PHP. Probablemente tenga muchos de estos y se crearán automáticamente si se necesita manejar más carga. Este tipo de servidor contiene copias de su aplicación ZF.
  • db : Un servidor de base de datos con MySQL. Nuevamente, probablemente tenga muchos de estos y se crearán más instancias de esclavo automáticamente si se necesita manejar más carga.
  • memcached : un servidor de memcached dedicado que puede usar para tener almacenamiento en caché centralizado, administración de sesión, etc. en todas las instancias de su aplicación .

La opción Scalr probablemente requerirá más cambios de configuración, pero si cree que su escala necesita acelerarse rápidamente, puede valer la pena el tiempo y el esfuerzo.

Recientemente experimenté una avalancha de tráfico en una aplicación de Facebook que creé (principalmente por el bien de la educación, no con ninguna intención de comercialización)

Huelga decir que no pensé en la escalabilidad cuando creé la aplicación. Ahora estoy en una posición en la que mi exiguo servidor virtual alojado por MediaTemple no lo está cortando, y realmente se trata de E / S en bruto de la máquina. Dado que este proyecto me ha sido tan educativo hasta ahora, pensé que tomaría esto como una oportunidad para comprender la plataforma Amazon EC2.

La aplicación en sí se crea en PHP (utilizando Zend Framework) con un back-end MySQL. Utilizo el almacenamiento en caché de la aplicación siempre que sea posible con memcached. Pasé el fin de semana jugando con EC2, creando instancias, instalando los paquetes que deseo y montando un volumen de EBS en una instancia.

¿Pero cuál es el próximo paso lógico que va a dar buenos resultados para la escalabilidad? ¿Arranco una instancia AMI para MySQL y otra para el servicio Apache? ¿O acabo de replicar las instancias tantas veces como las necesito y luego hago algún tipo de equilibrio de carga en la interfaz? Idealmente, me gustaría tener una base de datos centralizada porque agrego estadísticas en todas las filas de la base de datos, sin embargo, este no es un requisito difícil (probablemente haya algunas soluciones específicas de aplicaciones que podría encontrar para solucionar esto)

Sé que probablemente esta no sea una respuesta directa, por lo que las opiniones y sugerencias son bienvenidas.


Tantas preguntas, todas buenas.

En términos de escala, tienes algunas opciones.

El primero es comenzar con una sola caja. Puede escalar hacia arriba, con una caja más poderosa. EC2 tiene varias instancias de tamaño. Esto implica una migración de servidor cada vez que desea una caja más grande.

Más fácil es agregar servidores. Puede comenzar con una sola instancia para Apache y MySQL. Luego, cuando el tráfico aumente, cree una instancia separada para MySQL y apunte su aplicación a esta nueva instancia. Esto crea una buena capa entre la aplicación y la base de datos. Parece que este es un buen punto de partida basado en su tráfico.

A continuación, probablemente necesite más potencia de aplicación (servidores web) o más potencia de base de datos (clúster MySQL, etc.). Puede hacer que sus registros DNS apunten a un par de recuadros frontales con algún programa de equilibrio de carga (pruebe Pound ). Estos servidores de equilibrio de carga distribuyen solicitudes a sus servidores web. EC2 tiene Elastic Load Balancing, que es una alternativa para gestionarlo usted mismo, y probablemente sea más fácil, no lo he usado personalmente.

Algo más que debe tener en cuenta: EC2 no tiene almacenamiento persistente . Tienes que administrar los datos persistentes tú mismo usando Elastic Block Store. Esta guía es un excelente tutorial sobre cómo hacer esto, con copias de seguridad automatizadas.

Le recomiendo que compre algunas instancias reservadas si decide que EC2 es el camino a seguir. ¡Te ahorrarás un 50% en 3 años!

Finalmente, puede que le interesen servicios como RightScale que ofrecen servicios de gestión a un costo. Hay otros proveedores disponibles.