Como está o desempenho do AWS Graviton3?

API7.ai

June 7, 2022

Ecosystem

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.

Apache APISIX

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.

Amazon EC2

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.

  1. 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
  1. Inicie o APISIX
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
  1. 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
    }
  }
}'
  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:

  1. Comparação de QPS

QPS

  1. Comparação de Latência

Latency

tabela de comparação

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.

Tags: