微服务灰度中间件 Spring Cloud Gray

Apache-2.0
Java JavaScript HTML/CSS
跨平台
2019-09-06
Saleson

Spring Cloud Gray 是一套开源的微服务灰度路由解决方案,它由 spring-cloud-gray-client,spring-cloud-gray-client-netflix 和 spring-cloud-tray-server,spring-cloud-gray-webui 组成。

spring-cloud-gray-client 定义了一套灰度路由决策模型,灰度信息追踪模型,以及和 spring-cloud-gray-server的基本通信功能。
spring-cloud-gray-client-netflix 在 spring-cloud-gray-client 的基础上集成了微服务注册中心 eureka,扩展ribbon 的负载均衡规则,提供了对 zuul、feign、RestTemplate 的灰度路由能力,并且无缝支持 hystrix 线程池隔离。
spring-cloud-gray-server 负责灰度决策、灰度追踪等信息的管理以及持久化。
spring-cloud-gray-webui 提供操作界面。

 

SpringCloudGray 能做什么

1. 金丝雀测试

先发布1台实例,用于测试验证,指定测试的流量进入这台实例,其它流量依然进入其它正常的实例。优势在于发布成本小,快速测试,并且不影响正常用户体验影响,即使测试不通过,也只需回滚这一台实例,用户无感知。

 

 

 

 

 

 

 

 

 

2. 灰度放量

通过金丝雀测试后,可以逐渐放量到新的版本上。例如,根据userId或者ip放5%的流量到其中一台灰度实例上,观察一段时间没异常,可调整放入20%的流量,如果一台实例扛不住,可再发一台或多台实例。将发布产生的风险保持在可控范围内。

 

 

 

 

 

 

 

 

 

3. 切断实例流量

当线上出现问题,可将某台实例的流量切断,保留现场,设置指定的请求进入实例,在线调试并且不影响其它用户。

 

 

 

 

 

 

 

 

 

4. 数据透传

借助灰度追踪的能力,在网关处记录用户请求的最初的数据,可以将之透传到请求完整的调用链中。

 

5. 借助“破窗”能力,实例蓝绿发布

首次上灰度时,会存在两种环境,一种是已经依赖了灰度客户端的环境,另一种是正常运行的当前环境。假如微服务的负载均衡是由 ribbon 实现,那么当前环境会请求路由到实例状态为 UP 的实例上,而依赖了灰度客户端的环境,则可以通过"破窗"能力,跟灰度路由结合,可以将匹配灰度策略的请求路由到实例状态为 STARTING 的实例上,不匹配灰度策略的请求路由到实例状态为 UP 的实例上。 

 

设计思想

在微服务架构中,接口的调用通常是服务消费方按照某种负载均衡策略去选择服务实例;但这无法满足线上更特殊化的一些路由逻辑,比如根据一次请求携带的请求头中的信息路由到某一个服务实例上。Spring Cloud Gray 正是为此而创建。
在Spring Cloud Gray 中定义了几个角色灰度客户端(gray-client)、灰度管控端(gray-server)、注册中心。

注册中心 负责服务的注册和发现。

灰度客户端 灰度的客户端是指依赖了spring-cloud-gray-client的服务,一般是指服务消费方。

灰度管控端 负责灰度信息的管理、持久化等维护工作。

灰度客户端会从灰度管控端拉取一份灰度信息的清单,并在内存中维护这份清单信息,清单中包含服务,服务实例,灰度策略,灰度追踪字段等。当请求达到网关时,网关就会在灰度追踪中将需要透传的信息记录下来,并将传递给转发的服务实例,后面的接口调用也会按照同样的逻辑将追踪信息透传下去,从而保证所有一个请求在微服务调用链中的灰度路由。
如下图所示:

 

 

项目扩展

项目已经实现了灰度的内核,如果要与其它的注册中心或者负载均衡中间件集成,只需实现相应的 plugin 即可,spring cloud gray 已经提供了 eureka、ribbon、feign、zuul 以及 spring cloud gateway 和 spring cloud stream 的 plugin,添加相应的 plugin 依赖即可。

 

版本支持

目前有三个分支,对 spring cloud 的支持分别如下

项目版本 srpingcloud版本 springboot版本
A.1.1.0 Edgware.SR6 1.5.22.RELEASE
B.0.0.1 Finchley.SR4 2.0.9.RELEASE
C.0.0.1-SNAPHOST Greenwich.SR2 2.1.7.RELEASE
的码云指数为
超过 的项目
加载中

评论(11)

loveroot
loveroot
每次发版都有数据库变更怎么办,这种应用版本之间的差异怎么同时兼容数据库的结构差异?还是说这种有数据结构变更的根本不适用灰度
机器人-1
机器人-1
数据库变更应该只做非必填字段新增 这样就不会影响了吧
Saleson
Saleson 软件作者
正解。 目前支持服务层的灰度,数据层目前还未支持。 可以考虑数据变更和灰度策略结合起来,也可以实现灰度发布。比如指定某些用户访问新服务。大
loveroot
loveroot
新业务需求变更比较快,我们这数据库变更太多,比较头大。
g
githubgo
cloud这次更新是很有心意的呀
Saleson
Saleson 软件作者
那你们可以根据灰度策略去做数据库的动态选择。 不过目前需要你们自己去扩展, 而且, 即使做了数据库的动先选择,在改动数据库的情况下,发布时还是需要制定上线方案。
无心robbot
无心robbot
期待哦
我叫金正恩
我叫金正恩
是在tcp第几层,如果达不到istio那种级别就不要接着搞了,浪费时间.
Saleson
Saleson 软件作者
抽出了灰度的逻辑, 跟tcp的四层和是7层都可以集成的。 目前支持的是7层,4层需要扩展。
乀龙舌兰
乀龙舌兰
以前自己也捣腾了一个类似的系统,在入口网关统一判断走灰度还是正常的服务
冷冷gg
冷冷gg
支持。 期待完善文档~

Spring Cloud Gray,微服务灰度中间件

Spring Cloud Gray 是一套开源的微服务灰度路由解决方案,它由spring-cloud-gray-client,spring-cloud-gray-client-netflix 和 spring-cloud-tray-server,spring-cloud-gray-webui组成。 ...

09/06 13:06

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

Spring Cloud Gateway 扩展支持多版本控制及灰度发布

灰度发布 什么是灰度发布,概念请参考,我们来简单的通过下图来看下,通俗的讲: 为了保证服务升级过程的平滑过渡提高客户体验,会一部分用户 一部分用户递进更新,这样生产中会同时出现多个版...

07/03 07:18
1K
3
通知: Spring Cloud Alibaba 仓库迁移

最近,Spring Cloud 官方修改了各个第三方项目的发布策略,第三方 spring-cloud 项目需要自身维护。基于此策略,Spring-Cloud-Alibaba 项目迁移到了 alibaba github oss repository 仓库。 ...

07/08 14:59
70
0
Spring cloud 学习资料汇总

Spring cloud 学习资料汇总 spring-cloud github spring-cloud github spring-cloud-netflix github spring-cloud-alibaba https://github.com/spring-cloud-samples spring github spring-...

01/03 14:01
145
0
Spring Cloud 入门教程:聊聊Spring Cloud

一、 Spring Cloud 是什么? Spring Cloud 是将分布式系统中一系列基础框架/工具进行整合的框架。其中包含:服务注册与发现、服务网关、熔断器、配置中心、消息中心、服务链路追踪等等。 Sp...

2018/12/03 16:41
546
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部