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: 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-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未安装,则服务启动失败,避免使用者忘记加DiscoveryAgent而导致功能有损
优化YamlUtil
抽象增加fromYaml
和toYaml
两个通用方法
优化PluginInfoUtil
支持侦测结果的简化和序列化成对象
优化EnvironmentUtil
支持判断ConfigurableEnvironment
是否为StandardEnvironment
缺陷修复
修复环境故障转移开关失效的缺陷
相关发布
DiscoveryConsole发布
发布1.0.0版本
DiscoverySimulator发布
发布1.0.0版本
DiscoveryInspector发布
发布1.0.0版本
DiscoveryAgent发布
无
DiscoveryDesktop发布
无
相关下载
DiscoveryConsole下载
访问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
获取最新版本