Spring Cloud Gray 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Spring Cloud Gray 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Spring Cloud Gray 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Spring Cloud Gray 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Spring Cloud Gray 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

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 指数为
超过 的项目

评论 (13)

加载中
09/26 14:03
回复
举报
厉害了 还是得多推广推广
2020/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的基本通信功能。 spring-cloud-gray-client-netflix在spring-cloud-gray-client的基础上集成了微服务注册中心eureka,扩展ribbo...

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

Spring Cloud Gray 配置参数

转载: https://www.appblog.cn/2020/09/16/Spring%20Cloud%20Gray%20%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0/ 2020博客地址汇总 2019年博客汇总 管控端 gray.server.discovery Property Name Default Value Remarks evictionEnabled true 定时同步注册中心实例状态的开关 evictionIntervalTimerInMs 60000 定时同步注册中心实例状态的时间间隔(默认60秒), 0表示不创建定时任务 1 2 3 4 5 gray: server: discovery: ...

0
0
发表了博客
2020/09/08 10:31

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

转载: https://github.com/SpringCloud/spring-cloud-gray 2020博客地址汇总 2019年博客汇总 Spring Cloud Gray 能做什么 金丝雀测试 先发布1台实例,用于测试验证,指定测试的流量进入这台实例,其它流量依然进入其它正常的实例。优势在于发布成本小,快速测试,并且不影响正常用户体验影响,即使测试不通过,也只需回滚这一台实例,用户无感知。 灰度放量 通过金丝雀测试后,可以逐渐放量到新的版本上。例如,根据userId或者i...

0
0
发表了博客
2018/01/18 19:58

spring cloud (一):大话 Spring Cloud

转自:http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html 研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud。在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统构建的要求,使我们以非常低的成本(技术或者硬件)搭建一套高效、分布式、容错的平台,但Spring Cloud也不是没有缺点,小型独立的项目不适合使用。 Spring Cloud是什么鬼? Spri...

0
1
2020/05/27 18:50

【Spring cloud】Spring Cloud 功能整理

Spring Cloud 功能 开源实现 说明 通用功能 服务注册与发现 Netflix Eureka Consul Discovery 兼容且提供替换组件 负载均衡 Netflix Ribbon 兼容 服务调用 Feign RestTemplate 兼容 配置管理 Config Server Consul Config 兼容且提供替换组件 服务网关 Spring Cloud Gateway Netflix Zuul Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式 , 目标是替代Netflix Zuul 链路跟踪 Spring Cloud Sleuth ...

0
2
发表于服务端专区
2017/02/08 19:29

[Spring Cloud] 7 Spring Cloud Sleuth

Spring Cloud Sleuth === 分布式链路跟踪 --- > Spring Cloud Sleuth是Spring Cloud的分布式链路跟踪解决方案。 ## 7.1 Terminology > Spring Cloud Sleuth借鉴了[Dapper](http://research.google.com/pubs/pub36356.html)的术语。 - **Span** :最基本的工作单元。例如:发送一个RPC就是一个新的span,同样一次RPC的应答也是。Span通过一个唯一的,长度64位的ID来作为标识,另一个64位ID用于跟踪。Span也可以带有其他数据,例如...

2
13
发表了博客
2019/09/03 17:27

Spring Cloud (Spring Cloud Stream)解析

执行脚本目录 /bin windows 在其单独的目录 快速上手 下载并且解压kafka压缩包 运行服务 以Windows为例,首先打开cmd: 1. 启动zookeeper: bin\windows\zookeeper-server-start.bat config\zookeeper.properties 2. 启动kafka: bin\windows\kafka-server-start.bat config\server.properties 创建主题topic bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1...

0
0
2019/09/15 07:30

Spring Cloud|03 Spring Cloud与Dubbo

几点说明 1、本系列Spring Cloud的博客参考了方志朋所著《深入理解Spring Cloud与微服务构建》; 2、大家如果想更加深入的理解Spring Cloud 建议多实战、多看书; Dubbo简介 介绍 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。 Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力: 面向接口的远程方法调用:封装了长...

0
0
2020/05/07 11:10

Spring Cloud-网关 Spring-Cloud-Gateway

简介 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。 概念 Route(路...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
13 评论
117 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部