サービスグループは、統一されたトラフィック流入ポイントを介してサービストラフィックを処理する複数のサブサービスを管理します。システムは、トラフィック割り当てポリシーに基づいて、着信トラフィックを個別のサービスに分散します。このアプローチにより、カナリーリリース、Auto Scaling、異種ハードウェアリソースのスケジューリングなど、さまざまなビジネスシナリオをサポートします。本トピックでは、サービスグループの作成方法、そのトラフィック流入ポイントの確認方法、およびトラフィック割り当てポリシーの変更方法について説明します。
シナリオ
カナリーリリース
本番サービスとカナリーサービスの両方を同一のグループに追加し、カナリーサービスには少ないトラフィックを割り当てます。新バージョンをリリースする際は、まずカナリーサービスを更新し、その動作を観察します。問題が発生した場合は、カナリーサービスをロールバックするか、停止してすべてのトラフィックを本番サービスに切り替えます。正常に動作した場合は、本番サービスを完全に更新した後、カナリーサービスのレプリカ数をゼロにスケールインするか、最小限のトラフィックのみを維持します。
サブスクリプションおよび従量課金による Auto Scaling
同一のグループ内で、ベースライン需要を満たすために固定数のレプリカを持つ専用リソースグループにサブスクリプション型サービスをデプロイします。また、コスト削減のため、パブリックリソースグループに従量課金型サービスをデプロイし、必要に応じて弾性的にスケールさせます。
異種ハードウェアリソースの活用
GPU 加速のシナリオにおいて、サービスデプロイ後に特定のリージョンで一部の GPU 型番が利用不可または在庫切れとなる場合があり、通常のスケールアウトが妨げられることがあります。この場合、サービスグループ機能を活用して、同一のサービスグループ内に異なる GPU 型番を備えたサービスを動的に作成することで、さまざまな CUDA 環境への対応が可能になります。これにより、複数のサービスが異種リソースを活用して同一のビジネスシナリオをサポートできます。サービスグループのトラフィック流入ポイントは変更されないため、フロントエンドは透過的であり、影響を受けません。
サービスグループの作成
サービスを作成する際に、その所属先となるサービスグループを指定します。この操作により、該当のサービスグループ(存在しない場合は自動的に作成)が生成され、サービスがそのグループに追加されます。
サービス作成時に指定したサービスグループ名が存在しない場合、システムが自動的にグループを作成します。既に存在する場合は、新しいサービスがそのグループに参加します。サービスグループ内の最後のサービスを削除すると、グループは自動的に削除されます。
以下の例では、pmml という名前のサービスグループを作成し、pmml_prod および pmml_grey の 2 つのサービスをそのグループに割り当てます。
コンソール
-
PAI コンソールにログインします。ページ上部からリージョンを選択し、目的のワークスペースを選択して、Elastic Algorithm Service (EAS) をクリックします。
Canary Release タブで、Create Group and Service をクリックします。
Custom Deployment ページでパラメーターを設定し、Deploy をクリックします。
以下に示すとおり:
Service Name: UI の指示に従って設定します。例: pmml_prod。
Group: New Group を選択します。例: pmml。
その他のパラメーターの詳細については、「カスタムデプロイメント」をご参照ください。
手順 2~3 を繰り返して、pmml_grey サービスを作成し、pmml サービスグループに割り当てます。
作成が完了したら、Canary Release タブに移動し、グループ名 pmml をクリックして、グループ内のサービス一覧を確認します。

後からグループに追加されたサービスは、デフォルトでトラフィックを処理しません。「トラフィック割り当てポリシーの変更」をご参照ください。
EASCMD クライアント
service.json サービス構成ファイルを準備します。例:
group フィールドはサービスグループ名を指定します。その他のパラメーターについては、「JSON デプロイメント」をご参照ください。
サービスおよびサービスグループを作成します。
EASCMD クライアントにログインした後、
createコマンドを使用します。クライアントのセットアップ手順については、「クライアントのダウンロードと認証」をご参照ください。例:$ eascmd create service.jsonサービスおよびグループの詳細を確認します。
lsコマンドを使用します。例:$ eascmd lsシステムからの応答例:
[RequestId]: 716BEBFC-E8A4-51FD-A3F7-56376B167923 +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | SERVICENAME | INSTANCE | CPU | MEMORY | CREATETIME | UPDATETIME | STATUS | WEIGHT | TRAFFICSTATE | SERVICEGROUP | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | pmml_prod | 4 | 1 | 1000M | 2022-06-05T14:30:49Z | 2022-06-05T14:30:49Z | Running | 80 | grouping | pmml | | pmml_grey | 1 | 1 | 1000M | 2022-06-05T14:31:38Z | 2022-06-05T14:31:38Z | Running | 20 | grouping | pmml | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+場所:
SERVICEGROUP が pmml であることは、両サービスが pmml サービスグループに属していることを示します。
TRAFFICSTATE が grouping であることは、両サービスがレプリカ数に応じた 80:20 の比率でトラフィックを共有していることを意味します。
トラフィック流入ポイントの確認
サービスグループには統一されたトラフィック流入ポイントがあります。また、グループ内の各サービスにも独自の独立した流入ポイントがあります。
サービスグループのトラフィック流入ポイント
<endpoint>/api/predict/<group_name>例:
http://182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmmlCanary Release タブで、サービスグループのトラフィック流入ポイントを確認できます。このアドレスに送信されたトラフィックは、現在のポリシーに基づいて個別のサービスに分散されます。サービスをグループから追加または削除しても、このアドレスは変更されないため、オンラインデバッグに適しています。

個別サービスのトラフィック流入ポイント
<endpoint>/api/predict/<group_name>.<service_name>例:
http://182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml.pmml_prodInference Service タブで、個別サービスの流入ポイントを確認できます。このアドレスはサービスのライフサイクルに紐づいており、常にその特定のサービスにトラフィックをルーティングします。サービスが削除されると、このアドレスも破棄されます。グループ単位のトラフィック切り替え後は、このアドレスを使用してサービスにアクセスおよびデバッグを行います。

トラフィック割り当てポリシーの変更
EAS では、以下の 2 種類のトラフィック割り当て方法をサポートしています。
Replica Allocation: トラフィックは、各サービスの推論レプリカ数に応じて動的に割り当てられます。たとえば、サービス A が 1 レプリカ、サービス B が 3 レプリカの場合、A には 25 %、B には 75 % のトラフィックが割り当てられます。サービスのトラフィック割り当てを無効化すると、そのサービスはグループ内のトラフィック配分から除外されますが、個別には引き続きアクセス可能です。
Custom Allocation: トラフィックは、割り当てられた重みに基づいて割り当てられます。たとえば、サービス A の重みが 100、サービス B の重みが 400 の場合、A には 20 %、B には 80 % のトラフィックが割り当てられます。
いずれの方法を採用しても、サービスのトラフィック割り当てを無効化すると、そのサービスはグループ内のトラフィック配分から除外されますが、個別には引き続きアクセス可能です。
変更方法は以下のとおりです。
API を使用して、サービスのトラフィック重みおよびトラフィック状態を調整できます。詳細については、「サービスのトラフィック重みおよびトラフィック状態の調整」をご参照ください。
レプリカ単位の割り当て
コンソール
対応する列にあるトラフィック割り当てスイッチを切り替えます。ON はサービスがトラフィックを処理することを、OFF は処理しないことを意味します。

EASCMD
release コマンドを使用します。クライアントのセットアップについては、「クライアントのダウンロードと認証」をご参照ください。コマンド構文:
$ eascmd release <service_name> -s grouping|standaloneここで:
<service_name>: 対象サービス名に置き換えます。
grouping|standalone: 望ましい状態を指定します。grouping はサービスがトラフィックを処理することを意味し、standalone は処理しないことを意味します。
例:
サービス pmml_grey を standalone(トラフィックなし)に設定するには、以下のコマンドを実行します。
$ eascmd release pmml_grey -s standaloneシステムからの応答例:
Confirmed to release service [pmml_grey] to group traffic [Y/n]yes [RequestId]: 40C787DF-8900-5F7A-8A01-30F7D5A8BF3B [OK] Service [pmml_grey] has entered the traffic state: standaloneステータスを確認するには、
eascmd lsを実行します。応答例:[RequestId]: 83BE3FBB-8CE2-5008-B435-1938A20B13AA +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | SERVICENAME | INSTANCE | CPU | MEMORY | CREATETIME | UPDATETIME | STATUS | WEIGHT | TRAFFICSTATE | SERVICEGROUP | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | pmml_prod | 4 | 1 | 1000M | 2022-06-05T14:30:49Z | 2022-06-05T14:30:49Z | Running | 100 | grouping | pmml | | pmml_grey | 1 | 1 | 1000M | 2022-06-05T14:42:41Z | 2022-06-05T14:42:41Z | Running | 0 | standalone | pmml | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+この例では、pmml_grey の TRAFFICSTATE が standalone、WEIGHT が 0 に設定されているため、すべてのトラフィックが pmml_prod に送られます。
サービス pmml_grey を grouping(トラフィックあり)に設定するには、以下のコマンドを実行します。
$ eascmd release pmml_grey -s groupingシステムからの応答例:
Confirmed to release service [pmml_grey] to group traffic [Y/n]yes [RequestId]: 40C787DF-8900-5F7A-8A01-30F7D5A8BF3B [OK] Service [pmml_grey] has entered the traffic state: groupingステータスを確認するには、
eascmd lsを実行します。応答例:[RequestId]: 83BE3FBB-8CE2-5008-B435-1938A20B13AA +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | SERVICENAME | INSTANCE | CPU | MEMORY | CREATETIME | UPDATETIME | STATUS | WEIGHT | TRAFFICSTATE | SERVICEGROUP | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | pmml_prod | 4 | 1 | 1000M | 2022-06-05T14:30:49Z | 2022-06-05T14:30:49Z | Running | 80 | grouping | pmml | | pmml_grey | 1 | 1 | 1000M | 2022-06-05T14:42:41Z | 2022-06-05T14:42:41Z | Running | 20 | grouping | pmml | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+この例では、pmml_grey の TRAFFICSTATE が grouping に設定されており、レプリカ比率に応じて 20 % のトラフィックを処理します。
カスタム重み
トラフィック重み列で、重みを直接編集します。
