Como está o desempenho do AWS Graviton3?
API7.ai
June 7, 2022
Contexto
A AWS lançou a mais recente família de processadores baseados em ARM, a AWS Graviton, no final de maio de 2022 - AWS Graviton3. De acordo com os dados oficiais da AWS, em comparação com o processador Graviton2, baseado na tecnologia líder de memória DDR5, o processador Graviton3 pode fornecer até 25% de melhoria de desempenho, até 2x o desempenho de ponto flutuante e 50% mais velocidade de acesso à memória; o Graviton3 também consome 60% menos energia na mesma instância EC2 do mesmo tipo.
Mas e os dados reais? Vamos pegar um API Gateway com alta demanda de IO de rede como exemplo para ver como o AWS Graviton3 se sai. Aqui, usamos o Apache APISIX para realizar testes de comparação de desempenho em ambientes de servidor AWS Graviton2 (C6g) e AWS Graviton3 (C7g).
Apache APISIX é um gateway API nativo da nuvem, de alto desempenho e escalável. Baseado em NGNIX+LuaJIT e etcd, em comparação com gateways API tradicionais, o APISIX possui recursos de roteamento dinâmico e carregamento a quente de plugins, sendo especialmente adequado para gerenciamento de API sob arquitetura nativa da nuvem.
Instalação e Implantação
Prepare um servidor com um chip ARM64, aqui escolhemos o Amazon EC2 C7g (apenas este modelo atualmente possui AWS Graviton3), e o sistema operacional escolhido é o Ubuntu 20.04.
Não se esqueça de instalar o Docker:
sudo apt-get update && sudo apt-get install docker.io
O Apache APISIX lançou a versão mais recente da imagem ARM64, que pode ser implantada com um único comando usando o Docker. O processo detalhado pode ser encontrado abaixo.
- Inicie o 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
- Inicie o APISIX
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
- Registre a Rota
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
}
}
}'
- Teste
curl -i http://127.0.0.1:9080/anything/das
HTTP/1.1 200 OK
.....
Comparação de Desempenho entre AWS Graviton2 e AWS Graviton3
De acordo com as operações anteriores, com base no script oficial, a instalação e o teste de compatibilidade do APISIX no processador AWS Graviton3 foram concluídos com sucesso. Vamos dar uma olhada no desempenho do Apache APISIX no AWS Graviton2 (C6g) e no AWS Graviton3 (C7g).
Para simplificar, apenas um Worker foi habilitado no APISIX neste teste, e os seguintes dados de teste de desempenho foram executados em uma CPU de núcleo único.
Cenário 1: Único upstream
Use um único upstream, sem nenhum plugin. Principalmente testa o desempenho do APISIX no modo de proxy puro de retorno à origem.
# apisix: 1 worker + 1 upstream + no plugin
# registre a rota
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
}
}
}'
Cenário 2: Único upstream + Dois plugins
Usando um único upstream, dois plugins. Principalmente testa o desempenho do APISIX quando os dois plugins de consumo de desempenho central, limit-count
e prometheus
, estão habilitados.
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# registre a rota
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
}
}
}'
Comparação de Dados
Nos dois cenários acima, foram realizados testes e comparações relacionados nos dois níveis de processamento de solicitações e tempo de latência. Os resultados são os seguintes:
- Comparação de QPS
- Comparação de Latência
Também pode ser visto a partir dos dados acima que, em um cenário de computação com alta demanda de IO de rede, como um API Gateway, o AWS Graviton3 melhora o desempenho em 76% em comparação com o AWS Graviton2, enquanto reduz a latência em 38%. Esses dados são ainda melhores do que os dados oficiais fornecidos pela AWS mencionados no início (25% de melhoria de desempenho).
Resumo
Este artigo utiliza principalmente o Apache APISIX para comparar o desempenho do AWS Graviton3 e do AWS Graviton2. Pode-se ver que, no cenário de computação com alta demanda de IO de rede de um gateway API, o AWS Graviton3 pode ser considerado um monstro de desempenho. Claro, também é recomendável que você pratique bastante e aguardamos mais dados de teste para projetos de computação intensiva no futuro.