6.5.0(JAN 1, 2021)
感谢贡献者
- 感谢@rottenmu贡献的开发基于Zookeeper配置中心的模块,以及对本框架的功能测试
- 感谢@zifeihan贡献的DiscoveryAgent双重异步ThreadLocal不丢失的PR
- 感谢@fengfeng Li贡献的非Http请求触发下灰度蓝绿发布的PR
- 感谢@henryxl开发的在线指南Wiki网站框架
- 感谢@carl.zhao撰写的框架架构和源码分析的系列文档
发布日志
发布策略
提醒:版本号右边,
↑
表示>=该版本号, ↓
表示<=该版本号
表示维护中 |
表示不维护,但可用,强烈建议升级 |
表示不维护,不可用,已废弃
- 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.7.RELEASE(
可降级
) - 默认集成Spring Boot Admin版本为2.3.1(
可降级
) - 默认集成Spring Cloud版本为Hoxton.SR9(
可降级
) - 默认集成SkyWalking版本为8.3.0
- 默认集成OpenTelemetry版本为0.13.1
- 默认集成Guava版本为30.1-jre
- 默认集成Caffeine版本为2.8.8
- 默认集成Dom4J版本为2.1.3,修复了安全漏洞CVE-2018-1000632,CVE-2020-10683
工程变更
- 独立抽象
discovery-plugin-framework-starter-parser
模块,供第三方二次开发 - 独立抽象
discovery-console-desktop
模块,合并到DiscoveryUI
工程下,提供更强大的全链路蓝绿灰度编排和流量侦测界面
⑦ 基于Header[n-d-version]驱动的蓝绿发布,不需要配置规则策略
- 增加
discovery-plugin-strategy-starter-opentelemetry
模块 - 增加
discovery-plugin-strategy-starter-sentinel-opentelemetry
模块
功能迭代
增强和优化服务侧蓝绿发布和灰度发布的实现逻辑
Spring Cloud Gateway网关、Zuul网关、业务服务,这三者任意一处都可以实现蓝绿发布和灰度发布,并且逻辑和用法完全一致,得到了辩证统一
Spring Cloud Gateway网关、Zuul网关、业务服务,这三者都可以通过开关来控制,以上游策略为优先,还是以本端策略为优先
- 服务侧引入Spring OncePerRequestFilter机制,实现前置过滤器
- 服务侧增加开关,控制如下逻辑,使用方式和网关侧相同。其意义是,当网关和服务同时在执行灰度蓝绿并有可能策略产生冲突的时候,使用者可以自行决定以哪个优先
# 当外界传值Header的时候,服务也设置并传递同名的Header,需要决定哪个Header传递到后边的服务去,该开关依赖前置过滤器的开关。如果下面开关为true,以服务设置为优先,否则以外界传值为优先。缺失则默认为true
spring.application.strategy.service.header.priority=true
- 服务侧提供跟网关一样的内置Header的方式,使用者可以通过规则策略中配置内置Header
增强和优化复合式蓝绿发布和灰度发布的支持
① 基于网关 -> 服务A -> 服务B
的链路
- 支持在网关上执行对服务A的蓝绿发布,在服务A执行对服务B的灰度发布
- 支持在网关上执行对服务A的灰度发布,在服务A执行对服务B的蓝绿发布
② 基于网关X -> 服务A -> 网关X -> 服务B
的链路
- 支持在网关X上执行对服务A的蓝绿发布,在网关X上执行对服务B的灰度发布
- 支持在网关X上执行对服务A的灰度发布,在网关X上执行对服务B的蓝绿发布
③ 基于网关X -> 网关Y
的链路
- 支持在网关X上实现对网关Y的蓝绿发布和灰度发布
④ 基于服务 -> 网关
的链路
- 支持在服务上实现对网关的蓝绿发布和灰度发布
增加复合式全链路侦测的支持
- 对于上述复合发布场景,支持全链路侦测
- 对于跨网关调用,例如,
网关X -> 服务A -> 服务B -> 网关Y -> 服务C -> 服务D
,需要根据网关分段侦测,即网关X侦测服务A和服务B,网关Y侦测服务C和服务D - 增加服务类型到全链路侦测的路由信息中
增加前端实现的框架支撑
- 提供更易用性的OpenAPI
增加规则类反解析模块
- 增加规则类逆解析到规则文本的功能,供第三方二次开发
重构策略校验模块
- 控制台后端增加策略校验接口
- 策略校验核心类移到common模块下
重构配置中心模块
- 抽象配置中心模型,为后续支持Etcd,Consul,Zookeeper等配置中心打下基础
- 统一和优化订阅日志打印的格式
优化环境和可用区隔离和路由模块
- 为下一个版本适配Spring Cloud 2020考虑,可用区Zone相关功能代码从
discovery-plugin-framework-starter
移动到discovery-plugin-strategy-starter
,并在DefaultDiscoveryEnabledAdapter
类里实现 - 相关控制开关做了更改
旧开关如下
# 流量路由到指定的环境下。不允许为保留值default,缺失则默认为common
spring.application.environment.route=common
# 启动和关闭可用区亲和性,即同一个可用区的服务才能调用,同一个可用区的条件是调用端实例和提供端实例的元数据Metadata的zone配置值必须相等。缺失则默认为false
spring.application.zone.affinity.enabled=true
# 启动和关闭可用区亲和性失败后的路由,即调用端实例没有找到同一个可用区的提供端实例的时候,当开关打开,可路由到其它可用区或者不归属任何可用区,当开关关闭,则直接调用失败。缺失则默认为true
spring.application.zone.route.enabled=true
新开关如下,多了strategy
# 流量路由到指定的环境下。不允许为保留值default,缺失则默认为common
spring.application.strategy.environment.route=common
# 启动和关闭可用区亲和性,即同一个可用区的服务才能调用,同一个可用区的条件是调用端实例和提供端实例的元数据Metadata的zone配置值必须相等。缺失则默认为false
spring.application.strategy.zone.affinity.enabled=true
# 启动和关闭可用区亲和性失败后的路由,即调用端实例没有找到同一个可用区的提供端实例的时候,当开关打开,可路由到其它可用区或者不归属任何可用区,当开关关闭,则直接调用失败。缺失则默认为true
spring.application.strategy.zone.route.enabled=true
优化组隔离模块
- 为下一个版本适配Spring Cloud 2020考虑,基于组消费端隔离相关功能代码从
ConsumerIsolationLoadBalanceStrategy
移动到DefaultDiscoveryEnabledAdapter
类里实现 - 基于组服务注册隔离准入相关功能,使用场景很狭窄,故去除。相关控制开关也去除
# 启动和关闭注册的服务隔离(基于Group黑/白名单的策略)。缺失则默认为false
spring.application.strategy.register.isolation.enabled=true
spring.application.strategy.register.isolation.group.blacklist=
spring.application.strategy.register.isolation.group.whitelist=
优化GatewayStrategyRouteFilter逻辑
- 减少一次ServerWebExchange mutate Request次数
优化SPEL逻辑
- 增加对HeaderMap为空的处理
规范化类结构和类名
- 重构相关类名,去掉冗余逻辑
- Opentracing改为OpenTracing,Opentelemetry改为OpenTelemetry,Opentracing改为OpenTracing
修改Banner旗标
- 优化OpenTracing Banner
- 优化OpenTelemetry Banner
完善本框架Pom的描述
- 更正pom.xml里的description
缺陷修复
修复双重异步的缺陷
- 修复业务异步和Hystrix线程池隔离异步,丢失策略路由Header的缺陷。感谢@zifeihan的PR
修复上下文传递的缺陷
- 修复非网关驱动模式下,从配置中心获取策略后,非Http请求触发(例如,通过MQ方式触发,定时Task触发),无法传递策略路由Header到下级全链路服务。感谢@fengfeng Li的PR
修复Redis订阅机制的缺陷
- 修复Bean跟spring-session-data-redis包的冲突,重命名redisMessageListenerContainer为configMessageListenerContainer
修复规则策略解析的缺陷
- 当配置值为空字符串,抛出空指针的缺陷
修复全局配置和局部配置复合下取值逻辑的缺陷
- 复合配置缺失配置文本值的赋值
修复Common的缺陷
- 修复StringUtil.split的缺陷
修复Hystrix线程池隔离插件的开关
spring.application.strategy.rest.request.decorator.enabled
默认值改为true,跟DiscoveryAgent保持一致
相关下载
DiscoveryAgent下载
访问https://github.com/Nepxion/DiscoveryAgent/releases
获取最新版本
DiscoveryDesktop下载
访问https://github.com/Nepxion/DiscoveryUI/releases
获取最新版本