amazon web services - provisioned - ¿Qué significa IOPS(en Amazon EBS) en la práctica?
general purpose ssd gp2 provisioned storage (2)
Tengo algunas imágenes necesarias para una aplicación. Hay muchas imágenes (más de 50,000) pero el tamaño total es pequeño (40 Mb). Inicialmente, pensé que simplemente usaría S3 pero es muy lento cargarlo. Como solución temporal, quería adjuntar una EBS que contenga las imágenes y eso estaría bien. Sin embargo, al leer un poco sobre EBS General Purpose (gp2) noté la siguiente descripción:
GP2 es el tipo de volumen EBS predeterminado para las instancias de Amazon EC2. Estos volúmenes están respaldados por unidades de estado sólido (SSD) y son adecuados para una amplia gama de cargas de trabajo transaccionales, incluidos entornos de desarrollo / prueba, aplicaciones interactivas de baja latencia y volúmenes de arranque. GP2 está diseñado para ofrecer latencias de milisegundos de un solo dígito, ofrecer un rendimiento de línea de base constante de 3 IOPS / GB a un máximo de 10,000 IOPS y proporcionar hasta 160 MB / s de rendimiento por volumen.
Es esa cantidad de 3 IOPS / GB que me preocupa. ¿Qué significa esto en términos prácticos? Supongamos que necesita un sitio de comercio electrónico para una pequeña cantidad de usuarios (por ejemplo, <10,000 solicitudes por minuto) y estas imágenes deben recuperarse. Amazon describes cómo se miden las IOPS:
Cuando las pequeñas operaciones de E / S son físicamente contiguas, Amazon EBS intenta combinarlas en un solo E / S hasta el tamaño máximo. Por ejemplo, para los volúmenes SSD, una sola operación de E / S de 1.024 KiB contaría como 4 operaciones, mientras que 256 operaciones de E / S a 4 KiB contarán como 256 operaciones.
¿Esto significa realmente que si quiero recuperar 50 imágenes de 10 kB cada una en menos de un segundo, requeriría 50 IOPS y fácilmente excedería la línea de base de 3 IOPS?
ACTUALIZACIÓN :
Gracias a la sugerencia de Mark B, pude usar S3 para cargar mis archivos. Sin embargo, todavía me pregunto qué cantidad de IOPS se necesita para realizar tareas comunes, como ejecutar una base de datos o servir otros archivos para una aplicación web. Me encantaría escuchar algunos valores de referencia con respecto a los valores mínimos de IOPS en función de su experiencia.
La respuesta de @Mark B es probablemente correcta, ya que señala que sus IOP se basan en el tamaño de su volumen de EBS. Para lo que quieras, S3 es la mejor opción.
Pero dependiendo de su caso de uso y requisitos, EBS puede ser necesario. Esto es especialmente cierto si desea ejecutar una base de datos. En ese caso, tienes un par de opciones.
Puede obtener IOPS aprovisionadas: si sabe que necesita 5000 IOPS, pero solo necesita 100 GB de almacenamiento (que normalmente con gp2 le proporcionaría alrededor de 300 IOPS), puede usar volúmenes I01. Hay un costo adicional para esto, y querrá asegurarse de que esté conectado a una instancia optimizada de EBS, pero puede obtener hasta 20,000 IOPS si es necesario.
Si está realizando muchas lecturas secuenciales (¿está leyendo en un conjunto de datos de gran tamaño?) Entonces hay un nuevo tipo de EBS, st1. Esto es bueno para 500MB / s, y es menos de la mitad del costo de gp2.
Finalmente, hay otro escenario que podrías considerar (por ejemplo, eres un poco loco y quieres intentar hacer cosas extrañas). Si puede capturar un archivo desde cualquier lugar, y todo lo que le importa es servirlos desde un sistema de archivos realmente rápido, podría ponerlos en una instancia que tenga almacenamiento de instancia. Este es un SSD conectado localmente, por lo que es muy rápido. El único inconveniente es que cuando su instancia se detiene, sus datos desaparecen.
Para abordar su actualización, "cuántos IOPS necesita para una base de datos", la respuesta es "depende". Cada motor de base de datos tiene diferentes requisitos, y cada uso de base de datos tiene diferentes patrones de uso. Echa un vistazo a this si quieres más información. Pero básicamente, prueba y monitor. Si está preocupado, aprovisione en exceso durante el lanzamiento y disminuya la escala según sea necesario. O haga una conjetura y auméntela si tiene problemas: ¿es más importante minimizar los costos o proporcionar un buen rendimiento a sus usuarios finales?
Le falta la parte " / GB " de esa declaración. La línea de base es 3 IOPS por GB . Si su volumen de EBS es de 100 GB, entonces tendría una línea de base de 300 IOPS. Para un volumen EBS de GP2, tiene que multiplicar el tamaño del volumen por 3 para obtener las IOPS.
Tenga en cuenta que cualquier volumen GP2 bajo 1TB también puede estallar hasta 3.000 IOPS, por lo que cualquier aumento limitado de IO todavía debería funcionar muy bien.
Además, agregaré que S3 suena como un mejor ajuste para su caso de uso. Si está viendo velocidades de carga lentas a S3, ese es un problema que se puede resolver. Puede usar CloudFront para proporcionar una ubicación de borde cercana a la que pueda cargar.
En mi experiencia, las cargas a S3 nunca son más lentas que las cargas a una instancia de EC2 a la que se adjuntaría el volumen de EBS.
Actualizar:
Para responder a su pregunta adicional, el IOPS mínimo necesario dependerá de muchas variables, como la cantidad de RAM disponible, el tipo de aplicación que está ejecutando, qué tan bien la aplicación almacena en la memoria los valores, el tamaño promedio de sus operaciones de IO, etc. Es realmente difícil determinar con precisión un número exacto e indicar que necesita exactamente X IOPS para una aplicación.
También debe recordar que cualquier volumen con un tamaño inferior a 1 TB aún puede reventar hasta 3.000 IOPS durante varios segundos. Por lo tanto, incluso si su aplicación necesita un alto IOPS cuando está en uso, si no ve mucho uso, la función de ráfaga IOPS podría ser todo lo que necesita.
En general, generalmente comienzo con un volumen de 100 GB con 300 IOPS y comparo el rendimiento de mi aplicación con eso. Un servidor web que opera completamente dentro de la memoria RAM nunca necesitará más que eso. Para algo como una base de datos, probablemente comenzarás con la cantidad de espacio en disco que crees que necesitarás y luego comenzarás las pruebas de rendimiento. CloudWatch mostrará la cantidad de IOPS que usa su aplicación, y si lo ve al límite máximo de su volumen, entonces sabrá que necesita aumentar el IOPS disponible. Enjuague y repita hasta que ya no maximice al máximo las IOPS disponibles durante sus pruebas de rendimiento.