サービスグループは、統一されたエンドポイントを介してトラフィックを処理する複数のサービスを管理します。システムは、定義された割り当てポリシーに基づいて、着信トラフィックをこれらのサービスに分散します。この方法は、カナリアリリース、弾力的スケーリング、異種リソーススケジューリングに最適です。このトピックでは、サービスグループの作成、トラフィックエンドポイントの表示、トラフィック割り当てポリシーの変更方法について説明します。
利用シーン
-
カナリアリリース
本番サービスとカナリアサービスを同じグループに追加します。次に、少量のトラフィックをカナリアサービスに割り当てます。新しいバージョンをリリースする際は、まずカナリアサービスを更新し、そのパフォーマンスをモニターします。問題が発生した場合は、カナリアサービスをロールバックするか、停止してそのトラフィックを本番サービスにシフトします。新しいバージョンが期待どおりに実行された場合は、本番サービスにデプロイできます。更新後、カナリアサービスのレプリカ数をゼロにスケールダウンするか、少量のトラフィックを処理するために維持することができます。
-
サブスクリプションベースと従量課金の弾力的スケーリング
ベースライン需要に対応するため、レプリカ数を固定した専用リソースグループにサブスクリプションベースのサービスをデプロイします。トラフィックスパイクに対応し、コストを削減するためには、パブリックリソースグループで従量課金サービスを使用します。
-
異種ハードウェアリソースの使用
GPU アクセラレーションシナリオにおいて、特定の GPU モデルがリージョンで利用できなくなると、サービスのスケールアウトが妨げられる可能性があります。サービスグループを使用すると、さまざまな CUDA 環境と互換性のある異なる GPU モデルを持つサービスを動的に作成することで、この問題を克服できます。これにより、複数のサービスが異種リソースを使用して同じビジネスシナリオをサポートできます。サービスグループのトラフィックエンドポイントは変更されないため、これらの変更はフロントエンドに対して透明です。
サービスグループの作成
サービスの作成時に、サービスをサービスグループに割り当てることができます。
サービスを作成してグループに割り当てる際、グループが存在しない場合はシステムによって作成されます。グループが既に存在する場合、サービスはそのグループに追加されるだけです。グループの最後のメンバーサービスが削除されると、グループは自動的に削除されます。
次の例では、pmml という名前のサービスグループを作成し、pmml_prod と pmml_grey の 2 つのサービスをそのグループに割り当てる方法を示します。
コンソール
-
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。
-
Canary Release タブで、Create Group and Service をクリックします。
-
Custom Deployment ページで、パラメーターを設定し、Deploy をクリックします。
主要なパラメーター:
-
Service Name:画面のプロンプトに従ってサービス名を設定します。この例では、pmml_prod に設定します。
-
Group:New Group を選択し、この例では値を pmml に設定します。
その他のパラメーターについては、「カスタムデプロイメント」をご参照ください。
-
ステップ 2 と 3 を繰り返し、pmml_grey サービスを作成して pmml サービスグループに割り当てます。
サービスが作成されたら、Canary Release タブに移動し、グループ名 pmml をクリックしてグループ詳細ページに移動します。このページには、グループに属するサービスのリストが表示されます。
グループ詳細ページには 2 つのサービスがリストされます:pmml_grey サービスはトラフィック割り当てが無効になっており、重みも割り当てられていません。一方、pmml_prod サービスは有効になっており、重みは 100 です。
デフォルトでは、新しく追加されたサービスはグループからトラフィックを受信しません。トラフィックを有効にするには、「トラフィック割り当てポリシーの変更」をご参照ください。
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/pmml
Canary Release タブで、サービスグループのトラフィックエンドポイントを表示できます。このエンドポイントへのトラフィックは、割り当てポリシーに基づいて異なるサービスに分散されます。エンドポイントアドレスは、グループにサービスが追加または削除されても一定であるため、オンラインデバッグに信頼性があります。
グループの [呼び出し情報] をクリックします。表示されるダイアログボックスで、[サービスグループのパブリックエンドポイント] タブと [サービスグループの VPC エンドポイント] タブを切り替えて、対応する呼び出しアドレスとトークン情報を表示できます。
個別サービスのエンドポイント
<endpoint>/api/predict/<group_name>.<service_name>
例:
http://182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml.pmml_prod
Inference Service タブで、個別サービスのトラフィックエンドポイントを表示できます。このエンドポイントは、トラフィックをそのサービス専用に転送し、サービスが削除されると削除されます。サービスがグループからトラフィックを受信していない場合でも、この個別エンドポイントを使用してターゲットを絞ったデバッグができます。
対象サービスの [操作] 列で、[呼び出し情報] をクリックします。表示されるダイアログボックスで、[パブリックエンドポイント呼び出し] タブを選択して、パブリック呼び出し URL とトークンを取得します。
トラフィック割り当てポリシーの変更
EAS は現在、2 つのトラフィック割り当て方法をサポートしています:
-
Replica Allocation:トラフィックは、各サービスのレプリカ数に基づいて動的に割り当てられます。たとえば、サービス A に 1 つのレプリカがあり、サービス B に 3 つのレプリカがある場合、サービス A はトラフィックの 25% を受信し、サービス B は 75% を受信します。
-
Custom Allocation:トラフィックは、各サービスに割り当てられたカスタムの重みに基づいて割り当てられます。たとえば、サービス A のトラフィックの重みが 100 で、サービス B のトラフィックの重みが 400 の場合、サービス A はトラフィックの 20% を受信し、サービス B は 80% を受信します。
割り当て方法に関係なく、トラフィック割り当てが無効になっているサービスは、グループからのトラフィックの受信を停止しますが、個別エンドポイント経由でアクセス可能です。
以下のセクションでは、トラフィック割り当てポリシーの変更方法について説明します。
API を使用して、サービストラフィックの重みと状態を調整することもできます。詳細については、「サービストラフィックの重みとトラフィック状態の調整」をご参照ください。
レプリカ数
コンソール
トラフィック割り当て列のスイッチをオンにすると、サービスがトラフィック分散に含まれます。オフにすると、サービスは除外されます。
ページの上部にある [インスタンス数でトラフィックを割り当て] をクリックすると、[トラフィックの重み] の代わりにレプリカ数に基づいてトラフィックが分散されます。
EASCMD
release コマンドを次のフォーマットで実行します。EASCMD クライアントへのログイン方法については、「クライアントのダウンロードと認証」をご参照ください。
$ 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: standaloneeascmd 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: groupingeascmd 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% を受信するようになります。
カスタムの重み
[トラフィックの重み] 列の値を直接編集できます。
サービスの [トラフィックの重み] の値の横にある編集アイコンをクリックするか、[カスタムの重みでトラフィックを割り当て] をクリックしてバッチ割り当てモードに入ります。