¿Cómo está funcionando AWS Graviton3?
API7.ai
June 7, 2022
Antecedentes
AWS lanzó la última familia de procesadores basados en ARM, AWS Graviton, a finales de mayo de 2022: AWS Graviton3. Según los datos oficiales de AWS, en comparación con el procesador Graviton2, basado en la tecnología líder de memoria DDR5, el procesador Graviton3 puede ofrecer una mejora de rendimiento de hasta un 25%, un rendimiento de punto flotante hasta 2 veces mayor y una velocidad de acceso a la memoria un 50% más rápida; Graviton3 también consume un 60% menos de energía en la misma instancia EC2 del mismo tipo.
Entonces, ¿cómo son los datos reales? Tomemos como ejemplo una API Gateway intensiva en E/S de red para ver cómo se desempeña AWS Graviton3. Aquí utilizamos Apache APISIX para realizar pruebas de comparación de rendimiento en entornos de servidor AWS Graviton2 (C6g) y AWS Graviton3 (C7g).
Apache APISIX es una puerta de enlace API nativa de la nube, de alto rendimiento y escalable. Basado en NGNIX+LuaJIT y etcd, en comparación con las puertas de enlace API tradicionales, APISIX tiene características de enrutamiento dinámico y recarga en caliente de complementos, lo que lo hace especialmente adecuado para la gestión de API bajo una arquitectura nativa de la nube.
Instalación y Despliegue
Prepare un servidor con un chip ARM64, aquí elegimos Amazon EC2 C7g (solo este modelo tiene actualmente AWS Graviton3), y el sistema operativo elegido es Ubuntu 20.04.
No olvide instalar Docker:
sudo apt-get update && sudo apt-get install docker.io
Apache APISIX ha lanzado la última versión de la imagen ARM64, que se puede desplegar con un solo clic utilizando Docker. El proceso detallado se encuentra a continuación.
- Iniciar etcd
sudo docker run -d \
--name etcd -p 2379:2379 -e ETCD_UNSUPPORTED_ARCH=arm64 \
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
-e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 \
rancher/coreos-etcd:v3.4.16-arm64
- Iniciar APISIX
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
- Registrar Ruta
curl "http://127.0.0.1:9080/apisix/admin/routes/1" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"uri": "/anything/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
- Prueba
curl -i http://127.0.0.1:9080/anything/das
HTTP/1.1 200 OK
.....
Comparación de Rendimiento entre AWS Graviton2 y AWS Graviton3
Según las operaciones anteriores, basadas en el script oficial, se completó con éxito la instalación y la prueba de compatibilidad de APISIX en el procesador AWS Graviton3. Veamos el rendimiento de Apache APISIX en AWS Graviton2 (C6g) y AWS Graviton3 (C7g).
Para simplificar, en esta prueba solo se habilita un Worker en APISIX, y los siguientes datos de prueba de rendimiento se ejecutan en una CPU de un solo núcleo.
Escenario 1: Un solo upstream
Utilice un solo upstream, sin ningún complemento. Principalmente prueba el rendimiento de APISIX en modo de proxy puro de retorno al origen.
# apisix: 1 worker + 1 upstream + sin complementos
# registrar ruta
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980":1
}
}
}'
Escenario 2: Un solo upstream + Dos complementos
Utilizando un solo upstream, dos complementos. Principalmente prueba el rendimiento de APISIX cuando están habilitados los dos complementos principales que consumen rendimiento, limit-count
y prometheus
.
# apisix: 1 worker + 1 upstream + 2 complementos (limit-count + prometheus)
# registrar ruta
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {
"limit-count": {
"count": 2000000000000,
"time_window": 60,
"rejected_code": 503,
"key": "remote_addr"
},
"prometheus": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980":1
}
}
}'
Comparación de Datos
En los dos escenarios anteriores, se realizaron pruebas y comparaciones relacionadas desde los dos niveles de procesamiento de solicitudes y tiempo de retraso. Los resultados son los siguientes:
- Comparación de QPS
- Comparación de Latencia
También se puede ver en los datos anteriores que en un escenario de computación intensiva en E/S de red como API Gateway, AWS Graviton3 mejora el rendimiento en un 76% en comparación con AWS Graviton2, mientras reduce la latencia en un 38%. Estos datos son incluso mejores que los datos oficiales proporcionados por AWS mencionados al principio (mejora del 25% en el rendimiento).
Resumen
Este artículo utiliza principalmente Apache APISIX para comparar el rendimiento de AWS Graviton3 y AWS Graviton2. Se puede ver que en el escenario de computación intensiva en E/S de red de una puerta de enlace API, AWS Graviton3 puede considerarse un monstruo de rendimiento. Por supuesto, también se recomienda practicar mucho y esperar más datos de prueba para proyectos intensivos en computación en el futuro.