一、前言

https://github.com/Nepxion/Discovery

Discovery【探索】微服务框架,基于Spring Cloud & Spring Cloud Alibaba,Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用、Spring Cloud Gateway和Zuul过滤等组件全方位增强的企业级微服务开源解决方案,更贴近企业级需求,更具有企业级的插件引入、开箱即用特征…

二、环境准备

  1. 运行nacos服务

    基于docker环境运行nacos可参考:https://gitee.com/zhengqingya/docker-compose

  2. 下载代码:https://github.com/Nepxion/DiscoveryGuide (注:用simple分支)

    温馨小提示:如果依赖下载不了,尝试将discovery版本修改为6.5.0
    也可直接用小编的代码:https://gitee.com/zhengqingya/java-workspace

  3. 代码导入idea中启动运行所需服务

  4. ① 访问测试 http://127.0.0.1:5001/discovery-guide-service-a/invoke/gateway
    ② 访问测试 http://127.0.0.1:5002/discovery-guide-service-a/invoke/zuul

三、全链路蓝绿发布

经典场景:当调用请求从网关或者服务发起的时候,通过Header | Parameter | Cookie一种或者几种参数进行驱动,在路由过滤中,根据这些参数,选择在配置中心配置的蓝路由 | 绿路由 | 兜底路由的规则策略(Json格式),并把命中的规则策略转化为策略路由Header(n-d-开头),实现全链路传递。每个端到端服务接收到策略路由Header后,执行负载均衡时,该Header跟注册中心的对应元数据进行相关比较,不符合条件的实例进行过滤,从而实现全链路蓝绿发布

实施概要:只涉及当前正在发布的服务,例如,对于 〔网关〕->〔A服务〕->〔B服务〕->〔C服务〕->〔D服务〕调用链来说,如果当前只是B服务和C服务正在实施发布,那么,只需要把B服务和C服务配置到规则策略中,其它则不需要配置。发布结束后,即B服务和C服务的所有实例都完全一致,例如,版本号都只有唯一一个,那么清除掉在配置中心配置的规则策略即可,从而进行下一轮全链路蓝绿发布

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

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

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

策略①-每个服务的版本统一指定: 从Spring Cloud Gateway发起的调用全链路都走1.0版本服务,配置内容如下
<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><version>1.0</version></strategy>
</rule>

访问测试 http://127.0.0.1:5001/discovery-guide-service-a/invoke/gateway

策略②-每个服务的版本分别指定: 从Spring Cloud Gateway发起的调用走1.0版本的a服务 -> 走1.1版本的b服务,配置内容如下
<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><version>{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.1"}</version></strategy>
</rule>

如果上述表达式还未满足需求,可以采用通配表达式方式

* - 表示调用范围为所有版本
1.* - 表示调用范围为1开头的所有版本

ex:

<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><version>{"discovery-guide-service-a":"1.0*", "discovery-guide-service-b":"1.?"}</version></strategy>
</rule>

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

nacos中增加Zuul的区域匹配蓝绿发布策略配置

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

策略①-每个服务的区域统一指定: 从Zuul发起的调用全链路都走dev区域服务,配置内容如下
<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><region>dev</region></strategy>
</rule>

访问测试 http://127.0.0.1:5002/discovery-guide-service-a/invoke/zuul

策略②-每个服务的区域分别指定: 从Zuul发起的调用走dev区域的a服务 -> 走qa区域的b服务,配置内容如下
<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><region>{"discovery-guide-service-a":"dev", "discovery-guide-service-b":"qa"}</region></strategy>
</rule>

如果上述表达式还未满足需求,可以采用通配表达式方式

* - 表示调用范围为所有区域
d* - 表示调用范围为d开头的所有区域

ex:

<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><region>{"discovery-guide-service-a":"d*;q?", "discovery-guide-service-b":"dev"}</region></strategy>
</rule>

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

nacos中增加Zuul的IP地址和端口匹配蓝绿发布策略配置

Data ID discovery-guide-zuul
Group discovery-guide-group
配置格式 XML
策略①-每个服务的IP地址或端口统一指定: 从Zuul发起的调用走指定IP地址和端口/IP地址/端口,配置内容如下
<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><!-- 注:ip不能为127.0.0.1或localhost --><!-- <address>3001</address> --><address>192.168.0.111</address><!-- <address>192.168.0.111:3001</address> --></strategy>
</rule>

访问测试 http://127.0.0.1:5002/discovery-guide-service-a/invoke/zuul

策略②-每个服务的IP地址或端口分别指定: 从Zuul发起的调用走3001端口的a服务->走4001端口的b服务,配置内容如下
<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><address>{"discovery-guide-service-a":"3002", "discovery-guide-service-b":"4001"}</address></strategy>
</rule>

如果上述表达式还未满足需求,可以采用通配表达式方式

* - 表示调用范围为所有端口
3* - 表示调用范围为3开头的所有端口

ex:

<?xml version="1.0" encoding="UTF-8"?>
<rule><strategy><address>{"discovery-guide-service-a":"3*;400?", "discovery-guide-service-b":"4001"}</address></strategy>
</rule>

今日分享语句:
我发现,一个人在放弃给别人留好印象的负担之后,原来心里会如此踏实。

Nepxion Discovery(1) 全链路蓝绿发布相关推荐

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

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

  2. Libra-Platform微服务平台之全链路蓝绿灰度发布

    1.Libra-Platform 微服务平台 Libra-Platform微服务平台.基于SpringCloud(2020.0.x) + SpringCloudAlibaba(2021.x) + Sp ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. k8s 使用Nginx Ingress实现灰度发布和蓝绿发布

    **导语:**云原生最佳实践系列,涵盖了灰度发布.弹性伸缩.集群迁移.网络通信.应用容器化改造等等场景,针对各行业面临的应用现状,提出最佳解决方案,并提供详细操作指导,希望对您有所帮助. Ingres ...

  10. 蚂蚁金服蓝绿发布实践

    本文转载自公众号"金融级分布式架构" 提示:有童鞋小米AI音响还没有领哦! 什么是蓝绿发布 蓝绿发布 (Blue Green Deployment) 是一种平滑过渡的发布模式.蓝绿 ...

最新文章

  1. Centos7常用命令
  2. MongoDB应用场景
  3. linux 文件拷贝io,NIO拷贝文件真的比IO拷贝文件效率高?
  4. Linux实用快捷键
  5. “网站漏洞”成电信诈骗帮凶 专家呼吁进行“立体防护”
  6. Spring MVC 复习笔记01
  7. 即使有历史最佳年报,安踏的未来依然有三重重担
  8. abap中的弹出窗体函数
  9. php多文件压缩的功能函数
  10. 太难了!经营12年的明星机构都关停了,却还是有玩家疯狂入局
  11. sql 计算单行数据字段空值比例_如何利用工具,迅猛定位低效SQL? | 1分钟系列...
  12. iOS - OC NSTimeZone 时区
  13. cnvd与cnnvd区别_漏洞编码CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD都指什么?
  14. XP框架的另外选择→太极
  15. Verilog学习之异步复位的串联T触发器设计
  16. 拾叶集 文/江湖一剑客
  17. python三维图像切片成二维_python之画三维图像
  18. mac mini 开发android,Mac mini M1上成功启动Ubuntu
  19. 《信用管理》--信用评分方法
  20. Kotlin【简介】Android开发 配置 扩展

热门文章

  1. javascript 判断为负数_JavaScript判断数字正负数
  2. [Unity] material was not upgraded. There‘s no upgrader to convert {1} shader to selected pipeline报错
  3. unity 角度限制_Unity3D实现摄像机镜头移动并限制角度
  4. 看看最新的考试 c语言 noip模拟 纯llq原创作品
  5. shell解析HTML
  6. 编译java源文件(在cmd下编译)傻瓜式教学
  7. Mac苹果电脑在线重装系统教程
  8. 射频信号处理知识点点滴滴
  9. 算法系列之二十一:实验数据与曲线拟合
  10. 上海链家网租房信息分析报告