¿Cuál puede ser la arquitectura Amazon EC2 y RDS para manejar 500-1000 tráfico en tiempo real?

Usted me dijo…

Tengo un producto desarrollado en php. Y 500 a 1000 solicitudes por segundo. Actualmente estoy usando la instancia t2.micro para mysql y apache. Y cuando tenemos más de 100 solicitudes que mysql se cae. Entonces necesito manejar esta situación.

He encontrado algo similar a esto yo mismo. Lo que probablemente está sucediendo es que se está quedando sin memoria. Una instancia de t2.micro tiene solo 1 GB de RAM. Suponiendo que está ejecutando bajo Linux, puede mejorar esta situación considerablemente agregando un archivo de intercambio.

Para agregar un archivo de intercambio de 1 GB …

  • dd if = / dev / zero of = / swapfile bs = 1M count = 1024
  • mkswap / swapfile
  • swapon / swapfile
  • Para que el archivo de intercambio se reactive después de reiniciar, edite / etc / fstab para agregar:
    • / swapfile swap swap por defecto 0 0

Sin embargo, incluso después de agregar el archivo de intercambio, es probable que su sitio se atasque en algún momento. 500 a 1000 solicitudes por segundo es una tasa alta. Te sugiero que te muevas a una instancia t2.medium o t2.large. Solo para estar seguro, aún implementaría un archivo de intercambio para manejar el tráfico pico.

Desde mi experiencia, la única forma de saberlo con certeza es ejecutar pruebas de carga. Pero hay componentes comunes que harán que su aplicación sea escalable. Para este tipo de volumen, necesitará varios servidores, lo que significa que necesitará un Elastic Load Balancer, Auto Scaling y tendrá instancias de EC2 separadas para sus servidores web y su almacén de datos MySQL. Esto trae RDS, que recomiendo encarecidamente para administrar sus necesidades de base de datos MySQL.

Si está utilizando Auto Scaling, debe asegurarse de que sus servidores web no tengan estado, lo que significa que no almacenan ningún dato de transacciones anteriores. Puede hacer que sus servidores web almacenen y extraigan archivos de S3 o CloudFront, pero no de su sistema de archivos local, de lo contrario no podrá usar Auto Scaling correctamente. También recomiendo tener una implementación multi-AZ, para una mayor disponibilidad.

Y finalmente, los tipos de instancia. He realizado muchas pruebas y, en muchos casos, usar t2.medium o t2.large es más rentable que usar instancias m4.large y también ofrece un mejor rendimiento. Si bien es cierto, los tipos de instancias t2 están diseñados para aplicaciones con ráfagas, t2.mediums y t2.larges tienen un% de utilización de CPU de línea base decente (40% y 60% respectivamente), por lo tanto, solo necesita iniciar la cantidad de instancias que necesita para hacerlos operar por debajo de su utilización de CPU de línea de base.

Además, al realizar pruebas de carga, recomiendo usar una herramienta como New Relic para visualizar métricas críticas que no están disponibles en CloudWatch, como la memoria. New Relic también te permite ver métricas a nivel de proceso. Una vez que sepa qué tipo de recurso consume más su aplicación (CPU, memoria, red, IO), puede encontrar un tipo de instancia EC2 que le brinde el rendimiento óptimo para la naturaleza de su aplicación.

Por ejemplo, a veces he visto que una aplicación no consume mucha memoria, pero requiere mucha CPU. En estos casos, descubrí que t2.medium son alternativas mucho mejores que t2.large porque tienen la misma potencia informática, menos memoria y la mitad del precio. Es por eso que es esencial realizar pruebas de carga y medir la utilización de recursos y las métricas de costos antes de tomar una decisión.

Escribí una publicación de blog con todos los pasos que seguí cuando intentaba elegir entre t2.xy m4.x. Como está directamente relacionado con esta pregunta, incluyo el siguiente enlace:

Un ejemplo práctico: 5 pasos para encontrar una configuración EC2 óptima (con pruebas de rendimiento y resultados reales)

Espero que esto ayude…

No hay tal calculadora disponible para predecir esto. Todo depende de su caso / escenario de uso específico. Debe comparar su tiempo de ejecución por solicitud y la cantidad de memoria que necesita. Luego, en función de esas métricas, calcularía la memoria necesaria para 500 ot 1K solicitudes y, finalmente, en función de esos cálculos, generaría un ec2.

Para la parte de RDS, nuevamente necesita saber si su carga de trabajo está lista / pesada. Si solo está seleccionando desde mysql, puede usar la replicación múltiple para distribuir la carga y obtener una especificación RDS más baja.

En general, primero necesita comparar el funcionamiento de su producto y luego decidir en función de las métricas qué es exactamente lo que necesita.


Gracias por el A2A!

Me alejaría por completo de los tipos de instancia T2 si experimenta un tráfico constante en cualquier lugar cerca de 500-1000 req / seg.

Como esto suena como un sitio de producción, recomendaría implementar un grupo de autoescalado para el nivel web, si se puede servir en varias instancias. Comience con un tipo de instancia relativamente pequeño, pero evite T2 porque son excelentes para el tráfico explosivo, pero cuando se quedan sin créditos de ráfaga puede ser muy lento.

Esta página web le ofrece una excelente manera de comparar tipos de instancias EC2: Comparación de instancias de Amazon EC2

Para su arquitectura RDS, recomendaría aumentar el tamaño de la instancia de la base de datos a algo con al menos 4 Gb de memoria, posiblemente más, y nuevamente evitar los tipos de instancias T2, ya que son útiles para patrones de tráfico en ráfagas. Si tiene un flujo de trabajo principalmente de solo lectura, puede iniciar una réplica de lectura para dividir el tráfico de solo lectura del tráfico de r / w.

¡Espero que esto ayude!