Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

Stella981
• 阅读 680

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

感谢贡献者

  • 感谢@rottenmu贡献的开发基于Zookeeper配置中心的模块,以及对本框架的功能测试

  • 感谢@zifeihan贡献的DiscoveryAgent双重异步ThreadLocal不丢失的PR

  • 感谢@Fengfeng Li贡献的非Http请求触发下灰度蓝绿发布的PR

  • 感谢@HenryXL开发的在线指南Wiki网站框架

  • 感谢@carl.zhao撰写的框架架构和源码分析的系列文档

发布日志

发布策略

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 提醒:版本号右边, 表示>=该版本号, 表示<=该版本号

版本

状态

SC

SB

SCA

7.0.0

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

202x.x.x

2.4.1 ↑

N/A

6.5.0

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

H.SR5 ↑
H
G
F

2.3.x
2.2.x
2.1.x
2.0.x

2.2.x
2.2.x
2.1.x
2.0.x

5.6.0

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

G

2.1.x

2.1.x

4.15.0

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

F

2.0.x

2.0.x

3.21.0

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

E

1.5.x

1.5.x

2.0.x

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

D

1.x.x

1.5.x

1.0.x

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

C

1.x.x

1.5.x

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 表示维护中 | Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 表示不维护,但可用,强烈建议升级 | Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 表示不维护,不可用,已废弃

  • 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工程下,提供更强大的全链路蓝绿灰度编排和流量侦测界面

① 全链路蓝绿发布Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

② 全链路蓝绿发布下的流量侦测Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

③ 全链路灰度发布Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

④ 全链路灰度发布下的流量侦测Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

⑤ 全链路前段蓝绿发布+后段灰度发布混合模式下的流量侦测Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

⑥ 全链路前段灰度发布+后段蓝绿发布混合模式下的流量侦测Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

⑦ 基于Header[n-d-version]驱动的蓝绿发布,不需要配置规则策略Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

  • 增加 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获取最新版本

相关文档

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 Discovery【探索】微服务企业级解决方案

① Discovery【探索】微服务企业级解决方案文档

  • Discovery【探索】微服务企业级解决方案(PPT版) : http://nepxion.gitee.io/docs/link-doc/discovery-ppt.html

  • Discovery【探索】微服务企业级解决方案(PDF版) : http://nepxion.gitee.io/docs/link-doc/discovery-pdf.html

  • Discovery【探索】微服务企业级解决方案(HTML版) : http://nepxion.gitee.io/docs/link-doc/discovery-html.html

② Discovery【探索】微服务企业级解决方案源码。请访问Gitee镜像获得最佳体验

  • 源码Gitee同步镜像 : https://gitee.com/Nepxion/Discovery

  • 源码Github原镜像 : https://github.com/Nepxion/Discovery

③ Discovery【探索】微服务企业级解决方案指南示例源码。请访问Gitee镜像获得最佳体验

  • 指南Gitee同步镜像 : https://gitee.com/Nepxion/DiscoveryGuide

  • 指南Github原镜像 : https://github.com/Nepxion/DiscoveryGuide

④ Discovery【探索】微服务框架指南示例说明

  • 对于入门级玩家,参考 指南示例极简版 : https://github.com/Nepxion/DiscoveryGuide/tree/simple,分支为simple。涉及到指南篇里的蓝绿灰度发布的基本功能, Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 参考 新手快速入门 : https://gitee.com/nepxion/DiscoveryGuide/blob/simple/GUIDE.md

  • 对于熟练级玩家,参考 指南示例精进版 : https://github.com/Nepxion/DiscoveryGuide/tree/master,分支为master。除上述《极简版》功能外,涉及到指南篇里的绝大多数高级功能

  • 对于骨灰级玩家,参考 指南示例高级版 : https://github.com/Nepxion/DiscoveryGuide/tree/premium,分支为premium。除上述《精进版》功能外,涉及到指南篇里的ActiveMQ、MongoDB、RabbitMQ、Redis、RocketMQ、MySQL等高级调用链和蓝绿灰度调用链的整合

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版 Polaris【北极星】企业级云原生微服务框架

① Polaris【北极星】企业级云原生微服务框架文档

  • Polaris【北极星】企业级云原生微服务框架(PDF版) : http://nepxion.gitee.io/docs/link-doc/polaris-pdf.html

  • Polaris【北极星】企业级云原生微服务框架(HTML版) : http://nepxion.gitee.io/docs/link-doc/polaris-html.html

② Polaris【北极星】企业级云原生微服务框架源码。请访问Gitee镜像获得最佳体验

  • 源码Gitee同步镜像 : https://gitee.com/polaris-paas/polaris-sdk

  • 源码Github原镜像 : https://github.com/polaris-paas/polaris-sdk

③ Polaris【北极星】企业级云原生微服务框架指南示例源码。请访问Gitee镜像获得最佳体验

  • 指南Gitee同步镜像 : https://gitee.com/polaris-paas/polaris-guide

  • 指南Github原镜像 : https://github.com/polaris-paas/polaris-guide

请联系我

微信、钉钉、公众号和文档

Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版
Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版
Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版
Nepxion Discovery 6.5.0 三周年纪念版暨新年献礼版

本文分享自微信公众号 - Nepxion开源社区(iMicroService)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Nepxion Discovery 6.6.0 新春版
!(https://oscimg.oschina.net/oscnet/1b95fa263bf944d2a50dca91420c3a78.jpg)感谢贡献者感谢@CongweiXu贡献的基于Etcd和Consul配置中心的模块发布日志发布策略!(https://oscimg.
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这