Nepxion/Discovery灰度发布组件的使用教程(二)、基于REST请求调用灰度路由策略的使用

本文阐述了如何通过REST或RPC调用中的Header或参数实施灰度策略,实现服务调用链路的动态变更。介绍在Eureka和Nacos注册中心配置服务版本,通过n-d-version参数规划路由,适用于小程序前端发布等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略是通过REST或者RPC调用传递Header或者参数,达到用户自定义和编程灰度路由的目的。使用者可以实现跟业务有关的路由策略,根据业务参数的不同,负载均衡到不同的服务器,其核心代码参考discovery-plugin-strategy以及它的扩展。

可以简单的理解,灰度策略是在程序运行期间,动态的通过改变header或者参数来实现调用链路的动态变更,简单的说实现原理,就是从注册中心获取到的干个版本标记的服务列表中,过滤并找到只符合配置路由策略的这条路由线路上的服务进行请求调用,不符合路由策略的服务将被避开。

除了之前讲到的要引入相关的依赖包,更重要的是要是先灰度策略,配置参数的准确性非常重要

如果你的注册中心是基于eureka

# Eureka config for discovery
eureka.instance.metadataMap.group=xxx-service-group
eureka.instance.metadataMap.version=1.0
eureka.instance.metadataMap.region=dev
eureka:
  instance:
    metadata-map:
      # Eureka config for discovery
      group: xxx-service-group # 服务分组
      version: 1.0 # 服务版本
      # region: tianjin # 区域如果没有使用可以不填写

如果你的注册中心是基于nacos

# Nacos config for discovery
spring.cloud.nacos.discovery.metadata.group=example-service-group
spring.cloud.nacos.discovery.metadata.version=1.0
spring.cloud.nacos.discovery.metadata.region=dev
spring:
  cloud:
    nacos:
      discovery:
        metadata:
          # Nacos config for discovery
          group: xxx-service-group
          version: 1.0
          region: tianjin

作用就是首先要在metadata里标识服务自身的版本,A服务的1实例版本1.0,如果A服务升级调整变为版本2.0,则注册到注册中心的A服务实例包含2个版本 1.0和2.0

同时还有一个很重要的参数需要开启

开启(true)和关闭(false)用户自定义和编程灰度路由策略的时候,对REST方式的调用拦截。缺失则默认为false
spring.application.strategy.rest.intercept.enabled=true
spring:
  application:
    # ----- 开启(true)和关闭(false)用户自定义和编程灰度路由策略的时候,对REST方式的调用拦截。缺失则默认为false
    strategy:
      rest:
        intercept:
          enabled: true

这样所有的服务都具备了版本属性

然后在使用请求的时候,请求的Header中传入 n-d-version来进行路由规划,配置方式有2种:

第一种方式是直接填写版本号,例如 n-d-version: 1.0 或者 n-d-version: 2.0  则整个调用链路,都会使用1.0或者使用2.0来进行

如果服务间存在调用关系,使用的Feign调用,则A服务1.0调用B服务1.0 或者 A服务的2.0调用B服务的2.0

第二种方式是填写版本调用关系,例如n-d-version:{"example-server-a":"1.0","example-server-a":"2.0"},这样的一个JSON串标识的含义是 A服务的1.0调用B服务的2.0。n-d-version:{"example-server-a":"1.0","example-server-a":"1.0;2.0"},代表A服务1.0调用B服务的1.0或者2.0,B服务是轮训负载调用,此时如果B服务的2.0下线,则A服务会每次调用B服务的1.0,只是要注意一个现象,如果没有完全下线完毕,注册中心还有而服务不可用,则负载到B服务的2.0时候会有超时,但是过后还是会调用到1.0服务上返回结果,因为注册中心很快会下线,这种情况一般来说比较短暂。

以上这种场景比较适合小程序的前端发布,例如微信小程序一般会有一个发布上线审核的过程,审核期间可以发布对应的新版本服务用于微信官方审核,待审核发布通过后,老版本服务下线。最终实现基于灰度策略的路由。

 

 

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平台的无缝支持部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值