Как работает сервер архитектуры Azure ARM?
API7.ai
August 8, 2022
Предыстория
В апреле Microsoft анонсировала предварительный просмотр своего семейства виртуальных машин Azure на базе процессоров Ampere® Altra® Arm. Новая серия виртуальных машин включает в себя универсальные Dpsv5 и оптимизированные для работы с памятью Epsv5 виртуальные машины. Подробности можно увидеть на следующем рисунке:

Стоит отметить, что Ampere® Altra® Arm — это облачный процессор, и виртуальные машины Azure на базе процессоров Ampere® Altra® Arm могут эффективно запускать масштабируемые облачные приложения.
Так каковы же реальные впечатления и производительность? Давайте возьмем облачный API-шлюз в качестве примера, чтобы показать производительность виртуальной машины Azure на архитектуре Arm. Здесь мы выбираем Apache APISIX для установки и тестирования в среде виртуальной машины серии Dpdsv5 общего назначения.
Apache APISIX — это облачный, высокопроизводительный и масштабируемый API-шлюз. Основанный на NGNIX + LuaJIT и etcd, APISIX обладает такими характеристиками, как динамическая маршрутизация и горячая загрузка плагинов, по сравнению с традиционными API-шлюзами, что особенно подходит для управления API в облачной архитектуре.

Подготовка
Сначала необходимо запустить экземпляр серии Dpdsv5 на Azure и выбрать Ubuntu 20.04 в качестве операционной системы.

Затем установите Docker, чтобы упростить последующую установку и развертывание Apache APISIX с использованием контейнеризации.
sudo apt-get update && sudo apt-get install docker.io
Развертывание Apache APISIX
Apache APISIX использует etcd в качестве центра конфигурации, поэтому сначала необходимо запустить экземпляр 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
Затем запустите экземпляр Apache APISIX.
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
Создайте маршруты.
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 } } }'
Проверьте доступ.
curl -i http://127.0.0.1:9080/anything/das
Установка прошла успешно, если возвращены следующие результаты:
HTTP/1.1 200 OK .....
Azure Ddsv5 vs Azure Dpdsv5
Из вышеописанных операций видно, что установка и тестирование совместимости Apache APISIX на Azure Dpdsv5 могут быть успешно завершены. Но какова реальная производительность Azure Dpdsv5? Далее мы проведем тесты производительности Apache APISIX на Azure Dpdsv5 и Azure Ddsv5, чтобы сравнить их реальную производительность.
Azure Ddsv5 — это еще одна модель серии D Azure, которая основана на архитектуре Intel® x86, поэтому шаги установки etcd немного отличаются:
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
Один апстрим + без плагинов
Используется один апстрим без каких-либо плагинов. Основной тест производительности APISIX в режиме чистого прокси.
# 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 } } }'
Один апстрим + два плагина
Используется один апстрим с двумя плагинами. Основной тест производительности APISIX при включении двух плагинов, потребляющих ресурсы: limit-count и 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 } } }'
Сравнение данных
В двух вышеуказанных сценариях были проведены тесты и сравнения на уровне запросов QPS (запросов в секунду) и времени задержки. Результаты следующие:
-
Сравнение QPS

-
Сравнение задержек

| | Один апстрим + без плагинов | Один апстрим + два плагина | | ------------------ | --------------------------- | ----------------------------- | --------------- | ---------------- | | | Azure Ddsv5 | Azure Dpdsv5 | Azure Ddsv5 | Azure Dpdsv5 | | QPS(запросов/с) | 14900 | 13400 | 13100 | 11000 | | Задержка(мс) | 1.07 | 1.21 | 1.21 | 1.43 |
Из приведенных данных видно, что в сценариях с интенсивными вычислениями, связанными с сетевым IO, таких как API-шлюзы, Dpdsv5 все еще отстает по производительности от Ddsv5 той же серии. Однако хорошая новость заключается в том, что цена Dpdsv5 примерно на 20% ниже, чем у Ddsv5 при той же конфигурации. При выборе машины пользователи могут принимать гибкие решения в зависимости от объема своих бизнес-задач.
Итог
В этой статье мы сравнили производительность Azure Ddsv5 и Azure Dpdsv5 с использованием Apache APISIX. Видно, что в сценариях с интенсивными вычислениями, связанными с сетевым IO, такими как API-шлюзы, Azure Dpdsv5 не так ярко выделяется по сравнению с Ddsv5. Однако, поскольку эта серия моделей все еще находится на стадии предварительного просмотра, Microsoft продолжает вносить улучшения и оптимизации. Будем ждать дальнейших обновлений.
Ссылка
Now in preview: Azure Virtual Machines with Ampere Altra Arm-based processors