利用阿里云的MSE,上一个真正的灰度发布方案

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

1.MSE是啥

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

 2.灰度需求

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

  • 线上服务版本v1111;
  • 新版版本v2222,即灰度版本;
  • 设置流量规则,满足规则的流量进入灰度版本,不满足则进入线上版本;

 关键要求:

  1. 要能按流量规则准确路由;
  2. 流量必须是全链路的;

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值