1.MSE是啥
阿里云MSE(Microservices Engine)微服务引擎含以下三个主要模块:微服务注册中心、微服务治理和云原生网关。其中微服务治理功能中的标签路由,可以实现灰度功能。

2.灰度需求
除了流量入口(如桩服务、gateway服务等),所有后端服务都要能支持按版本分组;
将应用的相关版本隔离成一个独立的运行环境,通过设置流控路由规则,将满足规则的请求流量路由到目标版本应用。
示意图:
- 线上服务版本v1111;
- 新版版本v2222,即灰度版本;
- 设置流量规则,满足规则的流量进入灰度版本,不满足则进入线上版本;

关键要求:
- 要能按流量规则准确路由;
- 流量必须是全链路的;
3.demo程序
device -> charge -> order -> base 四个服务,其中charge、order有2个版本。
架构:k8s + springcloud + eureka + feign
注册中心:

所有服务接受两个参数:
- str: 记录经过的链路,并在最后一个服务输出;
- userId:根据该值做路由选择;
3.1.device \ charge \ order
接受并加工str,传递str \ userId
EchoController.java
package com.ykc.edas;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@RestController
public class EchoController {
@Autowired
private EchoFeign echoFeign;
@RequestMapping(value = "/device", method = RequestMethod.GET)
public String echo(@RequestParam(value="str", required = false) String str,
@RequestParam(value="userId", required = false) String userId){
return echoFeign.echo(str + "device.v1111 -> ",userId);
}
}
EchoFeign.java
package com.ykc.edas;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@RestController
@FeignClient(name = "edas-test2.charge")
public interface EchoFeign {
@RequestMapping(value = "/charge", method = RequestMethod.GET)
String echo(@RequestParam(value="str", required = false) String str,
@RequestParam(value="userId", required = false) String userId);
}
3.2.base
返回str和userId
EchoController.java
package com.ykc.edas;
import org.springframework.web.bind.annotation.*;
@RestController
public class EchoController {
@RequestMapping(value = "/base", method = RequestMethod.GET)
public String echo(@RequestParam(value = "str", required = false) String str,
@RequestParam(value = "userId", required = false) String userId)
{
return str + "base.v1111 (userId: " + userId + ")";
}
}
3.3.请求与输出
请求device服务:http://172.16.1.192:30000/device?userId="xxx"
如果路由线上版本,返回:device.v1111 -> charge.v1111 --> order.v1111 --> base.v1111 (userId: xxx)
如果路由灰度版本,返回:device.v1111 -> charge.v2222 --> order.v2222 --> base.v1111 (userId: xxx)
4.部署与配置
4.1.安装组件ack-mse-pilot
在指定K8S集群创建

创建后,在K8S中创建命名空间mse-pilot,并在命名空间下创建mse-pilot服务

4.2.开启服务所在的命名空间的"微服务治理"
可选:开启命名空间下所有服务的“微服务治理”;
生产实施时不需要执行,通过下一步对单个应用的配置逐个开启。

4.3.应用deployment配置
同一个服务的线上版本和灰度版本在K8S中是独立的deployment,对应不同的deployment配置

de

本文介绍阿里云MSE微服务引擎如何实现灰度发布,包括微服务注册中心、微服务治理等功能,以及如何通过标签路由实现精确的流量控制。
最低0.47元/天 解锁文章
285

被折叠的 条评论
为什么被折叠?



