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

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

前提条件

部署Demo

Demo介绍

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

应用名称

服务框架版本

涉及组件

Demo

Zuul

Spring Cloud Greenwich

zuul

pom.xml

SpringCloudGateway

spring-cloud-starter-gateway 2.1.3

spring-cloud-starter-gateway

pom.xml

A

Spring Cloud Edgware

Dubbo 2.7.18

openfeign/httpclient/rocketmq/nacos/loadbalancer

pom.xml

B

Spring Cloud Hoxton

Dubbo 2.7.18

httpclient/mybatis/druid/nacos

pom.xml

C

Spring Cloud 2021

Dubbo 2.7.18

openfeign/httpclient/nacos

pom.xml

image.png

Helm包下载

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

image

部署方式

使用ACK的CloudShell部署mse-simple-demo

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

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

  3. 上传Helm包。image

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

  5. 使用命令kubectl create namespace mse-demo创建命名空间(对应--namespace)。

Helm方式部署mse-simple-demo

使用如下Helm命令部署mse-simple-demo。

helm install mse-simple-demo mse-simple-demo \
--set autoscaling=true \
--set images.version=3.0.2 \
--set gateway.zuul=true \
--set registry=registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/ \
--namespace=mse-demo

使用如下Helm命令修改mse-simple-demo参数。

helm upgrade mse-simple-demo mse-simple-demo \
--namespace=mse-demo --create-namespace \
--set mse.namespace=prod \
--set gateway.zuul=true  \
--install \
--values mse-simple-demo/values.yaml

其中可以修改的参数如下:

  • namespace: 要安装到的K8s命名空间。可选,一般为default。

  • registry: 容器镜像地址前缀。

  • images.version:镜像版本。

  • mse.namespace: 接入MSE微服务治理的微服务命名空间,可以用来区分环境。默认值为mse-demo。

  • autoscaling:是否开启自动伸缩。默认值为false。

  • resources.enable:是否设置resources的requests配置。默认值为false。

基础功能验证

全链路灰度

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

创建泳道组

全链路灰度页面:

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

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

image

创建泳道

全链路灰度页面底部:

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

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

    image

    image

普通请求走基础版本

说明

Web页面的地址为网关SLB的地址,可以在ACK控制台对应创建的集群详情页面找到工作负载>无状态,在无状态页面单击对应的spring-cloud-zuul网关进入详情页,单击访问方式,在访问方式的服务 (Service)栏下的外部端点列可以看到IP地址和端口。

在浏览器中访问网关的SLB地址,进行如下请求。

image

image

灰度请求走灰度版本

image

image

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

无损上下线

使用路径:登录MSE治理中心控制台,在左侧栏选择治理中心 > 应用治理 。应用列表页面单击需要治理的应用,进入应用概览页面。

配置无损上下线

在应用概览页面的左侧导航栏选择流量治理。默认具备一部分无损上下线能力,需要完整能力可在控制台开启并配置无损上下线相关配置。

image

查看事件以及流程

image

更多内容,请参见无损上下线

流控规则

使用路径:登录MSE治理中心控制台,在左侧栏选择治理中心 > 应用治理。应用列表页面单击需要治理的应用,进入应用概览页面。

配置流控规则

在应用概览页面的左侧导航栏选择流量治理。在流量治理页面选择流量防护 > 接口流控,然后单击新增流控规则

image

image

限流效果

在浏览器中访问网关的SLB地址,进行如下请求。

image

A有三个节点,单机限流5,通过QPS稳定15。

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

更多说明

应用接入

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

更多内容,请参见ACK微服务应用接入MSE治理中心

无损上下线

说明

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

  1. 如果您需要使用详细的无损上下线功能,可以登录ACK控制台的集群信息页面,选择左侧导航栏的运维管理 > 组件管理,在搜索框中搜索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

网关自动请求配置

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

环境变量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

image.png