15分钟完成服务治理能力快速体验(Java版)

更新时间:
复制 MD 格式

本文介绍如何快速完成服务治理核心能力的体验。

前提条件

说明

如果使用的是子账户,可以联系主账户临时授予AliyunMSEFullAccess权限,完成体验后再移除,生产实践中应按需授权权限,有关服务治理授权请参见微服务治理中心授权

部署Demo

Demo介绍

Demo使用Nacos作为注册中心,存有两个网关,分别为SpringCloudGatewayZuul(两者可选择是否开启),Demo的默认调用配置为A->B->C,其中A、C均有灰度版本。您可以在代码仓库获取应用代码。

应用名称

服务框架版本

涉及组件

Demo

Zuul

Spring Cloud Greenwich

zuul

pom.xml

SpringCloudGateway

spring-cloud-starter-gateway 4.1.2

spring-cloud-starter-gateway

pom.xml

A

Spring Cloud 2023.0.1

Dubbo 3.3.0

openfeign/httpclient/rocketmq/nacos/loadbalancer

pom.xml

B

Spring Cloud 2023.0.1

Dubbo 3.3.0

httpclient/mybatis/druid/nacos

pom.xml

C

Spring Cloud 2023.0.1

Dubbo 3.3.0

openfeign/httpclient/nacos

pom.xml

image.png

Helm包下载

下载DemoHelm包,官方会定期更新该Helm包和镜像。

在 GitHub 仓库 aliyun/alibabacloud-microservice-demoReleases 页面,找到最新版本(如 MSE Simple Demo V3.1.0),在 Assets 区域单击下载 mse-simple-demo.zip 文件。

部署方式

使用ACKCloudShell部署mse-simple-demo

  1. mse-simple-demo文件打包。

  2. 登录容器服务管理控制台选择目标集群,在集群信息页面,单击通过 Workbench 管理集群

  3. 上传Helm包。

    Cloud Shell工具栏中,单击文件管理图标,在弹出的菜单中选择上传

  4. 使用命令unzip mse-simple-demo.zip解压Demo。

  5. 使用命令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:是否设置resourcesrequests配置。默认值为true。

基础功能验证

全链路灰度

使用路径:登录MSE治理中心控制台,在左侧栏选择治理中心>全链路灰度

创建泳道组

全链路灰度页面:

  1. 单击创建泳道组及泳道。如果您选择的微服务空间内已经创建过泳道组,则单击+创建泳道组

  2. 创建泳道组页面,设置如下相关配置,然后单击确定

泳道组名称:输入泳道组名称,例如demo入口类型:选择Java服务网关(也可选择云原生API网关、MSE云原生网关或其他网关)。泳道组流量入口:选择流量入口应用,例如spring-cloud-gateway泳道组涉及应用:选择泳道组涉及的应用,例如spring-cloud-aspring-cloud-bspring-cloud-c

创建泳道

全链路灰度页面底部:

  1. 单击点击创建第一个分流泳道。如果您选择的微服务空间内已经创建过泳道,则单击创建泳道

  2. 创建泳道面板,设置流控泳道相关配置,然后单击确定

    例如,泳道名称泳道标签均填写 gray确认匹配关系中包含 spring-cloud-a 和 spring-cloud-c,泳道状态为开启,灰度模式选择按内容灰度灰度条件选择以下条件同时满足,并在参数配置行设置参数类型Parameter参数name条件==xiaoming

    创建完成后,泳道组详情页的 流量分配 区域显示已创建的泳道信息,包括泳道名称(如 gray)、标签、关联应用列表(如 spring-cloud-aspring-cloud-c)、匹配条件(如 param:[name]==xiaoming)及开启状态;上方 QPS 监控区域展示基线与灰度流量的请求数及趋势折线图。

普通请求走基础版本

说明

Web页面的地址为网关SLB的地址,可以在容器服务控制台对应创建的集群详情页面找到工作负载>无状态,在无状态页面单击对应的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

更多内容,请参见基于自建Spring Cloud GatewayZuul网关实现全链路灰度

无损上下线

使用路径:登录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。

image

更多内容,请参见什么是流量防护

请求示例

说明

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

更多说明

应用接入

目前使用的方式是为每个需要接入的应用都显式地在DeploymentLabel中配置了msePilotAutoEnable: "on"进行接入。实际使用中,您可以通过MSE的运维中心给K8s集群的命名空间开启微服务治理,进行批量接入。

更多内容,请参见ACKACS微服务应用接入MSE治理中心(Java版)

无损上下线

说明

如果刚开始部署的时候没有开启无损上下线,但是后续的过程中想观察,可以通过如下方式开启。

  1. 如果您需要使用详细的无损上下线功能,可以登录容器服务控制台的集群信息页面,选择左侧导航栏的运维管理 > 组件管理,在搜索框中搜索cronhpa然后单击安装

  2. 使用如下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

网关自动请求配置

默认开启各种请求的自动发送,可以登录容器服务控制台的集群信息页面,单击导航栏工作负载 > 无状态,进入无状态页面之后单击spring-cloud-gateway应用。进入详情页之后,单击页面右上角编辑,可以配置如下环境变量来做到各种请求的自动发起配置。

环境变量key

含义

默认值

enable.auto

自动流量总开关

true

enable.rpc.invoke

Dubbo请求开关

true

enable.sql

数据库请求开关

true

enable.sentinel.demo.flow

sentinel规则相关请求开关,其中

  • flow请求可测试限流规则

  • isolate会有一定并发量,可测试隔离规则

  • params携带参数hot,可测试热点规则

true

enable.gray

打标方式灰度请求开关

false

demo.qps

请求速率qps(控制/a的请求速率,其他请求相对速率)

20