Comparando instancias en AWS EC2

Con la reciente introducción por parte de Amazon de las instancias de tipo m4 e incluso las nuevas t2.large (además de las no tan recientes c4), desde el equipo de sysadmins hemos querido realizar una serie de pruebas comparativas de rendimiento.

Dado que la nomenclatura de Amazon tanto respecto al tipo ("Compute-Optimized", "General Purpose", etc...) como respecto al rendimiento de red ("Low", "Moderate", etc...) es algo inconcreta y poco determinista, hemos decidido sacar nuestros propios números para poder tomar decisiones fundadas en números reales y no tanto en suposiciones más o menos aventuradas.


Entorno de pruebas

Los datos que proporciona Amazon respecto a las instancias que hemos usado en los tests los hemos resumido en la siguiente tabla, ordenándolas en orden creciente de coste mensual en la región EU(Ireland):

Para realizar las pruebas, en primer lugar hemos preparado una instancia con Amazon Linux AMI 2015.03 en una VPC en la región eu-west y simplemente hemos instalado una base de datos redis 2.8.17 sin ninguna optimización especial. Hemos importado una de nuestras bbdd's para tener una situación algo más real y que en todos los casos no excedía la memoria disponible en la instancia.

A continuación nos hemos limitado a lanzar benchmarks mediante redis-benchmark, en concreto mediante el comando redis-benchmark -q -n 100000, es decir, 100k peticiones en cada test ("-n") en mode quiet ("-q").

Teniendo en cuenta que nuestro objetivo era obtener resultados relativos entre los distintos tipos de instancias sin importarnos los valores absolutos conseguidos, el procedimiento seguido ha consistido en lanzar repetidamente el comando comentado anteriormente hasta obtener un resultado estable.

Evidentemente, en el caso de las instancias t2 (burstables), en ningún momento se llegó a consumir el Credit Balance disponible. Nos interesaba también medir el rendimiento de este tipo de instancias en concreto ya que para ciertos casos de uso pueden ser idóneas (y más a la vista de los resultados obtenidos).


Tests en local

Con objeto de testar puramente el rendimiento de las instancias sin que influyeran factores externos, hemos comenzado por lanzar el benchmark localmente en el propio servidor.

Los resultados obtenidos fueron:

Tests en remoto

Para poder obtener valores relativos al rendimiento a nivel de red de las distintas instancias, una vez que ya teníamos una idea aproximada de su rendimiento "puro", lanzamos el benchmark desde una instancia cliente remota. En concreto, para todos los casos (menos en el explícitamente indicado en que usamos una t2.medium como cliente contra una m4.large de servidor) se utilizó el mismo tipo de instancia como cliente y como servidor.

Los resultados obtenidos fueron:

Estos son nuestros números, vuestras son las conclusiones ;)