Apache APISIX 在微软云 ARM 和 x86 服务器上的性能测试对比

语言: CN / TW / HK

背景

今年 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

1. 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

2.启动 Apache APISIX 实例。

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

3.注册路由。


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

}

}

}'

4.访问测试。

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(每秒查询数) 和延迟时间两个层面进行了相关的测试对比。结果如下:

1. QPS 比较

2. 延迟比较

从以上数据也可以看出,在 API 网关等网络 IO 密集计算场景下,Dpdsv5 相比同系列 Ddsv5 在性能上仍然有差距。不过好消息是,在同等配置的情况下,Dpdsv5 的价格要比 Ddsv5 便宜 20% 左右。在实际机器选型时,用户可以根据自己的业务体量来灵活决策。

总结

本文主要使用 Apache APISIX 来对比 Azure Ddsv5 和 Azure Dpdsv5 的性能。从结果可以看出 Azure Dpdsv5 相比 Ddsv5,表现虽然不是那么亮眼,但是由于该系列的机型尚处于预览版,微软正在进行持续的改进和优化,我们也非常期待它的后续表现。

活动推荐

8 月 13 日,安徽开发者社区将联合 Apache APISIX 社区、SOFAStack 社区、云原生社区共同举办合肥云原生技术沙龙,并邀请到来自蚂蚁集团、KodeRover、Apache APISIX 社区的资深技术专家,聚焦云原生 DevOps、API 网关、Serverless 等领域,为大家带来一线的技术分享与最佳实践。欢迎广大云原生爱好者及开发者报名参与!

本次合肥云原生技术沙龙特别设置了 Apache APISIX Workshop 环节,届时感兴趣的小伙伴可以在活动现场直接参与,与行业大咖零距离互动交流噢~

温馨提示:

  • 参加的小伙伴请自带笔记本电脑

  • 提前准备好本地环境(具体细节参考下方表格)

本次 Workshop 中需要使用以下软件(以 macOS 操作系统为例),请提前安装并确保这些软件可以正常使用:

工具

版本

备注

Docker

>=

20.10.14

安装链接:https://yeasy.gitbook.io/

docker_practice/install

Docker Compose

>=

1.29.2

安装链接:https://yeasy.gitbook.io/

docker_practice/compose/install

Git

>=

2.31.1

系统默认提供

Vim/Vi

系统默认提供

wrk2

需要自己编译安装,

非必要,参考链接:https://github.com/giltene/wrk2

入群交流:

为方便大家交流、参会,您可扫描二维码加入『合肥云原生技术沙龙交流群』。