Como o Servidor de Arquitetura Azure ARM Desempenha?
API7.ai
August 8, 2022
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:
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.
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.
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:
-
Comparação de QPS
-
Comparação de 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