Spring Cloud Gray 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Spring Cloud Gray 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票

软件简介

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
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (12)

加载中
厉害了 还是得多推广推广
08/13 17:39
回复
举报
每次发版都有数据库变更怎么办,这种应用版本之间的差异怎么同时兼容数据库的结构差异?还是说这种有数据结构变更的根本不适用灰度
2019/09/17 08:58
回复
举报
数据库变更应该只做非必填字段新增 这样就不会影响了吧
2019/09/17 09:50
回复
举报
Saleson软件作者
正解。 目前支持服务层的灰度,数据层目前还未支持。 可以考虑数据变更和灰度策略结合起来,也可以实现灰度发布。比如指定某些用户访问新服务。大
2019/09/17 20:48
回复
举报
新业务需求变更比较快,我们这数据库变更太多,比较头大。
2019/09/18 08:29
回复
举报
cloud这次更新是很有心意的呀
2019/09/18 18:00
回复
举报
Saleson软件作者
那你们可以根据灰度策略去做数据库的动态选择。 不过目前需要你们自己去扩展, 而且, 即使做了数据库的动先选择,在改动数据库的情况下,发布时还是需要制定上线方案。
2019/09/21 13:07
回复
举报
期待哦
2019/09/16 20:44
回复
举报
是在tcp第几层,如果达不到istio那种级别就不要接着搞了,浪费时间.
2019/09/16 10:05
回复
举报
Saleson软件作者
抽出了灰度的逻辑, 跟tcp的四层和是7层都可以集成的。 目前支持的是7层,4层需要扩展。
2019/09/17 20:45
回复
举报
以前自己也捣腾了一个类似的系统,在入口网关统一判断走灰度还是正常的服务
2019/09/16 10:00
回复
举报
支持。 期待完善文档~
2019/09/16 08:38
回复
举报
更多评论
发表于软件架构专区
2019/09/06 13:06

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

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的基本通信功能。 spri...

9
68
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
09/08 10:31

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

转载: https://github.com/SpringCloud/spring-cloud-gray 2020博客地址汇总 2019年博客汇总 Spring Cloud Gray 能做什么 金丝雀测试 先发布1台实例,用于测试验证,指定测试的流量进入这台实例,其它流量依然进入其它正常的实例。优势在于发布成本小,快速测试,并且不影响正常用户体验影响,即使测试不通过,也只需回滚...

0
0
05/27 18:50

【Spring cloud】Spring Cloud 功能整理

Spring Cloud 功能 开源实现 说明 通用功能 服务注册与发现 Netflix Eureka Consul Discovery 兼容且提供替换组件 负载均衡 Netflix Ribbon 兼容 服务调用 Feign RestTemplate 兼容 配置管理 Config Server Cons......

0
1
2019/09/13 07:30

Spring Cloud|02 Spring Cloud简介

几点说明 1、本系列Spring Cloud的博客参考了方志朋所著《深入理解Spring Cloud与微服务构建》; 2、大家如果想更加深入的理解Spring Cloud 建议多实战、多看书; 简介 Spring Cloud是基于Spring Boot的,而Sprin...

0
0
2019/09/15 07:30

Spring Cloud|02 Spring Cloud简介

几点说明 1、本系列Spring Cloud的博客参考了方志朋所著《深入理解Spring Cloud与微服务构建》; 2、大家如果想更加深入的理解Spring Cloud 建议多实战、多看书; 简介 Spring Cloud是基于Spring Boot的,而Sprin...

0
0
2019/09/15 07:30

Spring Cloud|03 Spring Cloud与Dubbo

几点说明 1、本系列Spring Cloud的博客参考了方志朋所著《深入理解Spring Cloud与微服务构建》; 2、大家如果想更加深入的理解Spring Cloud 建议多实战、多看书; Dubbo简介 介绍 Dubbo是阿里巴巴公司开源的一个高...

0
0
发表于服务端专区
05/07 11:10

Spring Cloud-网关 Spring-Cloud-Gateway

简介 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。...

0
1
发表了博客
2019/09/24 10:04

Spring Cloud 系列之 Spring Cloud Stream

Spring Cloud Stream 是消息中间件组件,它集成了 kafka 和 rabbitmq 。本篇文章以 Rabbit MQ 为消息中间件系统为基础,介绍 Spring Cloud Stream 的使用。如果你没有用过消息中间件,可以到 RabbitMQ 的官网看一下,或者参考这个 http://rabbitmq.mr-ping.com/。理解了消息中间件的设计,才能更好的使用它。 消息中间的...

0
0
发表了博客
2019/08/21 10:08

【Spring Cloud】Spring Cloud使用总结

##项目概要 项目环境信息 IDEA ultimate 2018.3.2 springboot 2.1.7.RELEASE springCloud Greenwich.SR2 ###Eureka 介绍 基于netflix eureka做了二次封装 两个组件组成: Eureka Server 注册中心 Eureka Client 服务注册 搭建Eureka Server 1、配置Eureka 的application.yml eureka: client: serviceUrl: ...

0
1
发表了博客
03/25 10:44

Spring Cloud

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。 分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。 他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
12 评论
85 收藏
分享
返回顶部
顶部