Como o Servidor de Arquitetura Azure ARM Desempenha?

API7.ai

August 8, 2022

Ecosystem

Contexto

Em abril, a Microsoft anunciou uma prévia de sua família de máquinas virtuais do Azure baseadas nos processadores Ampere® Altra® Arm. A nova série de VMs inclui as VMs de propósito geral Dpsv5 e as VMs otimizadas para memória Epsv5. Para mais detalhes, consulte a figura abaixo:

Azure VM

Vale destacar que o Ampere® Altra® Arm é um processador nativo da nuvem, e as máquinas virtuais do Azure baseadas nesses processadores podem, portanto, executar aplicações nativas da nuvem de forma escalável e eficiente.

Mas qual é a experiência e o desempenho reais? Vamos usar um gateway de API nativo da nuvem como exemplo para mostrar o desempenho de uma máquina virtual do Azure baseada na arquitetura Arm. Aqui, escolhemos o Apache APISIX para instalação e teste no ambiente de máquina virtual da série Dpdsv5 de propósito geral.

O Apache APISIX é um gateway de API nativo da nuvem, de alto desempenho e escalável. Baseado em NGNIX + LuaJIT e etcd, o APISIX possui características como roteamento dinâmico e carregamento a quente de plugins, em comparação com gateways de API tradicionais, o que o torna especialmente adequado para o gerenciamento de APIs em arquiteturas nativas da nuvem.

Arquitetura do Apache APISIX

Preparação inicial

Primeiro, você precisa iniciar uma instância da série Dpdsv5 no Azure e escolher o Ubuntu 20.04 como sistema operacional.

Azure Dpdsv5

Em seguida, instale o Docker para facilitar o uso de métodos de contêineres para instalar e implantar o Apache APISIX.

sudo apt-get update && sudo apt-get install docker.io

Implantação do Apache APISIX

O Apache APISIX usa o etcd como centro de configuração, então você precisa iniciar uma instância do etcd primeiro.

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

Depois, inicie uma instância do Apache APISIX.

sudo docker run --net=host -d apache/apisix:2.14.1-alpine

Crie rotas.

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
        }
    }
}'

Acesse o teste.

curl -i http://127.0.0.1:9080/anything/das

A instalação é bem-sucedida se os seguintes resultados forem retornados:

HTTP/1.1 200 OK
.....

Comparação entre Azure Ddsv5 e Azure Dpdsv5

A partir das operações acima, a instalação e o teste de compatibilidade do Apache APISIX no Azure Dpdsv5 podem ser concluídos com sucesso. Mas qual é o desempenho real do Azure Dpdsv5? A seguir, usaremos o Apache APISIX para realizar testes de desempenho comparativos entre o Azure Dpdsv5 e o Azure Ddsv5 para ver seu desempenho real.

O Azure Ddsv5 é outro modelo da série D do Azure, baseado na arquitetura Intel® x86, então as etapas de instalação do etcd são ligeiramente diferentes:

sudo docker run -d --name etcd
    -p 2379:2379
    -e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
    -e ALLOW_NONE_AUTHENTICATION=yes
    -e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
    bitnami/etcd:3.4.16

Único upstream + sem plugin

Use um único upstream, sem nenhum plugin. Isso testa principalmente o desempenho do APISIX no modo de proxy puro de retorno à origem.

# apisix: 1 worker + 1 upstream + no plugin
# create 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
        }
    }
}'

Único upstream + dois plugins

Usando um único upstream, dois plugins. Isso testa principalmente o desempenho do APISIX quando os dois plugins que mais consomem desempenho, limit-count e prometheus, estão ativados.

# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# create 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
        }
    }
}'

Comparação de dados

Nos dois cenários acima, foram realizados testes e comparações relevantes nos níveis de QPS (consultas por segundo) e tempo de latência. O resultado é o seguinte:

  1. Comparação de QPS

    QPS

  2. Comparação de latência

    Latência

| | Único upstream + sem plugin | Único upstream + dois plugins | | ------------------ | --------------------------- | ----------------------------- | --------------- | ---------------- | | | Azure Ddsv5 | Azure Dpdsv5 | Azure Ddsv5 | Azure Dpdsv5 | | QPS(solicitações/s) | 14900 | 13400 | 13100 | 11000 | | Latência(ms) | 1.07 | 1.21 | 1.21 | 1.43 |

Também é possível ver pelos dados acima que, em cenários de computação intensiva em IO de rede, como gateways de API, o Dpdsv5 ainda tem uma lacuna de desempenho em comparação com o Ddsv5 da mesma série. Mas uma boa notícia é que o preço do Dpdsv5 é cerca de 20% mais barato que o Ddsv5 na mesma configuração. Na seleção real de máquinas, os usuários podem tomar decisões flexíveis de acordo com seu volume de negócios.

Resumo

Este artigo usa principalmente o Apache APISIX para comparar o desempenho do Azure Ddsv5 e do Azure Dpdsv5. Pode-se ver que, em cenários de computação intensiva em IO de rede, como gateways de API, o Azure Dpdsv5 não se destaca tanto em comparação com o Ddsv5, mas como essa série de modelos ainda está em prévia, a Microsoft está fazendo melhorias e otimizações contínuas. Estamos ansiosos por suas próximas versões.

Referência

Now in preview: Azure Virtual Machines with Ampere Altra Arm-based processors

Tags: