Azure ARMアーキテクチャサーバーのパフォーマンスはどうですか?
API7.ai
August 8, 2022
背景
4月に、MicrosoftはAmpere® Altra® ArmプロセッサをベースにしたAzure仮想マシンのファミリーのプレビューを発表しました。新しいVMシリーズには、汎用Dpsv5とメモリ最適化Epsv5 VMが含まれています。詳細は以下の図を参照してください:
特に、Ampere® Altra® Armはクラウドネイティブプロセッサであり、Ampere® Altra® ArmプロセッサをベースにしたAzure仮想マシンは、スケールアウト型のクラウドネイティブアプリケーションを効率的に実行できます。
では、実際の体験と性能はどうでしょうか?クラウドネイティブAPIゲートウェイを例に、ArmアーキテクチャをベースにしたAzure仮想マシンの性能を紹介します。ここでは、汎用Dpdsv5シリーズ仮想マシン環境でApache APISIXを選択し、インストールとテストを行います。
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
上記の操作から、Azure Dpdsv5でのApache APISIXのインストールと互換性テストが正常に完了することがわかります。では、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の純粋なプロキシバックトゥオリジンモードでの性能をテストします。
# 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
}
}
}'
シングルアップストリーム + 2つのプラグイン
シングルアップストリームを使用し、2つのプラグイン。主に、limit-countとprometheusという2つのコア性能消費プラグインが有効な場合のAPISIXの性能をテストします。
# 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
}
}
}'
データ比較
上記の2つのシナリオで、リクエストQPS(1秒あたりのクエリ数)と遅延時間の2つのレベルから関連するテストと比較を行いました。結果は以下の通りです:
-
QPS比較
-
遅延比較
| | シングルアップストリーム + プラグインなし | シングルアップストリーム + 2つのプラグイン | | ------------------ | --------------------------- | ----------------------------- | --------------- | ---------------- | | | Azure Ddsv5 | Azure Dpdsv5 | Azure Ddsv5 | Azure Dpdsv5 | | QPS(request/s) | 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の性能を比較しました。APIゲートウェイのようなネットワークIO集約型の計算シナリオでは、Azure Dpdsv5はDdsv5と比較してそれほど目立たないことがわかりますが、このシリーズのモデルはまだプレビュー段階であり、Microsoftは継続的な改善と最適化を行っています。その続編に期待しています。
参考
Now in preview: Azure Virtual Machines with Ampere Altra Arm-based processors