Comment se comporte AWS Graviton3 ?
API7.ai
June 7, 2022
Contexte
AWS a lancé la dernière famille de processeurs ARM AWS Graviton à la fin mai 2022 - AWS Graviton3. Selon les données officielles d'AWS, par rapport au processeur Graviton2, basé sur la technologie de mémoire DDR5 de pointe, le processeur Graviton3 peut offrir jusqu'à 25 % d'amélioration des performances, jusqu'à 2x les performances en virgule flottante et une vitesse d'accès à la mémoire 50 % plus rapide ; Graviton3 utilise également 60 % d'énergie en moins sur la même instance EC2 du même type.
Mais qu'en est-il des données réelles ? Prenons l'exemple d'une API Gateway à forte densité d'IO réseau pour voir comment AWS Graviton3 se comporte. Ici, nous utilisons Apache APISIX pour effectuer des tests de comparaison de performances sur des environnements serveur AWS Graviton2 (C6g) et AWS Graviton3 (C7g).
Apache APISIX est une passerelle API cloud-native, haute performance et évolutive. Basée sur NGNIX+LuaJIT et etcd, par rapport aux passerelles API traditionnelles, APISIX dispose de fonctionnalités de routage dynamique et de rechargement à chaud des plugins, ce qui la rend particulièrement adaptée à la gestion des API sous une architecture cloud native.
Installation et Déploiement
Préparez un serveur avec un chip ARM64, ici nous choisissons Amazon EC2 C7g (seul ce modèle dispose actuellement d'AWS Graviton3), et le système d'exploitation choisi est Ubuntu 20.04.
N'oubliez pas d'installer Docker :
sudo apt-get update && sudo apt-get install docker.io
Apache APISIX a publié la dernière version de l'image ARM64, qui peut être déployée en un clic avec Docker. Le processus détaillé est décrit ci-dessous.
- Démarrer 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
- Démarrer APISIX
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
- Enregistrer une Route
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
}
}
}'
- Test
curl -i http://127.0.0.1:9080/anything/das
HTTP/1.1 200 OK
.....
Comparaison des Performances entre AWS Graviton2 et AWS Graviton3
Selon les opérations précédentes, basées sur le script officiel, l'installation et le test de compatibilité d'APISIX sur le processeur AWS Graviton3 ont été réalisés avec succès. Voyons les performances d'Apache APISIX sur AWS Graviton2 (C6g) et AWS Graviton3 (C7g).
Pour simplifier, un seul Worker est activé dans APISIX pour ce test, et les données de performance suivantes sont toutes exécutées sur un CPU monocœur.
Scénario 1 : Single upstream
Utilise un seul upstream, sans aucun plugin. Il teste principalement les performances d'APISIX en mode proxy pur vers l'origine.
# apisix: 1 worker + 1 upstream + no plugin
# register route
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
}
}
}'
Scénario 2 : Single upstream + Deux plugins
Utilise un seul upstream, deux plugins. Il teste principalement les performances d'APISIX lorsque les deux plugins consommateurs de performances, limit-count
et prometheus
, sont activés.
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# register route
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
}
}
}'
Comparaison des Données
Dans les deux scénarios ci-dessus, des tests et comparaisons ont été effectués à deux niveaux : le traitement des requêtes et le temps de latence. Les résultats sont les suivants :
- Comparaison QPS
- Comparaison Latence
On peut également voir à partir des données ci-dessus que dans un scénario de calcul à forte densité d'IO réseau comme une API Gateway, AWS Graviton3 améliore les performances de 76 % par rapport à AWS Graviton2, tout en réduisant la latence de 38 %. Ces données sont même meilleures que les données officielles fournies par AWS mentionnées au début (25 % d'amélioration des performances).
Résumé
Cet article utilise principalement Apache APISIX pour comparer les performances d'AWS Graviton3 et AWS Graviton2. On peut voir que dans le scénario de calcul à forte densité d'IO réseau d'une passerelle API, AWS Graviton3 montre des propriétés de monstre de performance. Bien sûr, il est également recommandé de pratiquer beaucoup, et nous attendons avec impatience plus de données de test pour des projets à forte intensité de calcul à l'avenir.