SpringCloudGateway实现金丝雀发布_05
原创
©著作权归作者所有:来自51CTO博客作者gblfy的原创作品,请联系作者获取转载授权,否则将追究法律责任
接上一篇:SpringCloudGateway 集成 nacos 整合实现动态路由
文章目录
一、启动服务
1. 启动Gateway-Serv模块服务
2. 启动auth-serv认证授权服务
3. 启动product-serv服务
4. 启动product-serv服务2
端口由9000改为9001
controller访问改造
将IPhone 12
改为我是新版本
package com.gblfy.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
//http://localhost:9000/product/" + productId
@GetMapping("/product/{productId}")
public String getProductName(@PathVariable Integer productId) {
return "IPhone 12";
}
}
package com.gblfy.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
//http://localhost:9000/product/" + productId
@GetMapping("/product/{productId}")
public String getProductName(@PathVariable Integer productId) {
return "我是新版本";
}
}
开启一个应用以不同端口启动
启动product-serv服务9001
二、修改nacos配置
2.1. 配置改造
原
spring:
cloud:
gateway:
routes:
- id: product
uri: lb://product-serv
predicates:
- Host=product.gblfy.com**
- id: auth
uri: lb://auth-serv
predicates:
- Path=/oauth/token
- id: skill
uri: http://localhost:13000
predicates:
- Path=/skill
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/auth-serv?characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: 123456
现配置
spring:
cloud:
gateway:
routes:
- id: product_v1
uri: lb://localhost:9000/
predicates:
- Path=/product/*
- Weight=service1, 95
- id: product_v2
uri: lb://localhost:9001/
predicates:
- Path=/product/*
- Weight=service1, 5
- id: auth
uri: lb://auth-serv
predicates:
- Path=/oauth/token
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/auth-serv?characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: 123456
2.2. 配置发布
三、测试验证
3.1. 访问产品模块
不请求auth-serv模块获取otken,直接通过网关访问产品模块
从上图可以看出访问需要认证授权
3.2. 获取toeken
http://localhost:8081/oauth/token 通过认证授权中心获取toekn
grant_type:password
client_id:app
client_secret:app
username:ziya
password:111111
3.3. 携带toekn访问产品模块
携带toekn通过网关服务访问产品模块
http://product.gblfy.com:8081/product/1
从图中可以看出,获取token后,通过网关服务可以正常请求产品模块,并有响应报文。
3.4. 增加访问次数
会发现95%的请求会请求老版本,5%请求会请求新的版本!
四、不联网大厂产品发布策略
4.1. 蓝绿发布
4.2. 金丝雀发布
从图中可以看到,将发布区域的一小部分区域定义为金丝雀区域,通过线上运行服务(少量节点)中加入少量新版本的服务,也就是我们所说的金丝雀这块区域,然后从少量的版本中,快速的得到一个反馈,我们将部分的流量导入到小部分的金丝雀区域版本当中,来快速得到反馈,尝试我们这次上线的内容究竟有没有问题,效果好不好,根据反馈再决定,剩余的节点是否要迁移到新的版本。
4.3. 灰度发布
通过切换线上并存版本之间路由的权重,逐步从一个版本切换为另一个版本的过程。
所有的用户发起请求通过路由到以前的版本,新的版本没有流量进来。
将95%的流量访问旧的版本上,将5%的流量访问新的版本上,来验证新的版本是否有大量报错,因为我的新版本上线之后,如果存在bug,只影响5%的用户的体验,大部分用户不会受到影响,这样是一个比较稳妥的实验室做法。
当我验证新版本后没问题后,将100%的流流量全部切换到新版本当中。将旧版本废弃掉。
金丝雀发布更倾向于一个快速反馈的一个流程,而灰度发布更倾向于从一个版本切换到另一个版本的平稳切换的一个目的。
4.4. A/B测试
4.5. 测试发布策略区别
待完善