接上一篇:SpringCloudGateway 集成 nacos 整合实现动态路由

文章目录

  • 一、启动服务
    • 1. 启动Gateway-Serv模块服务
    • 2. 启动auth-serv认证授权服务
    • 3. 启动product-serv服务
    • 4. 启动product-serv服务2
  • 二、修改nacos配置
    • 2.1. 配置改造
    • 2.2. 配置发布
  • 三、测试验证
    • 3.1. 访问产品模块
    • 3.2. 获取toeken
    • 3.3. 携带toekn访问产品模块
    • 3.4. 增加访问次数
  • 四、不联网大厂产品发布策略
    • 4.1. 蓝绿发布
    • 4.2. 金丝雀发布
    • 4.3. 灰度发布
    • 4.4. A/B测试
    • 4.5. 测试发布策略区别
一、启动服务
1. 启动Gateway-Serv模块服务

2. 启动auth-serv认证授权服务

3. 启动product-serv服务

4. 启动product-serv服务2

端口由9000改为9001

server:port: 9001
spring:cloud:nacos:discovery:service: product-servserver-addr: localhost:8848

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: producturi: lb://product-servpredicates:- Host=product.gblfy.com**- id: authuri: lb://auth-servpredicates:- Path=/oauth/token- id: skilluri: http://localhost:13000predicates:- Path=/skilldatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/auth-serv?characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: 123456

现配置

spring:cloud:gateway:routes:- id: product_v1uri: lb://localhost:9000/predicates:- Path=/product/*- Weight=service1, 95- id: product_v2uri: lb://localhost:9001/predicates:- Path=/product/*- Weight=service1, 5- id: authuri: lb://auth-servpredicates:- Path=/oauth/tokendatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/auth-serv?characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: 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. 测试发布策略区别

待完善

SpringCloudGateway实现金丝雀发布_05相关推荐

  1. 蓝绿部署、金丝雀发布(灰度发布)、AB测试……

    点击关注公众号,Java干货及时送达 来源 | https://www.jianshu.com/p/0df88fe4a1e3 随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁:随着 ...

  2. 微服务治理实践 | 金丝雀发布

    来自:阿里巴巴中间件 前言 阿里巴巴集团内部有不少故障是因为发布直接或间接引起.因此提升发布的质量,减少错误的发生,是有效减少线上故障的一个关键环节. 为什么大部分的故障和发布相关?因为发布是整个功能 ...

  3. 使用级联功能实现蓝绿部署和金丝雀发布

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者:米开朗基杨 来源:公众号「云原生实验室」 上篇文章介绍了 Contour 分布式架构的 ...

  4. 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...

  5. 蓝绿部署滚动部署金丝雀发布(灰度发布)A/B测试

    在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本.但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果 ...

  6. 蓝绿部署、滚动部署、灰度发布、金丝雀发布-概念介绍---应用部署001

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...

  7. 首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布

    首富带你畅谈:蓝绿部署.滚动发布.灰度发布/金丝雀发布 笔者: 张首富 时间: 2019-01-24晚 QQ群: 895291458 博客地址: www.zhangshoufu.com 根据2018年 ...

  8. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别

    在有关微服务.DevOps.Cloud-native.系统部署等的讨论中,蓝绿部署.A/B 测试.灰度发布.滚动发布.红黑部署等概念经常被提到,它们有什么区别呢?通过搜索相关资料,做一个简单的辨析,如 ...

  9. 微服务下蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...

    更多内容关注微信公众号:fullstack888 在有关微服务.DevOps.Cloud-native的迭代过程中,不可避免的需要"上线",上线就需要部署,需要部署就意味着有修改, ...

最新文章

  1. Django 视图和模板1.4
  2. Angular 2 Pipe
  3. 2020年第十五届竞赛数据上报竞赛数据给高等教学学会统计
  4. iOS中autolaylout和sizeclass的理解
  5. 终结由安装SVN 导致的异常——visual studio 2010 遇到了异常,可能是由某个扩展导致
  6. 每秒处理10万订单乐视集团支付架构--转
  7. oracle cost cardinality,ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释
  8. Linux系统新建用户用ssh远程登陆显示-bash-4.1$
  9. poj2480(利用欧拉函数的积性求解)
  10. 动手造轮子:写一个日志框架
  11. 做了nginx反向代理之后常见问题汇总
  12. php防止跨域提交,PHP防止跨域提交表单的简单示例
  13. 【转】Java重构-策略模式、状态模式、卫语句
  14. iOS支付宝支付总结
  15. 关于ws2811单片机控制方式的总结
  16. 什么是monitor
  17. 联想电脑管家不显示开机时间_联想电脑怎么设置显示开机时间
  18. MyBatis-Plus插件
  19. 解决在EasyUI中使用百度地图出现不居中和坐标图标显示异常的问题(红色代码部分)
  20. 开源之夏 2022 重磅来袭,欢迎报名 Casbin社区项目

热门文章

  1. 被百度AI官方认证的大学,到底是什么水平
  2. (pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记
  3. java 继承作用_java三大特性之继承
  4. python安装Scrapy踩过的坑以及安装指导
  5. 数据结构实验之排序四:寻找大富翁
  6. 云原生时代的运维体系进化
  7. 如何帮用户管好云账本?阿里云数据库助力收钱吧 | 甲子光年
  8. 如何加快 Node.js 应用的启动速度
  9. 基于Knative开发应用
  10. 分布式事务中间件 Fescar - 全局写排它锁解读 1