背景
往年 4 月,微软发表推出基于 Ampere® Altra® Arm 处理器的 Azure 虚拟机系列预览版。新的 VM 系列包含通用 Dpsv5 和内存优化的 Epsv5,具体信息参考下图:
值得注意的是,Ampere® Altra® Arm 是一款云原生处理器,基于 Ampere® Altra® Arm 处理器的 Azure 虚拟机也因而能以高效的形式运行横向扩大的云原生应用程序。
那么理论体验和性能如何呢?接下来咱们将以一个云原生的 API 网关为例,带大家一起看看基于 ARM 架构的 Azure 虚拟机的体现。这里,咱们抉择了 Apache APISIX 在通用型 Dpdsv5 系列虚拟机上进行装置测试。
Apache APISIX 是一个云原生、高性能、可扩大的 API 网关。基于 NGNIX + LuaJIT 和 etcd,APISIX 与传统 API 网关相比,具备动静路由和插件热加载个性,特地适宜云原生架构下的 API 治理。
后期筹备
首先,咱们在 Azure 上启动一个 Dpdsv5 系列的实例,操作系统抉择 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 是 Azure D 系列的另一款机型,是基于 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 中只启用了一个 Worker,以下性能测试数据均在单核 CPU 上运行。
场景一:单上游
该场景下将应用单个上游(不蕴含任何插件),次要测试 APISIX 在纯代理回源模式下的性能体现。在本地环境中进行测试:
# apisix: 1 worker + 1 upstream + no plugin
# 注册路由
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}
}
}'
场景 2:单个上游 + 两个插件
该场景下将应用单个上游与两个插件进行,次要测试 APISIX 在开启 limit-count
和 prometheus
两个外围性能耗费插件时的体现。
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# 注册路由
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(request/sec) | 14900 | 13400 | 13100 | 11000 |
Latency(ms) | 1.07 | 1.21 | 1.21 | 1.43 |
从以上数据也能够看出,在 API 网关等网络 IO 密集计算场景下,Dpdsv5 相比同系列 Ddsv5 在性能上依然有差距。不过好消息是,在等同配置的状况下,Dpdsv5 的价格要比 Ddsv5 便宜 20% 左右。在理论机器选型时,用户能够依据本人的业务体量来灵便决策。
总结
本文次要应用 Apache APISIX 来比照 Azure Ddsv5 和 Azure Dpdsv5 的性能。从后果能够看出 Azure Dpdsv5 相比 Ddsv5,体现尽管不是那么亮眼,然而因为该系列的机型尚处于预览版,微软正在进行继续的改良和优化,咱们也十分期待它的后续体现。