AKSで近接配置グループを使ってマイクロサービスの高速化
概要
AKS (他のKubernetes サービス含む) 上にマイクロサービスアプリケーションを実装していて問題になる1つとして、API間のパフォーマンスがあると思います。
可用性とパフォーマンスの双方を考慮し、アプリケーションを作っていくと言うのは難しいですね。
実際ゲームやECサイトでは課金用のAPIのレスポンスが遅いことによるユーザーからのクレームにも繋がります。
今回はAKSでAPIのレスポンスを上げる取り組みを試してみたいと思います。
実装
API間のレスポンスを向上させる方法の1つに、近接配置グループ ( Proximity placement groups ) を使う方法があります。
リソースを同一の場所に配置して、ネットワーク待ち時間を短縮するというものです。
クラスターのノードプールに近接配置グループを使い、API間通信の距離を短くすることで通信時間を短縮します。
作るには ポータル / Azure CLI / Azure PowerShell のいずれかで作成します。
公式ドキュメント docs.microsoft.com
ポータルからの作り方
AKSへの実装方法 docs.microsoft.com
Azure CLI で作成していく
リソースグループを作成します
az group create --name ppgtest --location japaneast
作成結果は以下のように出ます。
{ "id": "/subscriptions/xx0xxx00-00x0-0000-0x00-x0000x0x0x00/resourceGroups/ppgtest", "location": "japaneast", "managedBy": null, "name": "ppgtest", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
近接配置グループを作成します
az ppg create -n ppgdemo -g ppgtest -l japaneast -t standard
作成されたリソースID("id")を控えておきます。
{ "availabilitySets": null, "colocationStatus": null, "id": "/subscriptions/xx0xxx00-00x0-0000-0x00-x0000x0x0x00/resourceGroups/ppgtest/providers/Microsoft.Compute/proximityPlacementGroups/ppgdemo", "location": "japaneast", "name": "ppgdemo", "proximityPlacementGroupType": "Standard", "resourceGroup": "ppgtest", "tags": {}, "type": "Microsoft.Compute/proximityPlacementGroups", "virtualMachineScaleSets": null, "virtualMachines": null }
AKS クラスタを作成します
以下のコマンドはノード数も1に指定していますので最小限となります。
お使いの環境に合わせて構築してください。
ppg には前項の"id"を使います。
az aks create \ --resource-group ppgtest \ --name ppgtest \ --node-count 1 \ --generate-ssh-keys \ --ppg "/subscriptions/xx0xxx00-00x0-0000-0x00-x0000x0x0x00/resourceGroups/ppgtest/providers/Microsoft.Compute/proximityPlacementGroups/ppgdemo"
既存のAKSクラスタに追加する場合
az aks nodepool add \ --resource-group ppgtest \ --cluster-name ppgtest \ --name ppgtestnodepool \ --node-count 1 \ --ppg "/subscriptions/xx0xxx00-00x0-0000-0x00-x0000x0x0x00/resourceGroups/ppgtest/providers/Microsoft.Compute/proximityPlacementGroups/ppgdemo"
やってみた結果
ノード数10のクラスターに近接配置グループを追加して、API間の通信を20回計測してみたところ以下のような結果になりました。
計測にはAPI間の通信速度を計測できるよう分散トレーシングとしてJeagerをAKSクラスターとアプリケーションに仕込みました。
* before : 平均80ms
* after : 平均65ms
簡単なアプリケーションを使用したので劇的に早くなったわけではありませんが、多少の効果はみられました。
API間通信が遅いと感じてる方はぜひお試しください。