Releases: Nepxion/Discovery
6.23.0(MAY 1, 2025)
Nepxion Discovery在Github于2018年6月17日正式开源,经过七年的砥砺前行,如今推出6.23.0版本
支持和兼容Java8~Java17以及更高的SDK版本
核心功能
- 蓝绿灰度发布、同城异地多活、链路路由智能编排
- 版本偏好、区域调试、环境隔离、可用区亲和
- 服务故障转移、实例无损下线、流量染色
- 统一配置订阅、运维对接、异步探针
- 网关动态路由、断言器和过滤器
- 调用链埋点、日志、指标监控
- 限流熔断降级授权防护扩展
- 全链路自动化侦测测试
版本列表
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
版本变更
无
功能迭代
商业版代码移植到开源版本:
在discovery-console-starter和discovery-plugin-admin-center-starter模块增加如下两个获取元数据的Open API接口,简化自动化蓝绿灰度发布在界面的开发
@RequestMapping(path = "/metadata-map/{metadataKey}", method = RequestMethod.POST)
@ApiOperation(value = "获取注册中心的服务实例元数据值列表的Map(值包含单个元数据)", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
public ResponseEntity<?> metadataMap(@PathVariable(value = "metadataKey") @ApiParam(value = "元数据键名", required = true) String metadataKey, @RequestBody @ApiParam(value = "服务名列表", required = true) List<String> serviceIds);
@RequestMapping(path = "/metadata-map", method = RequestMethod.POST)
@ApiOperation(value = "获取注册中心的服务实例元数据值列表的Map(值包含多个元数据,通过分隔符分隔)", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
public ResponseEntity<?> metadataMap(@RequestBody @ApiParam(value = "元数据查询参数对象", required = true) MetadataParameter metadataParameter);缺陷修复
无
相关发布
无
相关下载
DiscoveryConsole下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryAutomationConsole下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoverySimulator下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryInspector下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryDesktop/releases获取最新版本
3.41.0(MAY 1, 2025)
见 Nepxion Discovery 6.23.0发布
6.22.0(AUG 18, 2024)
版本列表
提醒:版本号���边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
版本变更
① 6.x.x
- 默认集成Spring Cloud Alibaba版本为2.2.10
功能迭代
- 对于蓝绿灰度发布Header值丢失的埋点调试辅助监控功能,增加快速开启参数
-Dstrategy.debug=true,用来代替如下复杂配置:
# 启动和关闭监控,一旦关闭,调用链和日志输出都将关闭。缺失则默认为false
spring.application.strategy.monitor.enabled=true
# 启动和关闭Header传递的Debug日志打印,注意:每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false
spring.application.strategy.rest.intercept.debug.enabled=true
# 启动和关闭Debug日志打印,注意:每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false
spring.application.strategy.logger.debug.enabled=true
如果快速启动参数和复杂配置两种方式都存在且值互斥,以快速开启参数配置为准
缺陷修复
- 修复复杂场景下,蓝绿灰度混合发布的缺陷。例如,环境隔离和随机权重混用的场景。感谢Gitee用户@longjinbin的指正
相关发布
无
相关下载
DiscoveryConsole下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryAutomationConsole下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoverySimulator下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryInspector下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryDesktop/releases获取最新版本
3.40.0(AUG 18, 2024)
见 Nepxion Discovery 6.22.0发布
6.21.0(MAR 20, 2023)
版本列表
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 9.x.x版本(适用于2022.x.x)将继续维护
- 8.x.x版本(适用于2021.x.x)将继续维护
- 7.x.x版本(适用于2020.x.x)将继续维护
- 6.x.x版本(同时适用于Finchley、Greenwich和Hoxton)将继续维护
- 5.x.x版本(适用于Greenwich)已废弃
- 4.x.x版本(适用于Finchley)已废弃
- 3.x.x版本(适用于Edgware)不维护,但可用,强烈建议升级
- 2.x.x版本(适用于Dalston)已废弃
- 1.x.x版本(适用于Camden)已废弃
版本变更
① 6.x.x
- 默认集成Dom4J版本为2.1.4
- 默认集成SkyWalking版本为8.14.0
- 默认集成OpenTelemetry版本为1.24.0
② 7.x.x
- 默认集成Dom4J版本为2.1.4
- 默认集成SkyWalking版本为8.14.0
- 默认集成OpenTelemetry版本为1.24.0
③ 8.x.x
- 默认集成Spring Boot版本为2.6.14
- 默认集成Spring Cloud版本为2021.0.6
- 默认集成Dom4J版本为2.1.4
- 默认集成SkyWalking版本为8.14.0
- 默认集成OpenTelemetry版本为1.24.0
④ 9.x.x
- 默认集成Spring Boot版本为3.0.4
- 默认集成Spring Cloud版本为2022.0.1
- 默认集成Caffeine版本为3.1.5
- 默认集成Dom4J版本为2.1.4
- 默认集成SkyWalking版本为8.14.0
- 默认集成OpenTelemetry版本为1.24.0
⑤ Discovery Automation
- 默认集成Redisson版本为3.20.0
功能迭代
ServiceEndpoint增加新的Open API
根据组名和服务类型,查询注册中心所属组下所有服务的名称列表
根据组名和服务类型查询服务名列表
描述
根据组名和服务类型,查询注册中心所属组下所有服务的名称列表
请求URL
http://localhost:6001/service/service-list/{group}
请求类型
POST
请求参数
| 名称 | 类型 | 参数 | 是否必须 | 描述 |
|---|---|---|---|---|
| group | String | PathVariable | 是 | 组名 |
| serviceTypes | List<String> |
RequestBody | 是 | 服务类型列表。取值:servicegateway如果查询全部,则输入包含两者的列表 |
返回参数
| 参数类型 | 描述 |
|---|---|
List<String> |
服务名列表 |
重构优化
工具类优化
优化UuidUtil,并增加单元测试
优化Example的POM引入
把Spring Boot Admin的依赖提升到Example的顶级Parent
去除过时的文件
删除.travis.yml
缺陷修复
无
相关发布
DiscoveryConsole发布
发布1.1.0版本
DiscoveryAutomationConsole发布
发布1.1.0版本
DiscoverySimulator发布
发布1.1.0版本
DiscoveryInspector发布
发布1.1.0版本
DiscoveryAgent发布
无
DiscoveryDesktop发布
无
相关下载
DiscoveryConsole下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryAutomationConsole下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoverySimulator下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryInspector下载
访问https://github.com/Nepxion/DiscoveryTool/releases获取最新版本
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryDesktop/releases获取最新版本
3.38.0(MAR 20, 2023)
见 Nepxion Discovery 6.21.0发布
6.20.0(JAN 10, 2023)
贡献列表
- 感谢@ruansheng8的贡献 : Discovery Automation基于Java 17 + Spring Boot 3 + GraalVM实现本地镜像化
版本列表
提醒��版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 9.x.x版本(适用于2022.x.x)将继续维护
- 8.x.x版本(适用于2021.x.x)将继续维护
- 7.x.x版本(适用于2020.x.x)将继续维护
- 6.x.x版本(同时适用于Finchley、Greenwich和Hoxton)将继续维护
- 5.x.x版本(适用于Greenwich)已废弃
- 4.x.x版本(适用于Finchley)已废弃
- 3.x.x版本(适用于Edgware)不维护,但可用,强烈建议升级
- 2.x.x版本(适用于Dalston)已废弃
- 1.x.x版本(适用于Camden)已废弃
版本变更
① 6.x.x
- 默认集成SkyWalking版本为8.13.0
- 默认集成OpenTelemetry版本为1.22.0
② 7.x.x
- 默认集成SkyWalking版本为8.13.0
- 默认集成OpenTelemetry版本为1.22.0
③ 8.x.x
- 默认集成Spring Boot版本为2.6.13
- 默认集成Spring Cloud版本为2021.0.5
- 默认集成SkyWalking版本为8.13.0
- 默认集成OpenTelemetry版本为1.22.0
④ 9.x.x
- 默认集成Spring Boot版本为3.0.1
- 默认集成Spring Cloud版本为2022.0.0
- 默认集成Spring Cloud Alibaba版本为2022.0.0.0-RC1
功能迭代
修复高危漏洞
① CVE-2022-1471 : Remote Code Execution via SnakeYAML Deserialization Gadgets
解决方案 : 通过com.nepxion.discovery.common.yaml.YamlSafeConstructor构造SnakeYAML对象
② CVE-2022-23463 : Remote Code Execution Vulnerability via SpEL Injection
解决方案 : 使用Spring StandardEvaluationContext类,StandardEvaluationContext支持全部的Spel语法且功能齐全,但GitHub Security报告其存在一定的注入风险,推荐使用SimpleEvaluationContext,而SimpleEvaluationContext并不能满足当前框架的需求。如果未使用验证SPEL表达式方法,可以通过下面开关关闭在方法在策略端点上的暴露,规避风险
- 管理中心配置
spring.application.admin.strategy.endpoint.validate-expression.enabled=true
- 控制台配置
spring.application.console.strategy.endpoint.validate-expression.enabled=true
增加Console端支持静态版本的链路智能编排
静态版本,指服务实例的版本号采用非时间戳或者非数字递增的方式(例如,旧版本的版本号为basic,新版本的版本号为gray),导致链路智能编排的时候,无法确认旧的稳定版本。
在Nepxion Discovery 6.20.0版本中,使用者只需要在规则策略上加入版本号排序类型sort: time,即可支持不可排序版本的链路智能编排
service:
- discovery-guide-service-a
- discovery-guide-service-b
blueGreen:
- expression: "#H['xyz'] == '1'"
route: green
- expression: "#H['xyz'] == '2'"
route: blue
gray:
- expression: "#H['xyz'] == '3'"
weight:
- 90
- 10
- expression: "#H['xyz'] == '4'"
weight:
- 70
- 30
- weight:
- 100
- 0
sort: time版本号排序类型(sort),可选值为version和time,缺省为version(不需要配置sort: version)
- 当排序类型为
version时,适用于版本号采用时间戳或者数字递增的方式。处理逻辑为将排序后版本号列表的第一个值作为旧的稳定版本 - 当排序类型为
time时,不限于版本号的格式。处理逻辑为将根据服务实例全局唯一ID的时间戳前缀进行排序,把上线时间最早的服务实例的版本号作为旧的稳定版本
重构全链路自动化模拟流程测试和流量侦测测试
- 全面整合和重构两个自动化测试模块,整合成一个系统工程,见
https://github.com/Nepxion/DiscoveryTool/tree/automation - 支持本地测试(Application的脚本启动方式)和云上测试(Console的Web服务方式)
云上测试包��如下主要功能
- 并行控制测试用例,通过线程安全的锁组件(本地锁或者分布式锁)并行控制测试用例,根据Key(group@@serviceid)进行判断,不允许有多个Key相同的测试用例同时运行
- 单服务器模式下,通过基于StampedLock的Caffeine实现本地锁,并提供锁过期释放机制
- 集群服务器模式下,通过基于Redis的Redisson实现分布式锁,并提供锁过期释放机制
- 测试用例执行过程中,每一步成功和失败,都提供日志输出,使用者可以实现基于Web界面的测试操作
- 测试控制台提供两种方式的Rest接口,返回为全局唯一的
testcase-id - 测试控制台需要通过Logback输入带有
testcase-id的日志 - 整合日志服务器,采集和输出测试日志到指定的分布式存储上
- 通过
testcase-id获取和显示属于指定Web界面终端的日志
- 测试控制台提供两种方式的Rest接口,返回为全局唯一的
- 支持Properties和Yaml格式的两种调用接口
全链路自动化模拟流程测试
- 工程结构化
- 支持大于2个以上版本的服务
- 支持静态版本,模式
- 支持参数变更
- 支持细粒度断言
适用于测试环境或者开发环境
具体用法,请参考
- Github Wiki :全链路自动化模拟流程测试
https://github.com/Nepxion/Discovery/wiki/全链路自动化模拟流程测试 - Gitee Wiki :全链路自动化模拟流程测试
https://gitee.com/nepxion/Discovery/wikis/pages?sort_id=6481457&doc_id=1124387
全链路自动化流量侦测测试
- 工程结构化
- 支持细粒度断言
适用于生产环境
具体用法,请参考
- Github Wiki :全链路自动化流量侦测测试
https://github.com/Nepxion/Discovery/wiki/全链路自动化流量侦测测试 - Gitee Wiki :全链路自动化流量侦测测试
https://gitee.com/nepxion/Discovery/wikis/pages?sort_id=6481458&doc_id=1124387
增加服务端版本故障转移或者版本偏好的版本号排序类型
当使用者采用上线时间作为版本排序依据的时候,需要把版本号排序类型设置为time。该方案同时适用于业务服务,Spring Cloud Gateway和Zuul网关
# 版本号排序类型。缺失则默认为version
# 版本故障转移或者版本偏好启动时,需要寻址旧的稳定版本
# 1. 当排序类型为version时,适用于版本号采用时间戳或者数字递增的方式。处理逻辑为将排序后版本号列表的第一个值作为旧的稳定版本
# 2. 当排序类型为time时,不限于版本号的格式。处理逻辑为将根据服务实例全局唯一ID的时间戳前缀进行排序,把上线时间最早的服务实例的版本号作为旧的稳定版本
# spring.application.strategy.version.sort.type=version
spring.application.strategy.version.sort.type=time
增加支持多种元数据设置方式
以Nacos注册中心的版本号元数据为例,装载元数据的优先级顺序由高到底为
- VM arguments方式的启动参数-Dmetadata.version
- 环境装载EnvironmentPostProcessor
- Git编译插件git-commit-id-plugin
- Program arguments方式的启动参数--spring.cloud.nacos.discovery.metadata.version(Spring Cloud Alibaba原生方式)
- 配置文件spring.cloud.nacos.discovery.metadata.version(Spring Cloud Alibaba原生方式)
- Program arguments方式的启动参数--spring.cloud.discovery.metadata.version(Nepxion Discovery统一方式)
- 配置文件spring.cloud.discovery.metadata.version(Nepxion Discovery统一方式)
增加基于环境装载设置的元数据注入方式
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (EnvironmentUtil.isStandardEnvironment(environment)) {
PluginMetaDataPreInstallation.getMetadata().put("abc", "123");
}
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}在src/main/resources/META-INF/spring.factories加上
org.springframework.boot.env.EnvironmentPostProcessor=\
com.xxx.yyy.zzz.MyEnvironmentPostProcessor
增加服务端点和控制台端点风险控制
服务端点增加新的开关配置
# 启动和关闭服务相关操作端点。缺失则默认为true
spring.application.admin.service.endpoint.enabled=true
# 启动和关闭配置相关操作端点。缺失则默认为true
spring.application.admin.config.endpoint.enabled=true
# 启动和关闭版本相关操作端点。缺失则默认为true
spring.application.admin.version.endpoint.enabled=true
# 启动和关闭侦测相关操作端点。缺失则默认为true
spring.application.admin.inspector.endpoint.enabled=true
# 启动和关闭路由相关操作端点。缺失则默认为true
spring.application.admin.router.endpoint.enabled=true
# 启动和关闭策略相关操作端点。缺失则默认为true
spring.application.admin.strategy.endpoint.enabled=true
# 启动和关闭Sentinel相关操作端点。缺失则默认为true
spring.application.admin.sentinel.endpoint.enabled=true
# 启动和关闭Git相关操作端点。缺失则默认为true
spring.application.admin.git.endpoint.enabled=true
# 启动和关闭Spring Cloud Gateway相关操作端点。缺失则默认为true
spring.application.admin.gateway.endpoint.enabled=true
# 启动和关闭Zuul相关操作端点。缺失则默认为true
spring.application.admin.zuul.endpoint.enabled=true
# 启动和关闭策略操作端点的验证SPEL表达式方法。缺失则默认为true
# 该端点方法使用Spring StandardEvaluationContext类,StandardEvaluationContext支持全部的Spel语法且功能齐全,但GitHub Security报告其存在一定的注入风险,推荐使用SimpleEvaluationContext,而SimpleEvaluationContext并不能满足当前框架的需求
# 如果未使用验证SPEL表达式方法,可以通过下面开关关闭在方法在策略端点上的暴露,规避风险
spring.application.admin.strategy.endpoint.validate-expression.enabled=true
控制台端点增加新的开关配置
# 启动和关闭服务相关操作端点。缺失则默认为true
spring.application.console.service.endpoint.enabled=true
# 启动和关闭配置相关操作端点。缺失则默认为true
spring.application.console.config.endpoint.enabled=true
# 启动和关闭版本相关操作端点。缺失则默认为true
spring.application.console.version.endpoint.enabled=true
# 启动和关闭侦测相关操作端点。缺失则默认为true
spring.application.console.inspector.endpoint.enabled=true
# 启动和关闭网关路由相关操作端点。缺失则默认为true
spring.application.console.route.endpoint.enabled=true
# 启动和关闭策略相关操作端点。缺失则默认为true
spring.application.console.strategy.endpoint.enabled=true
# 启动和关闭Sentinel相关操作端点。缺失则默认为true
spring.application.console.sentinel.endpoint.enabled=true
# 启动和关闭无损下线黑名单相关操作端点。缺失则默认为true
spring.application.console.blacklist.endpoint.enabled=true
# 启动和关闭故障转移相关操作端点。缺失则默认为true
spring.application.console.failover.endpoint.enabled=true
# 启动和关闭认证相关操作端点。缺失则默认为true
spring.application.console.authentication.endpoint.enabled=true
# 启动和关闭策略操作端点的验证SPEL表达式方法。缺失则默认为true
# 该端点方法使用Spring StandardEvaluationContext类,StandardEvaluationContext支持全部的Spel语法且功能齐全,但GitHub Security报告其存在一定的注入风险,推荐使用SimpleEvaluationContext,而SimpleEvaluationContext并不能满足当前框架的需求
# 如果未使用验证SPEL表达式方法,可以通过下面开关关闭在方法在策略端点上的暴露,规避风险
spring.application.console.strategy.endpoint.validate-expression.enabled=true
增加注入Header
自定义注入Header,实现StrategyHeadersInjector,允许同时注入多个,每个类里允许多个Header
public class MyStrategyHeadersInjector implements StrategyHeadersInjector {
@Override
public List<HeadersInjectorEntity> getHeadersInjectorEntityList() {
return Arrays.asList(
new HeadersInjectorEntity(HeadersInjectorType.TRANSMISSION, Arrays.asList("test1")),
new HeadersInjectorEntity(HeadersInjectorType.TRACER, Arrays.asList("test2")),
new HeadersInjectorEntity(HeadersI...3.37.0(JAN 10, 2023)
见 Nepxion Discovery 6.20.0发布
6.19.0(OCT 30, 2022)
版本列表
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 8.x.x版本(适用于2021.x.x)将继续维护
- 7.x.x版本(适用于2020.x.x)将继续维护
- 6.x.x版本(同时适用于Finchley、Greenwich和Hoxton)将继续维护
- 5.x.x版本(适用于Greenwich)已废弃
- 4.x.x版本(适用于Finchley)已废弃
- 3.x.x版本(适用于Edgware)不维护,但可用,强烈建议升级
- 2.x.x版本(适用于Dalston)已废弃
- 1.x.x版本(适用于Camden)已废弃
版本变更
① 6.x.x
- 默认集成OpenTelemetry版本为1.18.0
② 7.x.x
- 无
③ 8.x.x
- 默认集成Spring Boot版本为2.6.12
功能迭代
管理中心Swagger组件集成方式变更
6.18.0之前版本的管理中心默认集成Swagger组件,有些公司业务服务自身使用的Swagger版本过高或者过低,引入管理中心会引起不兼容的问题。从6.18.0版本提供两种方式的管理中心
<dependency>
<groupId>com.nepxion</groupId>
<!-- 不集成Swagger组件的管理中心 -->
<artifactId>discovery-plugin-admin-center-starter</artifactId>
<!-- 集成Swagger组件的管理中心 -->
<artifactId>discovery-plugin-admin-center-starter-swagger</artifactId>
</dependency>基于域名前缀的全链路蓝绿灰度发布
新增过滤器中外置Header转换和植入,该用法通过把域名前缀转化成蓝绿灰度��件表达式中的驱动参数,进而实现基于域名前缀的全链路蓝绿灰度发布。该功能只支持网关侧,不支持服务侧
基于域名前缀的全链路蓝绿灰度发布逻辑
- 蓝绿发布
当外界请求的域名为a.nepxion.com,执行新版本路由
当外界请求的域名为b.nepxion.com,执行旧版本路由- 灰度发布
当外界请求的域名为a.nepxion.com,执行新旧版本路由的某一种百分比
当外界请求的域名为b.nepxion.com,执行新旧版本路由的另一种百分比示例如下
public class MyGatewayStrategyRouteFilter extends DefaultGatewayStrategyRouteFilter {
@Autowired
private GatewayStrategyContextHolder gatewayStrategyContextHolder;
// 把域名前缀转化成蓝绿灰度条件表达式中的驱动参数
@Override
public Map<String, String> getExternalHeaderMap() {
String host = gatewayStrategyContextHolder.getURI().getHost();
String domain = host.substring(0, host.indexOf("."));
Map<String, String> externalHeaderMap = new HashMap<String, String>();
externalHeaderMap.put("domain", domain);
return externalHeaderMap;
}
}使用者根据具体情况,也可以解析域名中间部分当作驱动参数,甚至直接把全域名当作驱动参数,那么策略规则的驱动参数则对应为domain
新增运维平台支持Yaml和Json两种格式的蓝绿灰度发布
Yaml格式
service:
- discovery-guide-service-a
- discovery-guide-service-b
blueGreen:
- expression: "#H['xyz'] == '1'"
route: green
- expression: "#H['xyz'] == '2'"
route: blue
gray:
- expression: "#H['xyz'] == '3'"
weight:
- 90
- 10
- expression: "#H['xyz'] == '4'"
weight:
- 70
- 30
- weight:
- 100
- 0
header:
xyz: 1Json格式
{
"service": ["discovery-guide-service-a", "discovery-guide-service-b"],
"blueGreen": [
{
"expression": "#H['xyz'] == '1'",
"route": "green"
},
{
"expression": "#H['xyz'] == '2'",
"route": "blue"
}
],
"gray": [
{
"expression": "#H['xyz'] == '3'",
"weight": [90, 10]
},
{
"expression": "#H['xyz'] == '4'",
"weight": [70, 30]
},
{
"weight": [100, 0]
}
],
"header": {"xyz": "1"}
}上述两种方式等效
新增运维平台进行半自动化流量管控
① 第一次蓝绿灰度发布
通过创建版本蓝绿灰度发布,手工输入条件表达式,后端链路智能编排。Open API支持Yaml和Json格式两种,任选一个
http://localhost:6001/strategy/create-version-release-yaml/{group}/{serviceId}
http://localhost:6001/strategy/create-version-release-json/{group}/{serviceId}接口传输内容示例
service:
- service-a
- service-b
blueGreen:
- expression: "#H['xyz'] == '1'"
route: green
- expression: "#H['xyz'] == '2'"
route: blue
gray:
- expression: "#H['xyz'] == '3'"
weight:
- 90
- 10
- expression: "#H['xyz'] == '4'"
weight:
- 70
- 30② 第二次以及未来N次蓝绿灰度发布
通过重新创建版本蓝绿灰度发布,把需要重新执行蓝绿灰度发布的服务列表加入,重用上次的保留条件表达式,进行蓝绿灰度发布。Open API支持Yaml和Json格式两种,任选一个
http://localhost:6001/strategy/recreate-version-release-yaml/{group}/{serviceId}
http://localhost:6001/strategy/recreate-version-release-json/{group}/{serviceId}接口传输内容示例
service:
- service-a
- service-b
condition: true③ 停止蓝绿灰度发布
通过重置蓝绿灰度发布,保留条件表达式,清除链路路由,以便下一次蓝绿灰度发布不再输入条件表达式。Open API如下
http://localhost:6001/strategy/reset-release/{group}/{serviceId}④ 定时更新灰度发布
DevOps运维平台每隔一段时间,调整灰度权重比例(减少旧版本流量,增加新版本流量),平稳达到流量从旧版本到新版本的迁移
全链路蓝绿灰度发布自动化模拟流程测试
适用于测试环境或者开发环境
具体用法,请参考
- Github Wiki :全链路自动化模拟流程测试
https://github.com/Nepxion/Discovery/wiki/全链路自动化模拟流程测试 - Gitee Wiki :全链路自动化模拟流程测试
https://gitee.com/nepxion/Discovery/wikis/pages?sort_id=6481457&doc_id=1124387
全链路蓝绿灰度发布自动化流量侦测测试
适用于生产环境
具体用法,请参考
- Github Wiki :全链路自动化流量侦测测试
https://github.com/Nepxion/Discovery/wiki/全链路自动化流量侦测测试 - Gitee Wiki :全链路自动化流量侦测测试
https://gitee.com/nepxion/Discovery/wikis/pages?sort_id=6481458&doc_id=1124387
新增运维平台对接的蓝绿灰度发布接口
下面列出的是策略Open API上完整的接口
public interface StrategyResource {
// 全局订阅方式,获取Json格式的蓝绿灰度发布
ConditionStrategy getVersionRelease(String group);
// 全局订阅方式,根据Yaml格式,创建版本蓝绿灰度发布
String createVersionRelease(String group, String conditionStrategyYaml);
// 全局订阅方式,根据Json格式,创建版本蓝绿灰度发布
String createVersionRelease(String group, ConditionStrategy conditionStrategy);
// 全局订阅方式,根据Yaml格式,重新创建版本蓝绿灰度发布(创建链路智能编排,不创建条件表达式)
String recreateVersionRelease(String group, String conditionRouteStrategyYaml);
// 全局订阅方式,根据Json格式,重新创建版本蓝绿灰度发布(创建链路智能编排,不创建条件表达式)
String recreateVersionRelease(String group, ConditionRouteStrategy conditionRouteStrategy);
// 全局订阅方式,重置蓝绿灰度发布(清除链路智能编排,不清除条件表达式)
String resetRelease(String group);
// 全局订阅方式,清除蓝绿灰度发布
String clearRelease(String group);
// 局部订阅方式,获取Json格式的蓝绿灰度发布
ConditionStrategy getVersionRelease(String group, String serviceId);
// 局部订阅方式,根据Yaml格式,创建版本蓝绿灰度发布
String createVersionRelease(String group, String serviceId, String conditionStrategyYaml);
// 局部订阅方式,根据Json格式,创建版本蓝绿灰度发布
String createVersionRelease(String group, String serviceId, ConditionStrategy conditionStrategy);
// 局部订阅方式,根据Yaml格式,重新创建版本蓝绿灰度发布(创建链路智能编排,不创建条件表达式)
String recreateVersionRelease(String group, String serviceId, String conditionRouteStrategyYaml);
// 局部订阅方式,根据Json格式,重新创建版本蓝绿灰度发布(创建链路智能编排,不创建条件表达式)
String recreateVersionRelease(String group, String serviceId, ConditionRouteStrategy conditionRouteStrategy);
// 局部订阅方式,重���蓝绿灰度发布(清除链路智能编排,不清除条件表达式)
String resetRelease(String group, String serviceId);
// 局部订阅方式,清除蓝绿灰度发布
String clearRelease(String group, String serviceId);
// 根据Yaml格式,解析版本蓝绿灰度发布策略为Xml格式
String parseVersionRelease(String conditionStrategyYaml);
// 根据Json格式,解析版本蓝绿灰度发布策略为Xml格式
String parseVersionRelease(ConditionStrategy conditionStrategy);
// 根据Xml格式,反解析版本蓝绿灰度发布策略为Json格式
ConditionStrategy deparseVersionReleaseXml(String ruleXml);
// 根据Yaml格式,反解析版本蓝绿灰度发布策略为Json格式
ConditionStrategy deparseVersionReleaseYaml(String conditionStrategyYaml);
// 校验策略的条件表达式
boolean validateExpression(String expression, String validation);
}具体用法,请参考
- Github Wiki :如何使用DevOps运维平台对接的公共接口
https://github.com/Nepxion/Discovery/wiki/如何使用DevOps运维平台对接的公共接口 - Gitee Wiki :如何使用DevOps运维平台对接的公共接口
https://gitee.com/nepxion/Discovery/wikis/pages?sort_id=6428158
新增运维平台对接的侦测接口
- 增加了序列化成
List<Map<String, String>>对象的返回结果 - 增加了
List<String> filter的过滤条件,例如,用户只想看到服务名和版本信息,就只返回带有这两个信息的侦测结果
public interface InspectorResource {
String inspect(String protocol, String portal, String path, List<String> service, Map<String, String> header, List<String> filter);
List<Map<String, String>> inspectToList(String protocol, String portal, String path, List<String> service, Map<String, String> header, List<String> filter);
}重构优化
优化核心Http Header传递方式
- 老的方式,对于
n-d-service-version,n-d-service-region,n-d-service-env和n-d-service-zone四个值,在未配置元数据的情况下,默认全链路Header传递default值,并且如果加入了监控中间件和日志,也会默认输出default值的埋点 - 新的方式,当上述值未配置元数据的情况下,不全链路传递,也不会输出到监控中间件和日志
优化后全链路蓝绿灰度传输的Header容量为270个字节,可以减少传递80个字节Header传输量,如果接入了监控中间件,同样也能减少埋点数据量
优化数组方式的随机权重算法
移植并优化了Nacos内置的随机权重算法
现有内置两种随机权重算法,通过如下配置可切换到不同的算法上
# 默认随机权重算法
spring.application.weight.random.type=MapWeightRandom
# Nacos内置随机权重算法
spring.application.weight.random.type=ArrayWeightRandom
优化7.x.x和8.x.x版本对DiscoveryAgent使用方式
7.x.x和8.x.x版本下,当服务启动时发现DiscoveryAgent未安装,则服务启动失败,避免使用者忘记加Disc...
3.36.0(OCT 30, 2022)
见 Nepxion Discovery 6.19.0发布

