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

入群交流:

為方便大家交流、參會,您可掃描二維碼加入『合肥雲原生技術沙龍交流群』。