Skip to content

Releases: Nepxion/Discovery

6.22.0(AUG 18, 2024)

18 Aug 11:30
Compare
Choose a tag to compare

版本列表

提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本 状态 SC SB SCA
10.0.0 (商业版) 2023.x.x 3.2.x 2023.x.x.x
9.0.0 (商业版) 2022.x.x 3.1.x
3.0.x
2022.x.x.x
8.0.0 (商业版) 2021.x.x 2.7.x
2.6.x
2021.x.x.x
7.0.0 (商业版) 2020.x.x 2.5.x
2.4.1 ↑
2021.x
6.22.0 H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.7 ↑
6.12.12 ↓ H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.6 ↓
2.1.x
2.0.x
5.6.0 G 2.1.x 2.1.x
4.15.0 F 2.0.x 2.0.x
3.40.0 E 1.5.x 1.5.x
2.0.x D 1.x.x 1.5.x
1.0.x C 1.x.x 1.5.x

版本变更

① 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)

18 Aug 11:25
Compare
Choose a tag to compare

见 Nepxion Discovery 6.22.0发布

6.21.0(MAR 20, 2023)

20 Mar 06:55
Compare
Choose a tag to compare

版本列表

提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本 状态 SC SB SCA
9.0.0 (商业版) 2022.x.x 3.0.x 2022.x.x.x
8.0.0 (商业版) 2021.x.x 2.7.x
2.6.x
2021.x.x.x
7.0.0 (商业版) 2020.x.x 2.5.x
2.4.1 ↑
2021.x
6.21.0 H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.7.RELEASE ↑
6.12.11 ↓ H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.6.RELEASE ↓
2.1.x
2.0.x
5.6.0 G 2.1.x 2.1.x
4.15.0 F 2.0.x 2.0.x
3.38.0 E 1.5.x 1.5.x
2.0.x D 1.x.x 1.5.x
1.0.x C 1.x.x 1.5.x

表示维护中 | 表示不维护,但可用,强烈建议升级 | 表示不维护,不可用,已废弃

  • 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 服务类型列表。取值:
service
gateway
如果查询全部,则输入包含两者的列表

返回参数

参数类型 描述
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)

20 Mar 06:53
Compare
Choose a tag to compare

见 Nepxion Discovery 6.21.0发布

6.20.0(JAN 10, 2023)

10 Jan 09:33
Compare
Choose a tag to compare

贡献列表

  • 感谢@ruansheng8的贡献 : Discovery Automation基于Java 17 + Spring Boot 3 + GraalVM实现本地镜像化

版本列表

提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本 状态 SC SB SCA
9.0.0 (商业版) 2022.x.x 3.0.x 2022.x.x.x
8.0.0 (商业版) 2021.x.x 2.7.x
2.6.x
2021.x.x.x
7.0.0 (商业版) 2020.x.x 2.5.x
2.4.1 ↑
2021.x
6.20.0 H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.7.RELEASE ↑
6.12.10 ↓ H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.6.RELEASE ↓
2.1.x
2.0.x
5.6.0 G 2.1.x 2.1.x
4.15.0 F 2.0.x 2.0.x
3.37.0 E 1.5.x 1.5.x
2.0.x D 1.x.x 1.5.x
1.0.x C 1.x.x 1.5.x

表示维护中 | 表示不维护,但可用,强烈建议升级 | 表示不维护,不可用,已废弃

  • 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),可选值为versiontime,缺省为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界面终端的日志
  • 支持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...
Read more

3.37.0(JAN 10, 2023)

10 Jan 09:32
Compare
Choose a tag to compare

见 Nepxion Discovery 6.20.0发布

6.19.0(OCT 30, 2022)

30 Oct 18:36
Compare
Choose a tag to compare

版本列表

提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本 状态 SC SB SCA
8.0.0 (商业版) 2021.x.x 2.7.x
2.6.x
2021.x.x.x
7.0.0 (商业版) 2020.x.x 2.5.x
2.4.1 ↑
2021.x
6.19.0 H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.7.RELEASE ↑
6.12.9 ↓ H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.6.RELEASE ↓
2.1.x
2.0.x
5.6.0 G 2.1.x 2.1.x
4.15.0 F 2.0.x 2.0.x
3.36.0 E 1.5.x 1.5.x
2.0.x D 1.x.x 1.5.x
1.0.x C 1.x.x 1.5.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

  • 默认集成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: 1

Json格式

{
  "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-versionn-d-service-regionn-d-service-envn-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...

Read more

3.36.0(OCT 30, 2022)

30 Oct 18:33
Compare
Choose a tag to compare

见 Nepxion Discovery 6.19.0发布

6.17.0(SEP 30, 2022)

30 Sep 11:10
Compare
Choose a tag to compare

发布日志

发布策略

提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本 状态 SC SB SCA
8.0.0 (商业版) 2021.x.x 2.7.x
2.6.x
2021.x.x.x
7.0.0 (商业版) 2020.x.x 2.5.x
2.4.1 ↑
2021.x
6.17.0 H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.7.RELEASE ↑
6.12.7 ↓ H.SR5 ↑
H
G
F
2.3.x
2.2.x
2.1.x
2.0.x
2.2.6.RELEASE ↓
2.1.x
2.0.x
5.6.0 G 2.1.x 2.1.x
4.15.0 F 2.0.x 2.0.x
3.34.0 E 1.5.x 1.5.x
2.0.x D 1.x.x 1.5.x
1.0.x C 1.x.x 1.5.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)已废弃

版本变更

功能迭代

新增运维平台进行蓝绿灰度发布接口

基于简化版的Json格式,实现蓝绿灰度发布

① 新增创建版本蓝绿灰度发布接口

String createVersionRelease(String group, ConditionStrategy conditionStrategy);

String createVersionRelease(String group, String serviceId, ConditionStrategy conditionStrategy);

Json格式如下:

  • 兜底策略
{
  "service": ["discovery-guide-service-a", "discovery-guide-service-b"]
}
  • 蓝绿发布策略
{
  "service": ["discovery-guide-service-a", "discovery-guide-service-b"],
  "blueGreen": [
    {
      "expression": "#H['a'] == '1'",
      "route": "green"
    }, 
    {
      "expression": "#H['a'] == '2'",
      "route": "blue"
    }
  ]
}
  • 灰度发布策略
{
  "service": ["discovery-guide-service-a", "discovery-guide-service-b"],
  "gray": [
    {
      "weight": [0, 100]
    }
  ]
}

② 新增解析版本蓝绿灰度发布接口

String parseVersionRelease(ConditionStrategy conditionStrategy);

③ 新增清除蓝绿灰度发布接口

String clearRelease(String group);

String clearRelease(String group, String serviceId);

更多详情,请参考https://github.com/Nepxion/Discovery/wiki/如何对接DevOps运维平台实施蓝绿灰度发布最佳企业级实践

新增运维平台进行故障转移API接口

① 新增创建故障转移接口

String createFailover(FailoverType failoverType, String group, String failoverValue);

String createFailover(FailoverType failoverType, String group, String serviceId, String failoverValue);

② 新增清除故障转移接口

String clearFailover(String group, FailoverType failoverType);

String clearFailover(String group, String serviceId, FailoverType failoverType);

新增运维平台进行无损下线API接口

① 新增屏蔽黑名单接口。除了IP地址和端口外,增加直接添加serviceUUId的接口

该两个接口不仅可以支持单个UUId,也可以支持UUId的通配。例如:

  • A服务有两个实例,实例1的UUId为20220920-113301-033-4289-533-056,实例2的UUId为20220920-113259-190-5762-550-884,代表它们同一天2022年09月20日上线
  • 通过20220920*通配符的方式,表示屏蔽2022年09月20日上线的指定服务的所有实例,如果希望更精确,20220920-11*,表示屏蔽2022年09月20日11点上线的指定服务的所有实例
String addBlacklist(String group, String targetServiceId, String targetServiceUUId);

String addBlacklist(String group, String serviceId, String targetServiceId, String targetServiceUUId);

② 新增清除黑名单接口

boolean clearBlacklist(String group);

boolean clearBlacklist(String group, String serviceId);

新增运维平台进行网关动态路由API接口

boolean updateRemoteRoute(GatewayType gatewayType, String group, String serviceId, String route);

boolean clearRemoteRoute(GatewayType gatewayType, String group, String serviceId);

String getRemoteRoute(GatewayType gatewayType, String group, String serviceId);

新增运维平台进行Sentinel限流熔断API接口

boolean updateRemoteSentinel(SentinelRuleType ruleType, String group, String serviceId, String rule);

boolean clearRemoteSentinel(SentinelRuleType ruleType, String group, String serviceId);

String getRemoteSentinel(SentinelRuleType ruleType, String group, String serviceId);

新增运维平台进行规则配置对象获取API接口

boolean updateRemoteRuleEntity(String group, String serviceId, RuleEntity ruleEntity) throws Exception;

RuleEntity getRemoteRuleEntity(String group, String serviceId) throws Exception;

新增运维平台进行流量侦测API接口

String inspect(String protocol, String portalId, String contextPath, String services);

新增UUId和AppId作为路由侦测的属性

gateway 
-> [ID=discovery-guide-service-a][UID=20220920-113259-190-5762-550-884][AID=11798][T=service][P=Nacos][H=192.168.31.237:3002][V=1.1][R=qa][E=common][Z=zone2][G=discovery-guide-group][A=true][TID=6f6addfd51494ff6][SID=403c9410afcfae78] 
-> [ID=discovery-guide-service-b][UID=20220920-113300-733-9197-181-332][AID=11799][T=service][P=Nacos][H=192.168.31.237:4002][V=1.1][R=dev][E=common][Z=zone2][G=discovery-guide-group][A=false][TID=6f6addfd51494ff6][SID=517d61bdbb2013b1]

AppId是Apollo配置中心独有的,如果使用的不是Apollo配置中心,将不会显示这个属性

补全运维接口数据

  • 补全InstanceEntity属性,暴露给运维平台的接口数据更加齐全
  • 暴露注册到元数据的AppID给运维平台
  • 为避免注册中心元数据冲突,app_id更名为spring_application_app_id,使其与spring_application_name和spring_application_uuid统一

增加服务端点精细化控制

增加新的开关配置

# 启动和关闭服务相关操作端点。缺失则默认为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

去除旧的无意义的开关配置

# 开启和关闭服务注册层面的控制。一旦关闭,服务注册的黑/白名单过滤功能将失效,最大注册数的限制过滤功能将失效。缺失则默认为true
spring.application.register.control.enabled=true
# 开启和关闭服务发现层面的控制。一旦关闭,服务多版本调用的控制功能将失效,动态屏蔽指定IP地址的服务实例被发现的功能将失效。缺失则默认为true
spring.application.discovery.control.enabled=true
# 开启和关闭通过Rest方式对规则配置的控制和推送。一旦关闭,只能通过远程配置中心来控制和推送。缺失则默认为true
spring.application.config.rest.control.enabled=true

去除不成熟的负载均衡时找不到服务的重试功能

去除开关配置

# 负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试。缺失则默认为false
spring.application.no.servers.retry.enabled=false
# 负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试的次数。缺失则默认为5
spring.application.no.servers.retry.times=5
# 负载均衡下,消费端尝试获取对应提供端初始服务实例列表为空的时候,进行重试的时间间隔。缺失则默认为2000
spring.application.no.servers.retry.await.time=2000

增强和优化Swagger

除了提供基本的Swagger功能之外,内置模块还对使用者提供扩展

自定义Swagger接口利用内置的SwaggerConfiguration来初始化,这样使用者可以不需要定义自己的SwaggerConfiguration。通过如下配置实现

# 启动和关闭Swagger。缺失则默认为true
swagger.enabled=true
# 业务服务Swagger Docket组名
swagger.service.group=Your group
# 业务服务Swagger扫描目录
swagger.service.packages=your-package1;your-package2
# 业务服务Swagger描述
swagger.service.description=Your service Restful APIs
# 业务服务Swagger版本
swagger.service.version=1.0.0
# 业务服务Swagger License名称
swagger.service.license.name=Apache License 2.0
# 业务服务Swagger License链接
swagger.service.license.url=http://www.apache.org/licenses/LICENSE-2.0
# 业务服务Swagger联系人名称
swagger.service.contact.name=Nepxion
# 业务服务Swagger联系人网址
swagger.service.contact.url=https://github.com/Nepxion/Discovery
# 业务服务Swagger联系人邮件
[email protected]
# 业务服务Swagger服务条件网址
swagger.service.termsOfService.url=http://nepxion.com/discovery

增加蓝绿灰度混合发布自动化测试用例

重构优化

  • 优化PluginAdapter
  • 优化InstanceEntityWrapper
  • 优化和精简元数据Metadata

缺陷修复

相关发布

DiscoveryAgent发布

DiscoveryDesktop发布

相关下载

DiscoveryAgent下载

访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本

DiscoveryDesktop下载

访问https://github.com/Nepxion/DiscoveryDesktop/releases获取最新版本

3.34.0(SEP 30, 2022)

30 Sep 11:08
Compare
Choose a tag to compare

见 Nepxion Discovery 6.17.0发布