java灰度发布怎么实现,灰度发布(一)

互联网 2024-04-10 阅读

大家好,今天来为大家分享java灰度发布怎么实现的一些知识点,和灰度发布(一)的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

java灰度发布怎么实现,灰度发布(一)

灰度发布(一)

一、术语

1、灰度周期,由测试/用户决定

2、金丝雀的故事

3、产品说的AB测试

4、客户端APP的灰度,版本更新交由后台控制

5、Java Agent

6、互联网APP常见的玩法

最后灰度发布是什么?

----灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。

二、灰度能做什么

1、白天发布,不用等到晚上11点,夜深人静的时候。

2、应用程序的新旧版本需要共存一段时间,用于做AB测试。

3、把新版本程序当做金丝雀,不影响真实用户的请求。

三、灰度不能做什么

1、应用程序在发布的时候,重启的时候足够安全吗,会影响线上用户吗?

2、线上灰度验证的时候,发现出问题然而开发不能及时修复,程序需要回滚,假如有已执行的数模,也需要回滚,怎么办?

3、它能够帮助我们远程断点或btrace新版本的应用程序吗?

四、灰度的实现

1、必备的条件有:

2、染色的流程

3、灰度规则

支持按流量比例和精准分配两种。精准可以是userId、IP、设备号等,只要http header能取出的key,都将支持配置到灰度规则。

4、传递灰度标识

在网关层进行打上标签,常用做法就是http header增加一个key。(kong plugin安装灰度插件)

按链路访问顺序,由上往下进行传递,这里为了减少业务方的接入成本,采用java agent技术,做到对业务的完全透明。(java应用程序加载灰度agent的jar包)

5、灰度发布的流程

五、发布的方式有哪些

除了灰度发布,还有重要的蓝绿发布。

(灰度是允许新旧版本同时存在,蓝绿则规定在同一个环境下,要么是新版本,要么是回滚到旧版本)。

一般地,建议在预发环境下,实现蓝绿发布。在预发环境未验证通过前,预发环境是新版本,而生产环境是旧版本。

六、灰度发布带来了哪些问题

1、预期的流量是要打到灰度节点的,最后却打到正常节点了。如何核实?

现在一般的做法是通过traceId,查询kibana的日志。

2、灰度标识在全链路的整个链路传递的过程中,容易被服务或组件丢失。如何排查到底是哪个组件导致的?

3、日志与监控

日志需要采集,做法和jvm日志一样采用ELK。日志中需要包含程序的版本号、IP等关键信息。

浅谈灰度发布

所谓灰度发布就是将软件新功能版本先发布到灰度区进行可控范围的验证,如果验证结果良好,再进行正式发布,否则回滚灰度区取消发布的一种可靠、可持续的软件发布方法。

灰度发布的核心思想是在不影响软件系统当前版本可用的情况下,对新版本功能进行验证后发布。

所谓灰度区,就是一个在生产环境创建出来的和生产环境版本相同的用于部署待验证新版本的环境。

对于前端客户端程序,推送并安装了待验证新版本客户端程序的客户群构成灰度区。

创建灰度区——>流量控制——>灰度区验证——>正式发布/回滚

灰度区用来对新版本的部署及功能进行验证,灰度发布关键是需要将新版本部署到生产环境,经过验证后进行正式发布。那么在正式发布前,如何进行新版本的部署和验证?这其实是灰度区的创建的问题,那么如何创建灰度区呢?

典型的做法就是先将生产环境部分正在运行的集群节点退役,然后部署新版本,从而创建灰度区。在开始验证前禁止生产流量路由到灰度区。

可能的集群退役节点的选择方法有:

1)如果只有一个集群,那么可以选择集群里的小部分应用服务节点(如金丝雀发布选择金丝雀节点一样)。

2)如果有多个集群(如跨IDC多活系统),可以选择其中一个集群退役。

在同一个生产环境中,部署一套完全冗余的集群节点,用于部署新版本构建灰度区(类似蓝绿发布)。取决于冗余集群供给方法,从物理机、虚拟机到容器,其成本逐渐降低、灵活性逐渐提高。

灰度发布主要的验证方式是导入真实流量,那么如何将真实流量可控地引流到创建好的灰度区呢?

取决于采用的路由/负载均衡器(Router/Load Balancer)的类型不同,可以采用的引流方法不同:

使用灰度专用域名,将灰度域名配置指向灰度区。这种域名引流的方法要求使用灰度域名访问,增加了域名资源,对外部用户不一定适用。

可能的添加灰度信息到HTTP请求的方式有:

1)使用不同的URL Path,如hello.com.cn/ canary/.....,这种方法的缺点是占用了URL path资源。

2)在HTTP Headers或者URL Querystring中增加灰度字段存储灰度信息。

3)基于原始HTTP请求的信息结合一定的路由策略进行灰度引流。如基于cookie里的用户信息,可实现如基于用户白名单、用户区域,或其他用户属性方式的引流策略。

根据上述方法添加的灰度信息,同时在负责七层路由的负载均衡器上基于灰度信息配置响应的引流策略实现引流。

一般的灰度需要进行:环境适应性验证、功能验证、性能验证及用户验证。

部署的程序能否正常启动,运行状态是否稳定;对基础架构资源(CPU,内存,IO,网络等)的使用是否正常;虚拟运行环境(如JVM等)运行是否正常等。

通过基础架构资源指标监控工具如promethues等对响应的指标进行监控

通过集成APM工具如CAT,Zipkin,Pinpoint,Skywalking等进行应用程序状态进行监控验证。

通过冒烟测试验证程序基本功能;对新增功能和缺陷修复进行UAT;通过导入真实流量,对程序功能进行验证。

对应用/服务公开接口的RT,TPS进行监控验证。

导入真实流量,进行用户行为数据收集,对用户行为进行分析;对真实用户流量访问产生的业务指标进行监控等;舆论监控等。

当验证结束,需要正式发布,正式发布的方式取决于灰度区是如何创建的。

如果是金丝雀发布的部署方式,首先,对灰度区恢复正式生产环境流量策略,然后滚动无损更新老版本节点。

如果是蓝绿冗余方式构建灰度区,修改路由配置直接将全量生产流量路由到灰度区,将灰度区转为处理生产流量的生产环境集群。

当灰度验证后决定取消发布,灰度区需要回滚。

金丝雀式部署方式需要对灰度区节点回滚,并恢复正式流量路由策略。

如果是蓝绿冗余方式构建灰度区,仅需要关闭灰度区生产流量引流。

Spring微服务灰度发布(热部署)的实现(二)

接着上篇说,我们微服务中用到的nepxion discovery主要采用了三种灰度发布方式,一种是web图形化界面发布,二是zuul过滤器灰度发布,三是业务参数策略灰度发布。下面将重点介绍三种方式的实现。

一、web图形化界面灰度发布

因为我们项目用到了eureka注册中心,所以选择web图形化界面灰度发布比较合适。

1)首先需要建立一个discovery控制台工程console,端口为2222,控制台工程负责web图形化界面请求的处理,运行console工程。

2)下载discovery ui,地址:,运行discovery UI,端口为8090

3)浏览器中输入localhost:8090,即可打开控制台,如下

注意:全链路灰度发布需要在“配置中心”下才可用。灰度发布配置中心,负责存储全链路灰度发布规则,并将规则推送到各个微服务中。而配置中心可用nacos,redis等,Discovery中提供了相应配置中心的插件包。

二、zuul网关过滤器灰度发布

通过网关过滤器传递Http Header的方式传递全链路灰度路由规则。下面代码只适用于Zuul和Spring Cloud Gateway网关,Service微服务不需要加该方式。

三、业务参数在策略类中自定义灰度路由规则

通过策略方式自定义灰度路由规则。下面代码既适用于Zuul和Spring Cloud Gateway网关,也适用于Service微服务,同时全链路中网关和服务都必须加该方式

上面说了具体灰度规则发布方式,那究竟怎么定义灰度规则呢??

规则是基于XML或者Json为配置方式,存储于本地文件或者远程配置中心,可以通过远程配置中心修改的方式达到规则动态化。其核心代码参考discovery-plugin-framework以及它的扩展、discovery-plugin-config-center以及它的扩展和discovery-plugin-admin-center等,规则示例

XML示例(Json示例见discovery-springcloud-example-service下的rule.json)

黑/白名单的IP地址注册的过滤规则

微服务启动的时候,禁止指定的IP地址注册到服务注册发现中心。支持黑/白名单,白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。规则如何使用,见示例说明

最大注册数的限制的过滤规则

微服务启动的时候,一旦微服务集群下注册的实例数目已经达到上限(可配置),将禁止后续的微服务进行注册。规则如何使用,见示例说明

黑/白名单的IP地址发现的过滤规则

微服务启动的时候,禁止指定的IP地址被服务发现。它使用的方式和“黑/白名单的IP地址注册的过滤规则”一致

版本访问的灰度发布规则

版本权重的灰度发布规则

全局版本权重的灰度发布规则

区域权重的灰度发布规则

全局区域权重的灰度发布规则

网关端全链路路由策略的灰度发布规则

注意路由策略的入口有三个(以{"discovery-springcloud-example-a":"1.0","discovery-springcloud-example-b":"1.0","discovery-springcloud-example-c":"1.0;1.2"})为例:

其作用的优先级为外界传入>网关Filter指定>配置中心或者本地rule.xml配置

您可以根据自己需求,自由定义灰度发布规则,灵活实现微服务的灰度发布。

源码位置:

本站所有文章资源内容,如无特殊说明或标注,均为网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

java工作流框架哪个好,java框架有哪些常用框架

java高并发框架有哪些,Java分布式,高并发的开发,只要用到的工具都有哪些