Nepxion Discovery(1) 全链路蓝绿发布

一、前言

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 IDdiscovery-guide-gateway
Groupdiscovery-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 IDdiscovery-guide-zuul
Groupdiscovery-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 IDdiscovery-guide-zuul
Groupdiscovery-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>

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Nepxion Discovery【探索】使用指南,基于Spring Cloud Greenwich版、Finchley版和Hoxton版而 制作,对于Edgware版,使用者需要自行修改。使用指南主要涉及的功能包括: 基于Header传递的链路灰度路由,网关为路由触发点。采用配置中心配置路由规则映射在网 关过滤器中植入Header信息而实现,路由规则传递到链路服务中。路由方式主要包括版本和 区域的匹配路由、版本和区域的权重路由、基于机器IP地址和端口的路由 基于规则订阅的链路灰度发布。采用配置中心配置灰度规则映射在链路服务而实现,所有 服务都订阅某个共享配置。发布方式主要包括版本和区域的匹配发布、版本和区域的权重发布 链路服务隔离。包括注册隔离、消费端隔离和提供端服务隔离,示例仅提供基于Group隔 离。除此之外,不在本文介绍内的,还包括: 注册隔离:黑/白名单的IP地址的注册隔离、最大注册数限制的注册隔离 消费端隔离:黑/白名单的IP地址的消费端隔离 链路服务限流熔断降级权限,集成阿里巴巴Sentinel,有机整合灰度路由,扩展LimitApp的 机制,通过动态的Http Header方式实现组合式防护机制,包括基于服务名、基于灰度组、基于 灰度版本、基于灰度区域、基于机器地址和端口等防护机制,支持自定义任意的业务参数组合 实现该功能。支持原生的流控规则、降级规则、授权规则、系统规则、热点参数流控规则 链路灰度调用链。包括Header方式和日志方式,Header方式框架内部集成,日志方式通过 MDC输出(需使用者自行集成) 同城双活多机房切换支持。它包含在“基于Header传递的链路灰度路由”里 数据库灰度发布。内置简单的数据库灰度发布策略,它不在本文的介绍范围内 灰度路由和发布的自动化测试 license Apache 2.0 maven central v5.4.0 javadoc 5.4.0 build passing Docker容器化和Kubernetes平台的无缝支持部署

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值