¿Cómo funciona el servidor de arquitectura Azure ARM?

API7.ai

August 8, 2022

Ecosystem

Antecedentes

En abril, Microsoft anunció una vista previa de su familia de máquinas virtuales de Azure basadas en procesadores Ampere® Altra® Arm. La nueva serie de VM incluye máquinas virtuales de propósito general Dpsv5 y optimizadas para memoria Epsv5. Para más detalles, consulta la siguiente figura:

Azure VM

Cabe destacar que Ampere® Altra® Arm es un procesador nativo de la nube, y las máquinas virtuales de Azure basadas en procesadores Ampere® Altra® Arm pueden ejecutar aplicaciones nativas de la nube de escalabilidad horizontal de manera eficiente.

Entonces, ¿cuál es la experiencia y el rendimiento real? Tomemos como ejemplo una puerta de enlace de API nativa de la nube para mostrarte el rendimiento de una máquina virtual de Azure basada en la arquitectura Arm. Aquí, elegimos Apache APISIX para su instalación y prueba en el entorno de máquina virtual de la serie Dpdsv5 de propósito general.

Apache APISIX es una puerta de enlace de API nativa de la nube, de alto rendimiento y escalable. Basado en NGNIX + LuaJIT y etcd, APISIX tiene características como enrutamiento dinámico y recarga en caliente de complementos en comparación con las puertas de enlace de API tradicionales, lo que lo hace especialmente adecuado para la gestión de API bajo una arquitectura nativa de la nube.

Arquitectura de Apache APISIX

Preparación preliminar

Primero, necesitas iniciar una instancia de la serie Dpdsv5 en Azure y elegir Ubuntu 20.04 como sistema operativo.

Azure Dpdsv5

Luego, instala Docker para facilitar el uso posterior de métodos de contenedores para instalar y desplegar Apache APISIX.

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

Desplegar Apache APISIX

Apache APISIX utiliza etcd como centro de configuración, por lo que primero necesitas iniciar una instancia de 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

Luego, inicia una instancia de Apache APISIX.

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

Crea rutas.

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

Accede a la prueba.

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

La instalación es exitosa si se devuelven los siguientes resultados:

HTTP/1.1 200 OK
.....

Azure Ddsv5 vs Azure Dpdsv5

A partir de las operaciones anteriores, la instalación y la prueba de compatibilidad de Apache APISIX en Azure Dpdsv5 se pueden completar con éxito. Entonces, ¿cuál es el rendimiento real de Azure Dpdsv5? A continuación, utilizaremos Apache APISIX para realizar pruebas de rendimiento comparativas en Azure Dpdsv5 y Azure Ddsv5 para ver su rendimiento real.

Azure Ddsv5 es otro modelo de la serie D de Azure, que está basado en la arquitectura Intel® x86, por lo que los pasos de instalación de etcd son ligeramente 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

Un solo upstream + sin complementos

Usa un solo upstream, sin ningún complemento. Principalmente prueba el rendimiento de APISIX en modo de proxy puro de retorno al origen.

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

Un solo upstream + dos complementos

Usa un solo upstream, dos complementos. Principalmente prueba el rendimiento de APISIX cuando están habilitados los dos complementos principales que consumen rendimiento, limit-count y prometheus.

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

Comparación de datos

En los dos escenarios anteriores, se realizaron pruebas y comparaciones relevantes desde los dos niveles de QPS (consultas por segundo) de solicitudes y tiempo de latencia. El resultado es el siguiente:

  1. Comparación de QPS

    QPS

  2. Comparación de latencia

    Latencia

| | Un solo upstream + sin complementos | Un solo upstream + dos complementos | | ------------------ | ----------------------------------- | ----------------------------------- | --------------- | ---------------- | | | Azure Ddsv5 | Azure Dpdsv5 | Azure Ddsv5 | Azure Dpdsv5 | | QPS(solicitudes/s) | 14900 | 13400 | 13100 | 11000 | | Latencia(ms) | 1.07 | 1.21 | 1.21 | 1.43 |

También se puede ver en los datos anteriores que en escenarios de computación intensiva de E/S de red, como las puertas de enlace de API, Dpdsv5 todavía tiene una brecha de rendimiento en comparación con la misma serie Ddsv5. Pero otra buena noticia es que el precio de Dpdsv5 es aproximadamente un 20% más barato que Ddsv5 bajo la misma configuración. En la selección real de máquinas, los usuarios pueden tomar decisiones flexibles según su volumen de negocio.

Resumen

Este artículo utiliza principalmente Apache APISIX para comparar el rendimiento de Azure Ddsv5 y Azure Dpdsv5. Se puede ver que en escenarios de computación intensiva de E/S de red, como las puertas de enlace de API, Azure Dpdsv5 no es tan brillante en comparación con Ddsv5, pero dado que esta serie de modelos todavía está en vista previa, Microsoft está realizando mejoras y optimizaciones continuas. Esperamos con interés su continuación.

Referencia

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

Tags: