Ejecutar Magento en un entorno de AWS

54

Hospedar Magento, como todos saben, no es como hospedar otras aplicaciones PHP. ¿Qué tan factible es ejecutar Magento en un entorno de Amazon Web Services en 2013?

¿Qué combinación mágica de servicios de AWS tiene sentido usar con Magento? ¿Qué niveles son los valores predeterminados inteligentes para una tienda "run of the mill"? (sí, lo sé, no hay tiendas de fábrica)

¿Cuáles (EBS?) Deben evitarse?

¿Algún consejo, truco o estrategia de implementación para evitar semanas de dolor al obtener esta configuración?

Alan Storm
fuente

Respuestas:

44

Estuve alojando Magento en AWS en 2011 hasta 2013. Muchas de las cosas que obtienes al usar la infraestructura de la nube en lugar del alojamiento tradicional dedicado o compartido se describen de manera más relevante en el tema de DevOps, que no son exclusivos de AWS pero se habilitan más fácilmente a través de su uso

  • Control completo y flexible de su planificación de capacidad: aumente la escala antes de los eventos de marketing, habilite el aprovisionamiento dinámico a través de Elastic Beanstalk, reduzca la escala durante períodos de bajo volumen, levante un sitio en un par de semanas, destrúyalo y deséchelo.
  • Configure fácilmente entornos de desarrollo / prueba / preparación y reproduzca los cambios entre ellos.
  • Aloje sus páginas de administrador en un host separado.
  • Utilice DynamoDB para la gestión de sesiones y ElastiCache para la memoria caché sin incurrir en gastos generales de operaciones adicionales, pero tenga cuidado con que ElastiCache no funcione actualmente en VPC.
  • use los ELB para el equilibrio de carga, pero tenga cuidado si las solicitudes tardan más de 60 segundos, se terminarán sin gracia
  • Use AmazonSES para enviar correos electrónicos (ahora aún más fácil a través de SMTP regular), aunque todavía existen lagunas en las herramientas para rastrear rebotes / quejas
  • Use AmazonS3 para alojar medios y Cloudfront para CDN.
  • Costo de operaciones reducido para la actividad de la base de datos a través de RDS, que cuenta con restauración en un punto en el tiempo, conmutación por error automática, copias de seguridad automáticas y actualizaciones automáticas
  • La administración de DNS es muy fácil en Route53, pero generalmente se recomienda para facilitar la asignación de subdominios a equilibradores de carga.
  • VPC para poner todas sus máquinas en su propia red privada para tener un control más granular y exponer el acceso como mejor le parezca a través de sus propios túneles VPN.
  • Fácil medición y alertas de rendimiento (aparte del uso de memoria y uso de disco) a través de CloudWatch y SNS

La huella mínima será de 1 ELB, 2 servidores web EC2 en AZ separadas, 1 RDS multi-az, zona alojada Route53 para el dominio. Inicialmente, puede usar sesiones fijas en el ELB para simplificar la administración de sesiones, pero a medida que aumente su tráfico, querrá mover los medios a un CDN (S3 y CloudFront) y sesiones fuera de las máquinas individuales.

Áreas que no he visto pero que aún son prometedoras: scripts de CloudFormation para una implementación más fácil de una pila de Magento, descarga de la creación de pedidos a través de DynamoDB y colas de trabajo para un mayor rendimiento de pago (alguien ya ha comenzado un proyecto para hacerlo a través de MongoDB en uno de los hackathons recientemente), y configurar una presencia de varias regiones a través de enrutamiento basado en latencia con Route53.

Supongo que soy una especie de evangelista para la nube. Específico para AWS, c3.large es un tamaño de instancia decente para los servidores web de producción, pero comenzaría con el más pequeño de cada clase de instancia y mediría el rendimiento y escalaría u optimizaría el código como mejor le parezca, por lo que remito a todos xhgui constantemente.

Ralph Tice
fuente
En realidad, sugeriría no usar RDS para la base de datos. No tiene control sobre la optimización del servidor, algo que Magento necesita para desempeñarse bien. Hay un documento que Magento publicó al ajustar una pila que muestra los detalles sobre cómo ajustar MySql. Básicamente, si planea escalar o esperar la máxima velocidad, debe ejecutar su propio servidor de base de datos.
davidalger 02 de
3
@davidalger Lo siento, pero ese es un consejo terrible. Debe leer sobre los grupos de parámetros de la base de datos y su uso. aws.amazon.com/rds/faqs/#34 Además, el almacenamiento en caché o la optimización del código aumentan mucho más el rendimiento que cualquier cosa que pueda hacer en la base de datos, a menos que se centre por completo en los procesos de pago, en cuyo caso debe mirar github.com/magento-hackathon/MongoDB-OrderTransactions
Ralph Tice
3
Ciertamente usaría RDS. A lo sumo, pierde la capacidad de crear funciones del sistema, eso es todo. Está altamente optimizado, altamente disponible, y puede activar replicantes con unos pocos clics. Los beneficios superan con creces cualquier posible inconveniente.
philwinkle
¿Qué pasa con EBS (almacenamiento en bloque)? ¿Por qué no has incluido eso también en tu configuración? Además, ¿cuál es la forma recomendada de sincronizar el directorio de medios en los múltiples EC2?
Dayson
1
@Dayson Buena pregunta. Magento es bastante pesado en E / S, incluso cuando se delega la sesión y la administración de caché a los sistemas de almacenamiento en memoria caché. Por eso es posible que desee considerar EBS. Actualmente no estamos en AWS, pero sí ejecutamos nuestro entorno Magento en una pila de equilibrio de carga de alta disponibilidad, en la que tendría el mismo problema con el almacenamiento CMS como el directorio / media. Hace 2 meses, montamos un NFS en nuestros servidores web y enlazamos nuestros directorios / home / user (donde se almacenan todos los datos web) a ese punto de montaje. Desde un punto de vista de usabilidad es brillante. En cuanto al rendimiento, aún podría usar algunos ajustes.
Jaap Haagmans
30

Así es como lo hacemos para la tienda web de Angrybirds:

Presentación en inglés en Magento Imagine 2012.

Presentación en alemán en Meet Magento # 6.12

El actual "PHP Magazin" alemán también tiene un artículo de 6 páginas (en alemán) con algunos detalles

Habiendo leído todas las presentaciones de Fabrizio enlazadas anteriormente muchas veces, creo que esta respuesta es realmente la mejor, aunque estoy de acuerdo en que podría usar más explicaciones y una extracción de las ideas clave de las presentaciones (especialmente porque el primer enlace original ya había sido 404'd cuando publiqué esta actualización).

Lo único que agregaría a los conceptos clave en las presentaciones es que los avances modernos en las tecnologías de AWS / competidor sugerirían algunos ajustes ... como el hecho de que Cloudfront admite gzip para mejoras de rendimiento de CDN ahora, aunque no es tan rápido como tampoco ¿te da una terminación SSL gratuita como las ofertas de CloudFlare ? Su Route 53 DNS tampoco es tan rápido o rico en funciones como CloudFlares, ni AWS tiene un firewall de aplicación web o protección DDOS comparable, todo lo cual está incluido en las ofertas de CloudFlare ...

Hay algunas otras formas posibles de mejorar la presentación original de Fabrizio, pero no sería un buen consultor si regalara TODO lo que sabía en cada publicación de StackExchange que respondí, ¿o sí? Además, algunas de las ofertas más recientes cambiarían sustancialmente las sugerencias en las presentaciones originales, todas las cuales TODAVÍA ofrecen un gran rendimiento, incluso si se pudiera extraer más de AWS con las diferentes opciones utilizadas.

Resumen de conceptos clave :

  1. Conozca sus cuellos de botella íntimamente : y optimice adecuadamente. Cada nivel de la pila tiene cuellos de botella específicos (ancho de banda, CPU, base de datos) y resolver los cuellos de botella en cada nivel requiere una solución diferente optimizada para cada desafío específico, aunque el almacenamiento en caché es el elemento común en cada nivel, lo que lleva a ...

  2. Cache All The Things : aproveche los sistemas de AWS cuando sea posible (Elasticache para el almacenamiento en caché de datos de tipo Redis / Memcache, Cloudfront para almacenar en caché los activos de imagen, js y css más cercanos a los usuarios finales a través de CDN) y Varnish para acelerar las respuestas de instancia del servidor al nivel de activo inicial almacenamiento en caché de solicitudes de CDN. Además, asegúrese de comprimir y mininificar en sus sistemas de implementación ANTES de implementar en CDN

  3. El autoescalado es esencial : la demanda cambia con frecuencia y más rápido de lo que puede monitorear y reaccionar manualmente. Adaptarse a estos cambios en tiempo real requiere el uso de herramientas de automatización disponibles en AWS como Auto-Scaling Groups para hacer girar las piezas del sistema que mejor se adaptan a esta tarea. AWS maneja esto de forma transparente para CloudFront CDN, Route 53 DNS, Elastic Load Balancers y S3 Buckets, debe manejarlo dimensionando y autoescalando para las instancias EC2, y simplemente dimensionando / ajustando para los niveles RDS y Elasticache

  4. La automatización es la única forma de vincular todo esto de manera efectiva : con tantos componentes interrelacionados, algunos de los cuales deben inicializarse en el momento de la implementación, algunos justo después de la implementación, la administración de un sistema ajustado para un rendimiento óptimo requiere automatización. Aprovechar la implementación y la automatización de sistemas para la limpieza de caché, el calentamiento de caché, el procesamiento de imágenes, etc. es la única forma razonable de administrar estos subsistemas diferentes y mantenerlos bien engrasados ​​y libres de problemas.

  5. Pero realmente incluso eso no es posible sin la automatización de pruebas : con tantas piezas móviles, algo se romperá con casi cualquier cambio. Y tendrá que cambiar para mantenerse al día con los desarrollos en Magento y AWS. Y eso sucederá A MENUDO . Por lo tanto, para minimizar el costo del cambio, todas las formas de prueba deben implementarse y automatizarse completamente, desde pruebas unitarias hasta pruebas de integración y pruebas funcionales basadas en selenio del sitio real lanzado en configuraciones de prueba reales que imitan el entorno de producción. Ahora está REALMENTE contento de haber automatizado todos sus procesos de implementación, ¿verdad?

fbrnc
fuente
2
voto negativo por ser un montón de enlaces
Ralph Tice
99
@RalphTice Podría ser una minoría aquí, pero muchos enlaces están bien, especialmente cuando son tan relevantes como los de fbmc. No todos quieren poner su contenido en el dominio público / creative-commons soltándolo en una respuesta de StackExchange.
Alan Storm
44
@AlanStorm No me refiero a que todos deberían votar a favor porque es un montón de enlaces, pero solo dejo una explicación de por qué elegí votar a favor. Prefiero obtener contenido que enlaces a contenido cuando vengo a un sitio de SE, y uso SE para evitar específicamente el video y el contenido que no está en inglés.
Ralph Tice
3
El enlace solitario se considera una respuesta pobre (ver preguntas frecuentes ) ya que no tiene sentido por sí mismo y no se garantiza que el recurso objetivo esté vivo en el futuro . Sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
j0k
2
Parece que el primer enlace ya no existe. Probablemente esto pueda reemplazarlo: slideshare.net/aoemedia/angrybirds-magento-cloud-deployment
ermannob
4

Una solución un poco más simple (!) Es simplemente instalar como lo haría en cualquier otro VPS. He estado ofreciendo una imagen gratis durante algunos años ... últimamente me he concentrado en el nuevo Sydney DC debido a que es local; más detalles en http://www.greengecko.co.nz/magento_on_amazon_ec2 si usted Estás interesado en eso. Prácticamente cero dolor al comenzar: un clic y ya está. Apunte su navegador a la instancia para obtener más detalles. Esto será un buen punto de partida, pero mire y modifique /etc/rc.local si va a construir sobre él.

Lo importante a tener en cuenta es que las instancias tienen poca potencia. Obviamente, arrojar mucho dinero a la aplicación mejora esto, pero incluso para una tienda web moderadamente pequeña, una instancia mediana es un mínimo absoluto, solo para obtener múltiples núcleos, y realmente grande es el más pequeño necesario.

Además, el almacenamiento de Amazon es lento. Debido a eso, es aún más importante de lo habitual entregar todo lo que sea posible desde la memoria: es imprescindible ajustar bases de datos, cachés con respaldo de memoria, etc.

Una vez que lo arreglas, funciona bien. El requisito de ejecutar en una VPC si quieres> 1 dirección IP es realmente molesto (¡especialmente si no te das cuenta de esto cuando comienzas!), y realmente el único problema que encontrarás.

Es simple expandir la plataforma 'sobre la marcha': eventualmente, el único cuello de botella se convierte en la cantidad de potencia de procesamiento disponible para PHP (¡aparte el código ineficiente!), Y ejecutar múltiples 'motores' en paralelo es probablemente la opción más simple: poner extras en línea cuando necesario.

¡Disfrutar!

Steve

Steve Holdoway
fuente
VPC es por defecto ahora para nuevas cuentas de AWS. aws.typepad.com/aws/2013/03/…
Ralph Tice
4

Estamos ejecutando RDS Multi AZ, dos servidores optimizados NGINX, 2 servidores de barniz + ELB y en los mismos servidores de barniz (puerto diferente al barniz) SSL Nginx. Usamos Elasticache e integramos pronto DynamoDB para la gestión de sesiones de Magento. Usamos S3 y Cloudfront también.

Tuve una conversación interesante con una empresa de alojamiento con sede en el Reino Unido con la que tenemos un servidor de £ 700 al mes. Todo lo que hacen es programar Amazon AWS. Con la configuración y optimización correctas en todas las áreas, incluyendo la eliminación de Magento, la desactivación de los módulos, la función de recuento de categorías, etc., etc.

Actualmente podemos obtener entre 2400 y 3000+ visitas por segundo en las páginas de inicio, categoría, producto y CMS (páginas de barniz). Páginas sin barniz, podemos procesar entre 400 y 500 solicitudes por segundo dependiendo de la tienda. Ahora estamos usando RDS Multi con lecturas.

También ponemos Magento Admin en su propio nodo para ejecutar crons y tráfico de administrador. http://administraton.mymagestore.com/admin

Nunca hemos mirado hacia atrás. Estábamos utilizando uno de los mejores anfitriones del Reino Unido, ya sean anfitriones enormemente caros.

Boju
fuente
1
Tenga cuidado: las sesiones de administración no funcionarán con DynamoDB debido a su tamaño. Lo probaría con cuidado: DynamoDB ha aumentado el tamaño máximo de elemento de 64 KB a 256 KB, pero aún así puede que no sea lo suficientemente grande. Trabajé alrededor de esto mediante el uso de sesiones de archivo, ya que solo tenía un nodo de administración y muchos nodos frontend y, por lo tanto, implementé local.xml por separado para frontend web de administrador frente a web.
Ralph Tice
2

Puede utilizar casi todos los servicios básicos de AWS para que su magento funcione. La situación más sencilla sería utilizar EC2 con Elastic IP y AWS VPC para la configuración de seguridad.

La forma inteligente es tener una implementación de 2 servidores: servidor web + base de datos. El servidor web incluye Magento + Nginx + PHP + back-end Caching (Redis o APC es una buena opción) y un servidor MySQL separado en la misma subred. Estos servidores pueden ser visibles entre sí a través de IP privada en la red privada (configurada a través de VPC). Nginx es el servidor web elegido tan pronto como puede entregar archivos estáticos súper rápido.

El servidor de la base de datos debe estar oculto de cualquier acceso. El servidor web estará visible en los puertos 80 y 443. Es posible asignar Elastic IP al servidor web. Posteriormente, será útil configurar DNS (por ejemplo, a través de AWS Route 53) o el equilibrio de carga de AWS.

Como mencionó, puede ser una molestia hacer tal configuración. Por lo tanto, puede acelerar la configuración a través de Deploy4Me. Configurará toda la seguridad, las máquinas virtuales y las redes mencionadas en minutos.

Pavel Korsukov
fuente