背景
AWS 在 2022 年 5 月底釋出了最新的基於 ARM 架構的 AWS Graviton 系列處理器——AWS Graviton3。據 AWS 官方資料顯示,與 Graviton2 處理器相比,基於領先的 DDR5 記憶體技術,Graviton3 處理器可提供高達 25% 的效能提升、高達 2 倍的浮點效能以及 50% 的記憶體訪問速度;在效能與同類 EC2 例項相同的情況下,Graviton3 還可減少 60% 的能源。
那麼實際資料會怎樣呢?讓我們以 CPU 密集型的 API 閘道器為例,來看看 AWS Graviton3 的表現如何。在這裡我們使用 Apache APISIX 在 AWS Graviton2(C6g)和 AWS Graviton3(C7g) 兩種伺服器環境下進行效能對比測試。
Apache APISIX 是一個雲原生、高效能、可擴充套件的 API 閘道器。基於 NGNIX+LuaJIT 和 etcd 來實現,和傳統 API 閘道器相比,APISIX 具備動態路由和外掛熱載入的特點,特別適合雲原生架構下的 API 管理。
準備:安裝部署
在進行測試前,需要準備一臺搭載 ARM64 晶片的伺服器,這裡我們選用了 Amazon EC2 C7g(現在只有這個型號才搭載 AWS Graviton3),作業系統選擇了 Ubuntu 20.04。
同時安裝 Docker。
sudo apt-get update && sudo apt-get install docker.io
目前,APISIX 已經發布了最新版本的 ARM64 映象,可以使用 Docker 方式進行一鍵部署。具體過程可參考下方:
- 啟動 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
- 啟動 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
.....
AWS Graviton2 和 AWS Graviton3 的效能對比
根據前文的操作,基於官方指令碼成功完成了 APISIX 在 AWS Graviton3 處理器上安裝和相容性測試。下面讓我們來看看 Apache APISIX 在 AWS Graviton2(C6g)和 AWS Graviton3(C7g)上的效能表現。
為了方便測試,本示例中 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
}
}
}'
場景二:單上游+多外掛
另一場景則使用單上游與多外掛配合,在這裡使用了兩個外掛。主要測試 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 對比
- Latency 對比
單個上游 | 單個上游+兩個外掛 | |||
AWS Graviton2 | AWS Graviton3 | AWS Graviton2 | AWS Graviton3 | |
QPS(request/s) | 13000 | 23000(提升76%) | 11000 | 18000(提升63%) |
Latency(ms) | 1.11 | 0.68(降低38%) | 1.39 | 0.88(降低37%) |
從上方資料可以看到,在 API 閘道器這樣 CPU 密集型的計算場景下,AWS Graviton3 比 AWS Graviton2 的效能提升了 76%,同時延遲還降低了 38%。這個資料比開頭提到的 AWS 官方給出的資料(25%效能提升)還要優異。
總結
本文主要通過使用 Apache APISIX 進行了 AWS Graviton3 與 AWS Graviton2 的效能對比,可以看到在 API 閘道器 CPU 密集型的計算場景下,AWS Graviton3 可謂展示了效能怪獸的屬性。當然,也推薦大家多多進行實踐,期待後續更多計算密集型專案的測試資料。