對于多個子服務共同承接業務流量的場景,您可以創建服務分組。服務分組擁有統一的流量入口,系統按照流量分配策略將入口流量分配給每個服務,您也可以指定服務分組中每個服務的流量比例,實現資源有效利用。本文為您介紹如何創建服務分組、查看流量入口及修改流量分配策略。
應用場景
通過服務分組功能,您可以實現以下幾種典型的應用場景:
灰度發布
將兩個服務加入同一個服務分組,一個服務用做生產,一個服務用作灰度,灰度服務配置較少的實例個數,兩個服務承載的流量比例按照服務的實例個數進行分配。
新版本服務發布時,您可以先更新灰度服務,并觀察線上運行情況。如果運行出現問題,可以將灰度服務版本快速回滾,您也可以停止灰度服務,并將流量切換到生產服務中;如果灰度服務運行正常,則可以全量更新生產服務,更新完成后將灰度服務縮容至0,也可以保留灰度服務繼續承載線上少部分流量。
藍綠發布
將兩個獨立的服務加入同一個服務分組,每個服務承載的流量比例不再按照服務的實例個數進行分配,您可以指定每個服務承載的流量比例,比如服務A承載25%的流量,服務B承載75%的流量。
預付費和后付費彈性伸縮
您可以在同一個服務分組中創建服務,將一個服務部署在預付費專屬資源組中,并固定服務中的實例個數來支撐基本的業務需求;同時在公共資源組中創建后付費服務,將該服務按照業務屬性配置彈性伸縮,滿足彈性的業務流量,實現公共資源和專屬資源的共用,有效降低成本。
使用異構硬件資源
在GPU加速場景中,單個服務一般使用一種卡型。服務部署完成后,部分卡型在某些地域可能會出現停卡或庫存不足的問題,導致服務無法正常擴容。您可以通過服務分組功能,在同一個服務分組中使用不同的卡型動態創建新服務。因為不同卡型對CUDA環境有不同程度的依賴,不同服務可以適配不同的卡型,從而實現多個服務使用異構資源支持同一業務的場景。因為服務分組的流量入口不變,后端在分組中創建多少個服務,均可以實現前端透明無感知。
創建服務分組
創建服務時,您可以指定服務歸屬于某個服務分組,通過這種方式創建服務分組,并將對應的服務歸納到該服務分組中。
如果您在創建服務時,指定的服務分組名稱不存在,則系統會自動創建一個服務分組;如果服務分組名稱存在,則新創建的服務會自動加入該服務分組;當服務分組中最后一個服務被刪除時,服務分組會自動刪除。
下面以創建一個pmml服務分組,并將pmml_prod和pmml_grey兩個服務歸屬到該服務分組為例,示例如何創建服務分組。
通過控制臺方式創建服務分組
進入模型在線服務(EAS)頁面。
登錄PAI控制臺。
在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應的工作空間。
在工作空間頁面的左側導航欄選擇 ,進入模型在線服務(EAS)頁面。
在服務群組頁簽,單擊新建分組服務。
在服務群組頁面,配置參數,并單擊部署。
參照步驟2~3,創建服務pmml_grey歸屬于服務群組pmml。
服務創建成功后,您可以單擊群組名稱pmml進入群組詳情頁面,查看歸屬于該群組的服務列表。
通過客戶端方式創建服務分組
準備服務的配置文件service.json。
pmml_prod服務的配置文件。
{ "name":"pmml_prod", "model_path":"http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr_xxxx.pmml", "processor":"pmml", "metadata":{ "cpu":1, "instance":4, "group":"pmml", "traffic_state": "grouping" } }
pmml_grey服務的配置文件。
{ "name":"pmml_grey", "model_path":"http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr_xxxx.pmml", "processor":"pmml", "metadata":{ "cpu":1, "instance":1, "group":"pmml", "traffic_state": "grouping" } }
配置文件中的關鍵參數解釋:
group:用來指定服務歸屬于哪個服務分組,即創建的服務分組的名稱。
traffic_state:用來指定服務在服務分組中是否承載流量,支持配置以下兩個參數:
grouping:表示承載服務分組中的流量。
standalone:表示不承載服務分組中的流量。
說明如果配置文件中沒有配置traffic_state字段,表示服務默認承載服務分組的流量。如果您不希望加入服務分組的服務立即承載服務分組的流量,可以將traffic_state字段配置為standalone。
當服務分組中只有一個服務時,如果該服務的流量狀態為standalone,則系統會自動將該服務的流量狀態設置為grouping。
配置文件中的其他參數解釋,詳情請參見命令使用說明。
創建服務及服務分組。
您可以登錄eascmd客戶端后使用
create
命令創建服務及服務分組,如何登錄eascmd客戶端,請參見下載并認證客戶端,使用示例如下所示。$ 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
您可以在控制臺頁面,參照下圖操作指引,查看服務群組流量入口。
從該流量入口進入的流量,會根據不同的流量分配策略分配到服務分組中不同的服務,您可以在服務分組中創建服務或刪除服務,該入口始終保持不變,您可以使用該入口地址進行在線調試。
單個服務流量入口。
<endpoint>/api/predict/<group_name>.<service_name>
使用示例。
http://182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml.pmml_prod
您可以在控制臺頁面,參照下圖操作指引,查看單個服務流量入口。
該入口與具體服務的生命周期相關聯,從該入口進入的流量始終會流入指定的服務中,與流量分配策略無關。相關的服務刪除后,該入口會同時被銷毀。通常在完成分組切流后,您仍需要使用該入口的訪問地址訪問服務并進行在線調試。
修改流量分配策略(分組切流與藍綠切流)
EAS當前支持兩種切流方式:分組切流和藍綠切流,服務創建成功后默認為分組切流,支持將分組切流切換為藍綠切流,且兩種切流方式均支持修改流量分配策略。
分組切流
切流模式介紹
新創建服務并指定服務分組后,加入服務分組的服務默認為分組切流方式,且直接開始承接服務分組的流量,服務分組按照服務中實例的個數來分配流量,因此實例數多的服務會分配更多的流量。
修改流量分配策略
通過控制臺方式,參照下圖操作指引,修改流量分配策略。打開③位置開關,表示該服務承接流量;關閉③位置開關,表示該服務不承接流量。
使用
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%的流量。
藍綠切流
切流模式介紹
藍綠切流功能僅支持一個服務分組中有兩個服務的場景,當使用藍綠切流功能為其中一個服務切流N%的時候,另一個服務的流量比例自動切換為(100-N)%。如果刪除服務分組中的一個服務,流量會全部流入另一個服務中。
修改切流模式
當服務使用分組切流方式時,支持切換為藍綠切流方式,命令格式如下所示。
重要藍綠切流和分組切流兩種方式互斥,當服務切換為藍綠切流方式后,不再支持使用分組切流方式。
$ eascmd release <service_name> -w <權重值>
其中
<service_name>:服務名稱,需要替換為待修改的服務名稱。
<權重值>:服務的流量權重,取值為[0,100]。
使用示例請參見下文的修改流量分配策略。
修改流量分配策略
您可以通過藍綠切流功能,指定不同服務的流量權重,使用示例如下所示。
$ eascmd release pmml_grey -w 27
系統輸出如下結果。
Confirmed to release service [pmml_grey] at weight [27%]? [Y/n]yes [RequestId]: DD8F8EC2-D726-5E37-9C0B-B360F61C810A [OK] Service [pmml_grey] is weighted to 27% now
使用
eascmd ls
命令查詢服務的運行狀態,系統輸出如下結果。[RequestId]: 51789E0B-88E7-5293-828B-1EFAD2EEA003 +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | SERVICENAME | INSTANCE | CPU | MEMORY | CREATETIME | UPDATETIME | STATUS | WEIGHT | TRAFFICSTATE | SERVICEGROUP | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+ | pmml_prod | 4 | 1 | 1000M | 2022-06-05T14:30:49Z | 2022-06-05T14:53:20Z | Running | 73 | blue-green | pmml | | pmml_grey | 1 | 1 | 1000M | 2022-06-05T14:50:14Z | 2022-06-05T14:53:20Z | Running | 27 | blue-green | pmml | +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
其中服務pmml_grey的TRAFFICSTATE已更新為blue-green,表示使用藍綠切流方式,WEIGHT為27,表示將27%的流量切入pmml_grey服務中。