Releases: Nepxion/Discovery
6.13.1(FEB 20, 2022)
本版本主要是升级兼容Spring Cloud Alibaba 2.2.7.RELEASE(不适用于2.2.6.RELEASE),以及外围一些中间件版本的升级
贡献列表
发布日志
发布策略
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 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)已废弃
版本变更
- 默认集成Spring Cloud Alibaba版本为2.2.7.RELEASE
- 默认集成Apollo版本为1.9.2
- 默认集成SkyWalking版本为8.9.0
- 默认集成OpenTelemetry版本为1.11.0
- 默认集成Guava版本为31.0.1-jre
- 默认集成Caffeine版本为2.9.3
- 默认集成JEtcd版本为0.5.11
另:7.0.0商业版版本变更
- 默认升级集成Spring Cloud版本为2020.0.5
- 默认升级集成Spring Boot版本为2.5.9
- 默认升级集成Spring Boot Admin版本为2.5.5
功能迭代
- 适配Spring Cloud Alibaba 2.2.7.RELEASE,由于NacosServiceRegistry构造方法做了变更,同步变更NacosServiceRegistryDecorator,6.13.1只适用于Spring Cloud Alibaba 2.2.7.RELEASE及更高版本
- 3.x.x(基于Spring Boot1.5.x)不再维护,本次发版的3.30.0为最后一个版本
重构优化
无
缺陷修复
- ThreadLocalHook注册bug,,参考
https://github.com/Nepxion/DiscoveryAgent/issues/5
相关发布
DiscoveryAgent发布
- 修复Collections.emptyList()使用不当问题,参考
https://github.com/Nepxion/DiscoveryAgent/issues/6
DiscoveryDesktop发布
无
相关下载
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryUI/releases获取最新版本
3.30.0(FEB 20, 2022)
见 Nepxion Discovery 6.13.1 发布
6.12.1(SEP 6, 2021)
发布日志
发布策略
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 7.x.x版本(适用于202x.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)已废弃
版本变更
无
功能迭代
无
重构优化
无
缺陷修复
增加Hystrix非空判断,参考 :https://github.com/Nepxion/Discovery/issues/174
相关发布
DiscoveryAgent发布
无
DiscoveryDesktop发布
无
相关下载
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryUI/releases获取最新版本
3.28.1(SEP 6, 2021)
见 Nepxion Discovery 6.12.1 发布
6.12.0(SEP 1, 2021)
贡献列表
- 感谢@Tank-zhu的贡献
- 感谢@flyingglass的贡献
发布日志
发布策略
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 7.x.x版本(适用于202x.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)已废弃
版本变更
- 默认集成Apollo版本为1.9.0
- 默认集成SkyWalking版本为8.7.0
- 默认集成OpenTelemetry版本为1.5.0
- 默认集成JEtcd版本为0.5.10
功能迭代
Sentinel熔断指标监控
全链路调用过程中,实施端到端Sentinel熔断时,在不同场景下会触发如下四个事件
- Pass
- Block
- Success
- Exception
通过Prometheus Micrometer对上述事件进行计数统计,可输出Grafana看板上。感谢@Tank-zhu的PR
使用者可以通过如下开关打开或者关闭输出功能项
# 启动和关闭Sentinel Metric通过次数统计输出功能。缺失则默认为true
spring.application.strategy.metric.sentinel.pass.qps.output.enabled=true
# 启动和关闭Sentinel Metric阻塞次数统计输出功能。缺失则默认为true
spring.application.strategy.metric.sentinel.block.qps.output.enabled=true
# 启动和关闭Sentinel Metric成功次数统计输出功能。缺失则默认为true
spring.application.strategy.metric.sentinel.success.qps.output.enabled=true
# 启动和关闭Sentinel Metric异常次数统计输出功能。缺失则默认为true
spring.application.strategy.metric.sentinel.exception.qps.output.enabled=true
重构优化
重构优化随机权重架构
随机权重算法目前包括基于Array数组机制和Map的TreeMap机制的随机权重算法,支持用户自定义WeightRandom的算法扩展。感谢@flyingglass的PR
缺陷修复
① 修复SentinelTracerProcessorSlotEntryCallback中Sentinel Rule为空的缺陷
② 统一权重值为整数类型
相关发布
DiscoveryAgent发布
无
DiscoveryDesktop发布
无
相关下载
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryUI/releases获取最新版本
3.28.0(SEP 1, 2021)
见 Nepxion Discovery 6.12.0 发布
6.11.0(JUL 11, 2021)
贡献列表
- 感谢@pegasus的贡献
- 感谢@zifenhan的贡献
- 感谢@ayang的贡献
- 感谢@星河的贡献
- 感谢@jimodebeiju123的贡献
- 感谢@rottenmu的测试
- 感谢@春雷的测试
- 感谢@blank的测试
- 感谢@弄潮儿的测试
- 感谢@明天better的测试
- 感谢@陌路的测试
发布日志
6.11.0版,一个经过全面严格优化和严格测试的版本,架构科学性、代码规范性和高可用以及性能方面上更上一层楼,除此之外,暴露了更加丰富的端点(Endpoint)接口,供第三方云原生系统(例如,DevOps平台)做对接。不过,对于非核心的模块优化和重构,带来一些使用上的不兼容性,向广大用户致以歉意,我们相信您可以在几分钟内解决不兼容性问题。Please enjoy!
发布策略
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 7.x.x版本(适用于202x.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)已废弃
版本变更
- 默认集成Spring Boot版本为2.3.12.RELEASE(
可降级) - 默认集成Spring Cloud版本为Hoxton.SR12(
可降级),Hoxton.SR12为Spring Cloud官方发布的最后一个版本 - 默认集成Spring Cloud Alibaba版本为2.2.6.RELEASE(
可降级) - 默认集成Nacos 1.4.x以上版本。如果使用1.4.x以下版本,那么
- 跟业务服务相关的Plugin模块不受影响
- 跟业务服务不相关的Console模块受影响,新增的Rest接口
/config/remote/update/{group}/{serviceId}/{formatType}无法使用,必须使用不带{formatType}参数的老接口 - Nacos 1.4.x以上版本推送参数新增配置文件类型(包括 xml | json | yaml | properties | html | text),可以让配置在Nacos界面上有效区别出不同的配置类型并高亮,从而提高易用性
- 默认集成Caffeine版本为2.9.2
- 默认集成SkyWalking APM Toolkit版本为8.6.0
- 默认集成OpenTelemetry版本为1.3.0
- 升级JEtcd版本为0.5.7,解决在Hoxton高版本抛Netty Grpc版本不兼容的错误
功能迭代
增强蓝绿灰度发布
① 蓝绿发布支持内置兜底路由
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<strategy-release>
<conditions type="blue-green">
<!-- 蓝路由,条件expression驱动 -->
<condition id="blue-condition" expression="#H['a'] == '1'" version-id="blue-route"/>
<!-- 绿路由,条件expression驱动 -->
<condition id="green-condition" expression="#H['a'] == '1' and #H['b'] == '2'" version-id="green-route"/>
<!-- 兜底路由,无expression驱动 -->
<condition id="basic-condition" version-id="basic-route"/>
</conditions>
<routes>
<route id="blue-route" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>
<route id="green-route" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</route>
<route id="basic-route" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</route>
</routes>
</strategy-release>
</rule>② 灰度发布支持内置兜底路由
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<strategy-release>
<conditions type="gray">
<!-- 灰度路由1,条件expression驱动 -->
<condition id="gray-condition1" expression="#H['a'] == '1'" version-id="gray-route=10;stable-route=90"/>
<!-- 灰度路由2,条件expression驱动 -->
<condition id="gray-condition2" expression="#H['a'] == '1' and #H['b'] == '2'" version-id="gray-route=85;stable-route=15"/>
<!-- 兜底路由,无expression驱动 -->
<condition id="basic-condition" version-id="gray-route=0;stable-route=100"/>
</conditions>
<routes>
<route id="gray-route" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>
<route id="stable-route" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</route>
</routes>
</strategy-release>
</rule>③ 蓝绿灰度混合发布
基于上述增强,支持更简单更强大的蓝绿灰度混合发布功能
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<strategy-release>
<conditions type="blue-green">
<condition id="condition-0" expression="#H['a'] == '0'" version-id="route-0"/>
<condition id="condition-1" expression="#H['a'] == '1'" version-id="route-1"/>
<condition id="basic-condition" version-id="basic-route"/> <!-- 可以删除掉蓝绿发布的兜底策略 -->
</conditions>
<conditions type="gray">
<condition id="condition-0" expression="#H['a'] == '2'" version-id="route-0=10;route-1=90"/>
<condition id="condition-1" expression="#H['a'] == '3'" version-id="route-0=85;route-1=15"/>
<condition id="basic-condition" version-id="route-0=0;route-1=100"/>
</conditions>
<routes>
<route id="route-0" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>
<route id="route-1" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>
<route id="basic-route" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</route>
</routes>
</strategy-release>
</rule>规则解读
原则:蓝绿规则优先于灰度规则
if (a == 0) {
执行蓝绿发布blue-green的route-0下的路由
} else if (a == 1) {
执行蓝绿发布blue-green的route-1下的路由
} else {
执行蓝绿发布blue-green的basic-route下的兜底路由
} 提醒:当蓝绿发布存在兜底策略(
basic-condition),灰度发布永远不会被执行
如果删除掉蓝绿发布的兜底策略,那么执行逻辑则变为
if (a == 0) {
执行蓝绿发布route-0下的路由
} else if (a == 1) {
执行蓝绿发布route-1下的路由
} else if (a == 2) {
执行灰度发布route-0=10;route-1=90下的流量百分比分配路由
} else if (a == 3) {
执行灰度发布route-0=85;route-1=15下的流量百分比分配路由
} else {
执行灰度发布route-0=0;route-1=100下的兜底路由
由于赋予了route-0=0,那么流量会全部打到route-1上,相当于变种的蓝绿发布
}蓝绿灰度混合发布一些应用场景和示例,可参考
https://github.com/Nepxion/Discovery/wiki -> 如何执行高级蓝绿灰度混合发布
网关动态路由
网关动态路由功能,主要包括
- 路由动态添加
- 路由动态修改
- 路由动态删除
- 路由动态批量更新
- 路由查询
- 路由动态变更后,通过事件总线方式发出事件通知
上述操作,可以通过
- 网关暴露Rest Endpoint接口实施
- 控制台暴露Rest Endpoint接口,对同一个网关下若干个实例批量实施
- 网关订阅配置中心(包括Nacos、Apollo、Consul、Etcd、Redis、Zookeeper)批量实施
Spring-Cloud-Gateway网关动态路由
提醒:Spring Cloud Gateway网关在自动路由模式下,动态路由不能工作
支持Spring Cloud Gateway网关官方断言器和过滤器,也支持用户自定义断言器和过滤器
① Spring Cloud Gateway网关动态路由配置
- 精简配置
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"predicates": [
"Path=/discovery-guide-service-a/**,/x/**,/y/**"
],
"filters": [
"StripPrefix=1"
]
}
]
- 完整配置
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"predicates": [
"Path=/discovery-guide-service-a/**,/x/**,/y/**"
],
"filters": [
"StripPrefix=1"
],
"order": 0,
"metadata": {}
}
]
② Spring Cloud Gateway网关自定义动态路由配置
自定义方式描述网关内置断言器和过滤器
提醒:自定义方式描述网关内置断言器和过滤器的Key必须遵循如下规则
- 对于没有显式args定义的配置,类似Path、StripPrefix这种配置,args名称必须是
_genkey_序号格式。例如,"_genkey_0": "/discovery-guide-service-a/**" - 对于显式args定义的配置,类似Header、Cookie、Query这种配置,args名称遵照Spring Cloud Gateway内置格式,请查看相关文档或者源码。例如,Header的KV格式为header -> regexp,Cookie的KV格式为name->regexp,Query的KV格式为param->regexp
[
{
"id": "route0",
"uri": "lb://discovery-guide-service-a",
"userPredicates": [
{
"name": "Path",
"args": {
"_genkey_0": "/discovery-guide-service-a/**",
"_genkey_1": "/x/**",
"_genkey_2": "/y/**"
}
},
{
"name": "Header",
"args": {
"header": "a",
"regexp": "1"
}
},
{
"name": "Header",
"args": {
"header": "b",
"regexp": "2"
}
},
{
"name": "Cookie",
"args": {
"name": "c",
"regexp": "3"
}
},
{
"name": "Cookie",
"args": {
"name": "d",
"regexp": "4"
}
},
{
"name": "Query",
"args": {
"param": "e",
"regexp": "5"
}
},
{
"name": "Query",
"args": {
"param": "f",
"regexp": "6"
}
}
],
"userFilters": [
{
"name": "StripPrefix",
"args": {
"_genkey_0": "1"
}
}
]
}
]
在DiscoveryPlatform界面上,格式为
Path={"_genkey_0":"/discovery-guide-service-a/**", "_genkey_1":"/x/**", "_genkey_2":"/y/**"}
StripPrefix={"...
3.27.0(JUL 11, 2021)
见 Nepxion Discovery 6.11.0 发布
6.10.0(APR 26, 2021)
贡献列表
发布日志
发布策略
提醒:版本号右边,
↑ 表示>=该版本号, ↓ 表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 7.x.x版本(适用于202x.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)已废弃
版本变更
- 默认集成Spring Boot版本为2.3.10.RELEASE(
可降级) - 默认集成Spring Cloud版本为Hoxton.SR11(
可降级) - 默认集成SkyWalking版本为8.5.0
- 升级EventBus版本为2.0.15
- 升级Matrix版本为2.0.9
功能迭代
自动扫描目录
自动扫描目录功能为省掉手工配置扫描目录而设定的,当使用者手工配置了扫描目录,则采用使用者配置的目录,如果没配置,则采用自动扫描目录的方式。感谢@zhongxun提供的相关解决方案和代码
如下配置是手工配置扫描目录的样例
# 路由策略的时候,需要指定对业务RestController类的扫描路径。此项配置作用于RPC方式的调用拦截、消费端的服务隔离和调用链三项功能
spring.application.strategy.scan.packages=com.nepxion.discovery.guide.service
① 自动扫描目录的配置
# 启动和关闭自动扫描目录,当扫描目录未人工配置的时候,可以通过自动扫描方式决定扫描目录。缺失则默认为true
spring.application.strategy.auto.scan.packages.enabled=true
# 启动和关闭嵌套扫描,嵌套扫描指扫描非本工程下外部包的目录,可以支持多层嵌套。缺失则默认为false
spring.application.strategy.auto.scan.recursion.enabled=false
② 自动扫描目录的逻辑
在假设的场景中,SpringBoot入口设定扫描目录为com.a,com.a目录下有个Spring对象通过ComponentScan方式设定扫描目录为com.b,com.b目录下有个Spring对象通过ComponentScan方式设定扫描目录为com.c,那么最终计算出来的目录为
嵌套扫描下,得到的扫描目录是
SpringBoot入口所在的目录;com.a;com.b;com.c
非嵌套扫描下,得到的扫描目录是
SpringBoot入口所在的目录;com.a
③ 扩展获取自动扫描目录
使用者可以通过如下代码得到自动扫描目录
public class MyService {
@Autowired
private StrategyPackagesExtractor strategyPackagesExtractor;
public void getPackages() {
// 获取@SpringBootApplication所在类入口的扫描目录(一般只有一个),返回List<String>类型
strategyPackagesExtractor.getBasePackagesList();
// 获取所有嵌套的扫描目录(包括当前工程的所有类中@SpringBootApplication和@ComponentScan注解设定的扫描目录),返回List<String>类型
strategyPackagesExtractor.getScanningPackagesList();
// 上面两种目录的相加,返回List<String>类型
strategyPackagesExtractor.getAllPackagesList();
}
}解决本框架和Eureka注册中心原生可用区亲和性功能的冲突
如果采用Eureka注册中心,Ribbon本身就具有可用区亲和性功能,跟本框架类似。通过如下开关,来选择使用Eureka原生的功能(只有亲和性隔离,没有亲和性路由),还是本框架的功能
# 启动和关闭Eureka原生的可用区亲和性。当采用的注册中心是Eureka,并希望使用本框架的可用区亲和性功能,需要关闭Eureka原生的可用区亲和性功能,因为两者是冲突的
niws.loadbalancer.zoneAvoidanceRule.enabled=false
精简优化日志输出
① 精简Matrix Aop日志输出
② 优化Feign、RestTemplate和WebClient日志输出
缺陷修复
修复SkyWalking在WebFlux下TraceId不一致的缺陷
由于SkyWalking的缺陷,apm-toolkit-trace不支持异步获取TraceId,Nepxion Discovery通过在过滤器增强方式,修复SkyWalking在全链路Spring Cloud Gateway下TraceId和服务侧TraceId不一致的缺陷。感谢@zifenhan提供的相关解决方案和代码
使用者可以通过如下代码示例,在Spring Cloud Gateway的过滤器中获取TraceId
public class MyGatewayFilter implements GlobalFilter, Ordered {
private static final Logger LOG = LoggerFactory.getLogger(MyGatewayFilter.class);
@Autowired
private StrategyMonitorContext strategyMonitorContext;
@Override
public int getOrder() {
return 10000;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
LOG.info("获取TraceId={}, SpanId={}", strategyMonitorContext.getTraceId(), strategyMonitorContext.getSpanId());
return chain.filter(exchange);
}
}需要注意,虽然在SDK侧能保证全链路TraceId的一致性和唯一性,但SkyWalking仍旧不支持基于WebFlux的手工埋点,即SkyWalking界面上依旧看不到Nepxion蓝绿灰度埋点
修复订阅组件释放资源的缺陷
修复ZooKeeper和Redis取消订阅时,未释放资源的缺陷。感谢@pegasus的PR
相关发布
DiscoveryAgent发布
DiscoveryAgent发布1.0.3版
功能迭代
- 简化Agent启动命令行
对于如下示例的启动命令行
-javaagent:C:/opt/discovery-agent/discovery-agent-starter-${discovery.agent.version}.jar -Dthread.scan.packages=reactor.core.publisher;org.springframework.aop.interceptor;com.netflix.hystrix;com.nepxion.discovery.guide.service.feign
如下基准扫描目录将不需要配置,通过内置到agent.config中,实现智能扫描。使用者可以增加和删除agent.config的基准扫描目录
reactor.core.publisher;org.springframework.aop.interceptor;com.netflix.hystrix
如下扫描目录仍需要配置,属于业务服务自身的扫描目录
com.nepxion.discovery.guide.service.feign
启动命令行为
-javaagent:C:/opt/discovery-agent/discovery-agent-starter-${discovery.agent.version}.jar -Dthread.scan.packages=com.nepxion.discovery.guide.service.feign
如果业务服务自身的扫描目录下没有Runnable/Callable/Thread/ThreadPool等异步类存在,那么thread.scan.packages也不需要配置,最终启动命令行简化为
-javaagent:C:/opt/discovery-agent/discovery-agent-starter-${discovery.agent.version}.jar
感谢@zifenhan贡献的PR
DiscoveryDesktop发布
DiscoveryDesktop发布1.0.3版
相关下载
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryUI/releases获取最新版本
3.26.0(APR 26, 2021)
见 Nepxion Discovery 6.10.0 发布