MSE快速入门

  1. MSE产品包含以下模块:微服务注册配置中心微服务治理云原生网关
  2. 您在构建自己的微服务体系时,既可单独使用某个模块,也可搭配使用以便获得微服务生态的最佳实践

概览

简介

本教程覆盖微服务引擎MSE的核心能力,帮助您快速上手并理解MSE产品,预计体验时长20分钟。主要分为如下四个步骤,建议您按照顺序进行体验

  1. 在容器(ACK或ACK Serverless集群)部署示例的微服务应用,并将服务注册Nacos
  2. 通过注册配置中心实现统一配置管理
  3. 利用云原生网关服务暴露公网
  4. 通过服务治理实现全链路灰度发布

p695891

适用对象

本教程适用于Spring Cloud&Dubbo微服务框架的开发者、IT基础架构师、管理员和DevOps人员等计划在阿里云上实现或扩展云原生架构的相关人员

整体架构

  • 注册配置中心:支持注册和配置中心全托管(兼容Nacos/ZooKeeper/Eureka),可实现对服务节点配置信息的维护和统一管理,具备丰富完善的监控报警、控制台运维操作和引擎类型,相比开源组件,具有更高性能SLA保障配置能力
  • 云原生网关:提供安全高效的符合K8s Ingress标准的下一代网关,将Ingress流量网关微服务安全网关三合一
  • 微服务治理:无侵入增强主流Spring CloudApache Dubbo等开源微服务框架,提供丰富的服务治理流量防护功能,将中间件与业务解耦,可实现熔断限流降级无损上下线全链路灰度等多种治理能力,提升开发效率和线上稳定性

p698315

ACK + ACS

您可以将部署在容器服务 Kubernetes 版和容器计算服务中的Spring Cloud和Dubbo等微服务应用接入MSE治理中心,使用MSE提供的一系列服务治理能力,大幅提升线上微服务的稳定性和开发效率,本文介绍如何将ACKACS微服务应用接入MSE治理中心

为单个应用开启MSE微服务治理 - Deployment - spec.template.metadata.labels

label value
msePilotAutoEnable: “on” 开启MSE微服务治理
mseNamespace: default 设置MSE命名空间
msePilotCreateAppName: “your-deployment-name” 设置应用名称,需替换为实际Deployment名称
1
2
3
4
5
6
7
8
9
10
spec:
template:
metadata:
labels:
# 填写“on”表示开启接入,需加上双引号
msePilotAutoEnable: "on"
# 填写接入到的治理命名空间,值不存在可自动新建
mseNamespace: default
# 填写接入MSE的实际应用名称,需加上双引号
msePilotCreateAppName: "your-deployment-name"

配置流控规则

配置流控规则的原理是监控应用或服务流量的QPS指标,当指标达到设定的阈值时立即拦截流量,避免应用被瞬时的流量高峰冲垮,从而保障应用高可用性。本文介绍如何配置管理流控规则,以及常用场景的流控配置规则。

背景信息

  1. 流量控制网络传输中是一个常用的概念,常用于调整网络包发送数据
  2. 系统需处理的请求随机不可控的,而系统的处理能力有限的,因此就需要根据系统的处理能力对流量进行控制

常用场景:削峰填谷,使流量匀速通过

  1. 请求流量具有波峰波谷的特点,流控的原理是将前面的峰值流量延迟(排队时长)到后面再处理,既能最大化满足所有请求,又能保证用户体验
  2. 新增流控防护规则新增规则对话框中配置以下规则信息
    • 配置匀速模式下请求单机QPS阈值为5
    • 流控效果选择排队等待
    • 超时时间为5s
  3. 系统则每 200ms 处理一条请求,多余的处理任务将排队;同时设置了等待时长为5s,则预计排队时长超过5s的处理任务将快速失败直接返回默认流控信息,如文本、静态页面等

深入原理:匀速排队对应漏桶算法

  1. 排队等待的匀速语义对应漏桶算法(Leaky Bucket),Sentinel官方文档明确说明:匀速排队方式会严格控制请求通过的间隔时间,让请求以均匀的速度通过,对应的是漏桶算法
  2. 令牌桶漏桶的关键差异就在匀速二字上
特征 令牌桶 漏桶(排队等待)
放行速率 平均速率恒定,允许突发 严格恒定,输出被整形
突发流量 桶里攒的令牌可被瞬间取走,一波请求同时通过 不允许,每个请求间隔固定200ms
请求超量时 取不到令牌直接拒绝(不排队) 进队列排队等待,等太久才拒绝
  1. 文中三个特征——每200ms处理一条多余任务排队预计超过5s快速失败——分别对应漏桶的恒定出水速率排队缓冲溢出拒绝;令牌桶算法下请求不排队,且攒满令牌时会放行突发流量,与匀速矛盾
  1. MSE的排队等待对应开源Sentinel的RateLimiterController,它没有真实的队列数据结构,只用一个latestPassedTime时间戳做虚拟排队,文中200ms的来源即1000 / QPS阈值 = 1000 / 5(简化后的核心逻辑)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
long currentTime = TimeUtil.currentTimeMillis();
// 相邻两个请求的固定间隔 = 1000 / QPS阈值 = 1000 / 5 = 200ms
long costTime = Math.round(1.0 * acquireCount / count * 1000);
// 本请求的预期通过时间 = 上一个请求的槽位 + 200ms
long expectedTime = costTime + latestPassedTime.get();

if (expectedTime - currentTime <= maxQueueingTimeMs) {
// 预计排队时长 ≤ 5s: 抢占排队槽位, 等待到自己槽位的时间点再放行 → 匀速
latestPassedTime.set(expectedTime); // 实际通过CAS循环更新
sleepUntil(expectedTime);
return true;
}
// 预计排队时长 > 5s → 快速失败
return false;
  1. Sentinel中真正借鉴令牌桶的是Warm Up(预热)模式——用桶中积攒的令牌决定放行斜率,从冷水位平滑爬升到阈值;快速失败则是滑动窗口计数,达到阈值立即拒绝
流控效果 Controller 限流算法 行为
快速失败 DefaultController 滑动窗口计数 达到阈值立即拒绝
Warm Up 预热 WarmUpController 令牌桶(参考Guava SmoothWarmingUp,冷启动因子3) 冷启动时缓慢放量爬升到阈值
排队等待 RateLimiterController 漏桶(虚拟队列) 匀速放行、可排队、超时拒绝
  1. 注意:排队等待只对QPS阈值类型生效,不支持并发线程数模式

更多信息

新增流控防护规则新增规则对话框参数说明如下:

参数 描述
接口名称 待流控的资源名称
是否开启 打开开关表示启用该规则,关闭开关表示禁用该规则,开关修改之后会立即生效
单机 QPS 阈值 触发对流控接口的统计维度对象的QPS阈值
流控效果 选择流控方式来处理被拦截的流量
1. 快速失败:达到阈值时,立即拦截请求,按照应用系统设置中的适配模块配置信息,进行内容返回
2. 排队等待:请求匀速通过,允许排队等待,通常用于请求调用削峰填谷等场景,需设置具体的超时时间,达到超时时间后请求会快速失败