一、前言

全链路蓝绿发布参考:https://zhengqing.blog.csdn.net/article/details/113065844

本文将基于之前的环境来进行全链路条件蓝绿发布

二、全链路条件蓝绿发布

1、全链路版本条件匹配蓝绿发布

nacos中增加Spring Cloud Gateway的版本条件匹配蓝绿发布策略配置

Data ID discovery-guide-gateway
Group discovery-guide-group
配置格式 XML

规则策略配置
<?xml version="1.0" encoding="UTF-8"?>
<rule><!-- 基于Http Header传递的策略路由,全局缺省路由(第三优先级) --><strategy><version>{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</version></strategy><!-- 基于Http Header传递的定制化策略路由,支持蓝绿部署和灰度发布两种模式。如果都不命中,则执行上面的全局缺省路由 --><strategy-customization><!-- 全链路蓝绿部署:条件命中的匹配方式(第一优先级),支持版本匹配、区域匹配、IP地址和端口匹配、版本权重匹配、区域权重匹配 --><!-- header节点不允许缺失 --><conditions type="blue-green"><condition id="blue-condition" header="#H['a'] == '1'" version-id="blue-version-route"/><condition id="green-condition" header="#H['a'] == '1' &amp;&amp; #H['b'] == '2'" version-id="green-version-route"/></conditions><routes><route id="blue-version-route" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>    <route id="green-version-route" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</route></routes></strategy-customization>
</rule>

测试:
打开Postman,导入Postman的测试脚本postman.json(位于根目录下)

在Postman中执行目录结构下〔Nepxion〕->〔Discovery指南网关接口〕->〔Gateway网关调用示例〕,调用地址为http://localhost:5001/discovery-guide-service-a/invoke/gateway,相关的Header值已经预设,供开发者修改。执行通过Spring Cloud Gateway网关发起的调用,结果如下:

规则策略解释

温馨小提示:为准确体现相关变量(例如上文中的 a )支持Header/Parameter/Cookie

版本 表达式
6.6.0版本之前 header="#H['a'] == '1'"
6.6.0版本开始 expression="#H['a'] == '1'",兼容header="#H['a'] == '1'"
① 当外部调用带有的Header/Parameter/Cookies中的值a=1 && b=2,执行绿路由

<condition>节点中 header="#H['a'] == '1' &amp;&amp; #H['b'] == '2'" 对应的 version-id="green-version-route" ,找到下面<route>节点中 id="green-version-route" type="version" 的那项,那么路由即为

{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}
② 当外部调用带有的Header/Parameter/Cookies中的值a=1,执行蓝路由

<condition>节点中 header="#H['a'] == '1'" 对应的 version-id="blue-version-route",找到下面<route>节点中 id="blue-version-route" type="version" 的那项,那么路由即为

{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}
③ 当外部调用带有的Header/Parameter/Cookies中的值都不命中,或未传值,执行兜底路由
  1. 执行<strategy>节点中的全局缺省路由,那么路由即为
{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}
  1. 如果全局缺省路由未配置,则执行Spring Cloud Ribbon轮询策略
④ 假如不愿意从网关外部传入Header/Parameter/Cookies,那么支持策略下内置Header来决策蓝绿发布,可以代替外部传入Header/Parameter/Cookies,参考如下配置
<headers><header key="a" value="1"/>
</headers>

内置Header一般使用场景为定时Job的服务定时去调用其它服务,希望实施蓝绿灰度发布。当服务侧配置了内置Header,而网关也传递给对应Header给该服务,通过开关来决定,网关传递的Header为优先还是服务侧内置的Header优先

注:Spring Cloud Gateway在Finchley版不支持该方式!!!

⑤ 路由类型支持如下
  1. | 绿 | 兜底
  2. 蓝 | 兜底,即绿路由缺省,那么兜底路由则为绿路由
  3. 如果蓝路由和路由都缺省,那就只有兜底路由(全局缺省路由),即为全链路版本匹配蓝绿发布的路由场景
⑥ 策略总共支持5种,可以单独一项使用,也可以多项叠加使用
  1. version 版本
  2. region 区域
  3. address IP地址和端口
  4. version-weight 版本权重
  5. region-weight 区域权重
⑦ 策略支持Spring Spel的条件表达式方式
⑧ 策略支持Spring Matcher的通配方式

2、全链路区域条件匹配蓝绿发布

参考全链路版本条件匹配蓝绿发布,用法相似,只需要把规则策略中

  1. 属性version-id替换成region-id
  2. 属性type="version"替换成type="region"
  3. 节点route对应的Json中版本替换成区域

3、全链路IP地址和端口条件匹配蓝绿发布

参考全链路版本条件匹配蓝绿发布,用法相似,只需要把规则策略中

  1. 属性version-id替换成address-id
  2. 属性type="version"替换成type="address"
  3. 节点route对应的Json中版本替换成IP地址和端口

三、本文案例demo

https://gitee.com/zhengqingya/java-workspace


今日分享语句:
要取得成功,我们必须进行尝试。有时候,我们这样做会完全失败。最成功的人士都经历过失败。但是他们坚持了下来。他们中的大多数人都不会不顾后果地承担风险。实际上,他们总是竭尽所能地尽量减少他们前进道路上的风险。他们总是能从失败中汲取教训,这样做通常为他们以后的成功奠定了基础。

Nepxion Discovery(2) 全链路条件蓝绿发布相关推荐

  1. 掌门1对1微服务体系Solar第1弹:全链路灰度蓝绿发布智能化实践

    掌门教育自2014年正式转型在线教育以来,秉承"让教育共享智能,让学习高效快乐"的宗旨和愿景,经历云计算.大数据.人工智能.AR/VR/MR以及现今最火的5G,一直坚持用科技赋能教 ...

  2. 11、Nepxion Discovery 之全链路界面操作蓝绿灰度发布

    在之前的文章中讲过,用户可以通过 URL 请求以及配置中心进行灰度发布的操作,而且支持配置中心的灰度发布参数的动态变更.如果用户不希望使用上面的两种方式,Nepxion Discovery 框架还支持 ...

  3. 13、Nepxion Discovery 之 全链路调用链监控

    在进行微服务调用的时候,为了系统的高可用性,不仅需要进行灰度发布验证服务的可用性.同时对于服务健康的监控也是很重要的一环.Nepxion Discovery 在这方面也有监控方面的集成,包含以下几个方 ...

  4. 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操

    背景: 蓝绿发布.金丝雀发布.滚动发布.A/B测试 ,是大家日常常见的发布工作.所以发布的原理和实操是一个非常.非常核心的面试知识点. 在40岁老架构师 尼恩的读者交流群(50+)中,其相关面试题是一 ...

  5. 金丝雀发布、滚动更新、蓝绿发布到底有啥区别

    根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异.技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节. 作为技术人员,大 ...

  6. PolarisMesh系列文章——灰度发布系列(蓝绿发布)

    蓝绿发布 什么是蓝绿发布 蓝绿部署是一种应用发布模式,可将用户流量从先前版本的应用或微服务全量转移到新版本中(两者均保持在生产环境中运行). 旧版本可以称为蓝色环境,而新版本则可称为绿色环境.一旦生产 ...

  7. 蓝绿发布、红黑发布、灰度发布你都分得清吗

    一.全量发布 1.蓝绿发布 先通过网关断开转发A的链路,开始升级A,此时接口全部被转发到了应用集群B.升级完成后,接入A,再断开B,升级B,再连接上B. 优点:不需要保证集群额外的充足空间 缺点:升级 ...

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

    在项目迭代的过程中,不可避免需要上线.上线对应着部署,或者重新部署:部署对应着修改,修改则意味着风险. 1.蓝绿发布(Blue/Green Deployment) ①定义 蓝绿部署是不停老版本,部署新 ...

  9. 一文看懂ingress nginx实现灰度发布和蓝绿发布过程

    背景信息 灰度及蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版 ...

  10. 灰度发布与滚动发布、蓝绿发布介绍

    文章目录 灰度发布与滚动发布.蓝绿发布介绍 一.灰度发布与滚动发布.蓝绿发布介绍 1.蓝绿部署 2.滚动发布 3.灰度发布 二.灰度发布好处 三.Gitee上高热度的开源灰度发布系统 四.安装使用 灰 ...

最新文章

  1. Go进阶:反射3定律
  2. anki_Anki如何挽救我的工程生涯
  3. 改mysql修改界定符_dbvisualizer参数设置
  4. vue pc端 商品轮播图_轮播图高点击商品图
  5. 前端信息查询与显示_中国商标网查询显示的信息都是正确的吗
  6. 牛顿插值法及其C++实现
  7. Java中的subList方法
  8. arduino 机器视觉编程_万物皆可仿真的MATLAB/Simulink神奇在哪?解析如何将其应用于一整套机器人设计开发流程...
  9. https 443 怎么改成80_阿里云购买免费https证书并用nginx配置代理详解(2020年9月)...
  10. 还在写 BUG?试试 GitHub 官方代码扫描工具!
  11. 小米平板1刷LineageOS16
  12. 天下足球十大感动台词
  13. 光盘显示0字节可用_u盘显示0字节怎么办 u盘显示0字节解决步骤【方法】
  14. 【好东西】ACM在线模版-f-zyj
  15. 进程间的相互通讯 C++
  16. 一起聆听碳氮循环研究新动态,我们在苏州期待您的精彩分享和参与!
  17. 美国计算机加音乐专业,美国音乐博士解析
  18. 超详细!图论最短路算法与极简c++代码(配题目)
  19. IAR 配置ICF跟项目走
  20. Path常用方法,不积硅步无以至千里

热门文章

  1. [BZOJ3503]-[CQOI2014]和谐矩阵-高斯消元
  2. Large-scale Video Classification with Convolutional Neural Networks
  3. pytorch/tensorflow使用anaconda安装scipy库
  4. 亮宁机器人套件_十大可编程机器人教育套件
  5. 这个“单”到底应该谁来买?
  6. 使用MATLAB进行多元非线性回归拟合预测
  7. windows副本不是正版提示解决方法
  8. LUP分解求解线性方程组及求逆矩阵 java
  9. D.MADMAX 记忆化搜索 DAG
  10. [转] 粤语八级题,你会做岩几多题??