本文介紹如何快速完成服務治理核心能力的體驗。
前提條件
-
說明
-
Kubernetes叢集要求最低配置:12 Core 24 GiB。
-
對於Kubernetes叢集網路要求有公網存取權限,用於下載GitHub中的Demo。
-
開放EIP暴露API Server,用於CloudShell訪問。
-
-
ACK叢集安裝ack-kubernetes-cronhpa-controller組件,可參見安裝組件。
如果使用的是子賬戶,可以聯絡主賬戶臨時授予AliyunMSEFullAccess許可權,完成體驗後再移除,生產實踐中應按需授權許可權,有關服務治理授權請參見微服務治理中心授權。
部署Demo
Demo介紹
該Demo使用Nacos作為註冊中心,存有兩個網關,分別為SpringCloudGateway和Zuul(兩者可選擇是否開啟),Demo的預設調用配置為A->B->C,其中A、C均有灰階版本。您可以在代碼倉庫擷取應用代碼。
|
應用程式名稱 |
服務架構版本 |
涉及組件 |
Demo |
|
Zuul |
Spring Cloud Greenwich |
zuul |
|
|
SpringCloudGateway |
spring-cloud-starter-gateway 4.1.2 |
spring-cloud-starter-gateway |
|
|
A |
Spring Cloud 2023.0.1 Dubbo 3.3.0 |
openfeign/httpclient/rocketmq/nacos/loadbalancer |
|
|
B |
Spring Cloud 2023.0.1 Dubbo 3.3.0 |
httpclient/mybatis/druid/nacos |
|
|
C |
Spring Cloud 2023.0.1 Dubbo 3.3.0 |
openfeign/httpclient/nacos |

Helm包下載
下載Demo的Helm包,官方會定期更新該Helm包和鏡像。
在 GitHub 倉庫 aliyun/alibabacloud-microservice-demo 的 Releases 頁面,找到最新版本(如 MSE Simple Demo V3.1.0),在 Assets 地區單擊下載 mse-simple-demo.zip 檔案。
部署方式
使用ACK的CloudShell部署mse-simple-demo
-
將mse-simple-demo檔案打包。
-
登入Container Service管理主控台。選擇目的地組群,在集群信息頁面,單擊通過 Workbench 管理叢集。
-
上傳Helm包。
在Cloud Shell工具列中,單擊檔案管理表徵圖,在彈出的菜單中選擇上傳。
-
使用命令
unzip mse-simple-demo.zip解壓Demo。 -
使用命令
kubectl create namespace mse-demo建立命名空間(對應--namespace)。
Helm方式部署mse-simple-demo
使用如下Helm命令部署mse-simple-demo。
helm upgrade mse-simple-demo mse-simple-demo \
--set mse.namespace=mse-demo \
--set gateway.springcloud=true \
--install \
--namespace mse-demo \
--values mse-simple-demo/values.yaml
其中可以修改的參數如下:
-
namespace: 要安裝到的K8s命名空間。可選,一般為default。 -
registry: 容器鏡像地址首碼。當您的叢集無法拉取 Demo 鏡像時,可以將 Demo 鏡像同步到您帳號下的鏡像倉庫並修改此地址。 -
images.version:鏡像版本,當前最新版本為 3.1.0。 -
mse.namespace: 接入MSE微服務治理的微服務命名空間,可以用來區分環境。預設值為mse-demo。 -
nacos.host: Nacos 註冊中心的地址。Demo 會自動拉起一個 Nacos Server,若您想將 Demo 應用註冊到其他 Nacos 地址,請配置此參數。 -
autoscaling:是否開啟自動調整。預設值為false,開啟此項前,請確認叢集已安裝 kubernetes-cronhpa-controller 組件。 -
resources.enable:是否設定resources的requests配置。預設值為true。
基礎功能驗證
全鏈路灰階
使用路徑:登入MSE治理中心控制台,在左側欄選擇治理中心>全链路灰度。
建立泳道組
在全链路灰度頁面:
-
單擊创建泳道组及泳道。如果您選擇的微服務空間內已經建立過泳道組,則單擊+建立泳道組。
-
在创建泳道组頁面,設定如下相關配置,然後單擊确定。
泳道組名稱:輸入泳道組名稱,例如demo。入口類型:選擇Java服務網關(也可選擇雲原生API Gateway、MSE雲原生網關或其他網關)。泳道組流量入口:選擇流量入口應用,例如spring-cloud-gateway。泳道組涉及應用:選擇泳道組涉及的應用,例如spring-cloud-a、spring-cloud-b、spring-cloud-c。
建立泳道
在全链路灰度頁面底部:
-
單擊点击创建第一个分流泳道。如果您選擇的微服務空間內已經建立過泳道,則單擊创建泳道。
-
在创建泳道面板,設定流控泳道相關配置,然後單擊确定。
例如,泳道名稱和泳道標籤均填寫
gray,確認匹配關係中包含 spring-cloud-a 和 spring-cloud-c,泳道狀態為開啟,灰階模式選擇按內容灰階,灰階條件選擇以下條件同時滿足,並在參數配置行設定參數類型為Parameter、參數為name、條件為==、值為xiaoming。建立完成後,泳道組詳情頁的 流量分配 地區顯示已建立的泳道資訊,包括泳道名稱(如
gray)、標籤、關聯應用列表(如spring-cloud-a、spring-cloud-c)、匹配條件(如param:[name]==xiaoming)及開啟狀態;上方 QPS 監控地區展示基準與灰階流量的請求數及趨勢折線圖。
普通請求走基礎版本
Web頁面的地址為網關SLB的地址,可以在Container Service控制台對應建立的叢集詳情頁面找到工作负载>无状态,在無狀態頁面單擊對應的spring-cloud-gateway網關進入詳情頁,單擊访问方式,在訪問方式的服務 (Service)欄下的外部端點列可以看到IP地址和連接埠。
在瀏覽器中訪問網關的SLB地址,進行如下請求。
在輸入框中輸入 /A/a 並單擊開始調用,返回的調用鏈路為 A[192.168.100.48] [config=base] → B → C[192.168.100.235],其中 B 節點在 192.168.100.51 和 192.168.100.53 兩個執行個體之間交替出現,表明普通請求以 config=base 標籤路由,流量在 B 的兩個基礎版本執行個體間均勻分配。
在瀏覽器中請求路徑 /A/dubbo,不攜帶灰階標籤(param:null),單擊 開始調用。調用鏈路日誌顯示大部分請求路由至基礎版本節點:A[192.168.100.48] → B[192.168.100.53] → C[192.168.100.235],少量請求經過 B[192.168.100.51],其中一條請求路由到灰階節點 Cgray[192.168.100.12]。
灰階請求走灰階版本
請輸入網址: /A/a?name=xiaoming
2025-3-4 16:22:19 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.53] -> Cgray[192.168.100.12]
2025-3-4 16:22:20 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.53] -> Cgray[192.168.100.12]
2025-3-4 16:22:20 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.53] -> Cgray[192.168.100.12]
2025-3-4 16:22:21 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.51] -> Cgray[192.168.100.12]
2025-3-4 16:22:21 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.53] -> Cgray[192.168.100.12]
2025-3-4 16:22:22 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.51] -> Cgray[192.168.100.12]
2025-3-4 16:22:22 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.51] -> Cgray[192.168.100.12]
2025-3-4 16:22:23 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.51] -> Cgray[192.168.100.12]
2025-3-4 16:22:23 返回 Agray[192.168.100.52] [config=base] -> B[192.168.100.53] -> Cgray[192.168.100.12]
訪問 /A/dubbo?name=xiaoming 介面,灰階鏈路追蹤日誌輸出:
2025-3-4 16:23:59 返回 Agray[192.168.100.52] -> B[192.168.100.51] param:null -> Cgray[192.168.100.12] param:null
2025-3-4 16:23:59 返回 Agray[192.168.100.52] -> B[192.168.100.51] param:null -> Cgray[192.168.100.12] param:null
2025-3-4 16:24:0 返回 Agray[192.168.100.52] -> B[192.168.100.53] param:null -> Cgray[192.168.100.12] param:null
2025-3-4 16:24:1 返回 Agray[192.168.100.52] -> B[192.168.100.53] param:null -> Cgray[192.168.100.12] param:null
2025-3-4 16:24:1 返回 Agray[192.168.100.52] -> B[192.168.100.51] param:null -> Cgray[192.168.100.12] param:null
2025-3-4 16:24:2 返回 Agray[192.168.100.52] -> B[192.168.100.53] param:null -> Cgray[192.168.100.12] param:null
2025-3-4 16:24:2 返回 Agray[192.168.100.52] -> B[192.168.100.51] param:null -> Cgray[192.168.100.12] param:null
無損上下線
使用路徑:登入MSE治理中心控制台,在左側欄選擇治理中心 > 应用治理 。在应用列表頁面單擊需要治理的應用,進入應用概覽頁面。
配置無損上下線
在應用概覽頁面的左側導覽列選擇流量治理。預設具備一部分無損上下線能力,需要完整能力可在控制台開啟並配置無損上下線相關配置。
在流量治理頁面單擊無損上下線頁簽,在配置資訊地區可查看無損上線和無損下線的開啟狀態以及主動通知配置,單擊右側修改可調整相關配置。
查看事件以及流程
在無損上下線頁面上方可查看當前配置資訊(無損上線開啟狀態、延遲註冊時間長度、小流量預熱時間長度、無損下線開啟狀態、主動通知狀態)。選擇上下線事件頁簽,左側事件列表展示各事件記錄,包含時間、節點IP-PID、事件名稱(如微服務應用停機、微服務註冊上線、微服務預熱開始、微服務無損下線)、架構類型及事件詳情。單擊某條事件(如微服務無損下線),右側顯示對應節點的QPS折線圖,可觀察服務下線時流量從正常水平平滑降至0的過程。
更多內容,請參見無損上下線。
流控規則
使用路徑:登入MSE治理中心控制台,在左側欄選擇治理中心 > 应用治理。在应用列表頁面單擊需要治理的應用,進入應用概覽頁面。
配置流控規則
在應用概覽頁面的左側導覽列選擇流量治理。在流量治理頁面選擇流量防护 > 接口流控,然後單擊新增流控规则。
在新增流控防護規則嚮導的配置防護規則步驟中,頂部資訊列顯示介面名稱、防護類型及介面類型。表單包含以下配置項:是否開啟開關用於控制規則是否生效;單機QPS閾值輸入框用於設定每秒請求數上限(例如填寫 5);流控效果提供快速失敗和排隊等待兩種選項,其中快速失敗表示超過閾值的流量直接返回預設流控資訊。單擊顯示進階選項可展開更多配置。完成後單擊下一步進入配置防護行為步驟。
限流效果
在瀏覽器中訪問網關的SLB地址,進行如下請求。
請求路徑為 /A/flow,單擊開始調用後,大部分請求返回 Blocked by Sentinel (flow limiting),僅少量請求成功通過並返回服務調用鏈路:A[192.168.100.45][config=base] → B[192.168.100.53] → C[192.168.100.235]。
A有一個節點,單機限流5,通過QPS穩定5。

更多內容,請參見什麼是流量防護。
請求樣本
localhost需要換成網關SLB的地址,可以進入到網關的Pod中發起請求。
# 普通請求
http://localhost:20000/A/a
A[10.0.0.47][config=base] -> B[10.0.0.39] -> C[10.0.0.48]
# 灰階請求
http://localhost:20000/A/a?name=xiaoming
Agray[10.0.0.41][config=base] -> B[10.0.0.55] -> Cgray[10.0.0.30]
# 普通請求(Feign)
http://localhost:20000/A/aByFeign
A[10.0.0.47][config=base] -> B[10.0.0.55]
# 普通請求(a先後請求b和c)
http://localhost:20000/A/a2bc
A[10.0.0.47][config=base] -> C[10.0.0.48]
A[10.0.0.47][config=base] -> B[10.0.0.55] -> C[10.0.0.49]
# Dubbo請求
http://localhost:20000/A/dubbo
A[10.0.0.44] -> B[10.0.0.39]name:A -> C[10.0.0.49] params:A
# Dubbo灰階請求
http://localhost:20000/A/dubbo?name=xiaoming
Agray[10.0.0.41] -> B[10.0.0.39]name:A -> Cgray[10.0.0.30] params:A
# 限流測試用請求
http://localhost:20000/A/flow
A[10.0.0.17][config=base] -> B[10.0.0.39] sleepTime:9 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-flow
A[10.0.0.17] -> B[10.0.0.55]name:A -> C[10.0.0.48] params:A
http://localhost:20000/A/isolate
A[10.0.0.42][config=base] -> B[10.0.0.55] sleepTime:504 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-isolate
A[10.0.0.17] -> B[10.0.0.55]name:isolate -> C[10.0.0.49] params:isolate
http://localhost:20000/A/params/hot
A[10.0.0.17][config=base] params:hot -> B[10.0.0.55] sleepTime:5 params:hot -> C[10.0.0.49] sleepTime:6 params:hot code:200
http://localhost:20000/A/dubbo-params/hot
A[10.0.0.17] params:hot -> B[10.0.0.55]name:hot -> C[10.0.0.49] params:hot
# 資料庫請求
http://localhost:20000/A/sql?command=query&id=1
A[10.0.0.44][config=base] -> B[10.0.0.39] result:{"age":1,"email":"emailUpdate%40demo.com","id":1,"name":"name1Update"}
http://localhost:20000/A/sql?command=update&name=name1Update&email=emailUpd***@demo.com&age=1&id=1
A[10.0.0.44][config=base] -> B[10.0.0.55] result:true
# spring boot 請求
http://localhost:20000/spring_boot
更多說明
應用接入
目前使用的方式是為每個需要接入的應用都顯式地在Deployment的Label中配置了msePilotAutoEnable: "on"進行接入。實際使用中,您可以通過MSE的營運中心給K8s叢集的命名空間開啟微服務治理,進行批量接入。
更多內容,請參見ACK和ACS微服務應用接入MSE治理中心(Java版)。
無損上下線
如果剛開始部署的時候沒有開啟無損上下線,但是後續的過程中想觀察,可以通過如下方式開啟。
-
如果您需要使用詳細的無損上下線功能,可以登入Container Service控制台的叢集資訊頁面,選擇左側導覽列的營運管理 > 組件管理,在搜尋方塊中搜尋
cronhpa然後單擊安装。 -
使用如下YAML建立定時伸縮任務,其中Namespace欄位要和安裝Helm時選擇的K8s Namespace一致。
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-deployment-spring-cloud-b
namespace: mse-demo # 注意 namespace 欄位要和 helm install 時選擇的 k8s namespace 一致
spec:
jobs:
- name: 擴容
schedule: 0 0/6 * * * *
targetSize: 6
- name: 縮容
schedule: 0 5/6 * * * *
targetSize: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: spring-cloud-b
網關自動請求配置
預設開啟各種請求的自動發送,可以登入Container Service控制台的叢集資訊頁面,單擊導覽列工作负载 > 无状态,進入無狀態頁面之後單擊spring-cloud-gateway應用。進入詳情頁之後,單擊頁面右上方编辑,可以配置如下環境變數來做到各種請求的自動發起配置。
|
環境變數key |
含義 |
預設值 |
|
enable.auto |
自動流量總開關 |
true |
|
enable.rpc.invoke |
Dubbo請求開關 |
true |
|
enable.sql |
資料庫請求開關 |
true |
|
enable.sentinel.demo.flow |
sentinel規則相關請求開關,其中
|
true |
|
enable.gray |
打標方式灰階請求開關 |
false |
|
demo.qps |
請求速率qps(控制/a的請求速率,其他請求相對速率) |
20 |