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,扩展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 |
!!! 欢迎Start收藏!!!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
database-dictionary 3.0 发布,数据字典自动生成器
database-dictionary 鉴于企业开发过程中数据字典难维护,我们团队参考阿里云数据库管理中的数据字典展示,进行了一个克隆。当前 3.0 版本支持 MySQL SQLSERVER ORACLE DB2 PG 数据库的数据字典生成,关联您的数据库后,可以自动生成 PDF和markdown 文件格式的数据字典文档,也可以直接运行项目支持在线 同步数据库数据字典。 码云下载地址:https://gitee.com/cdtrh_group/database-dictionary 使用说明 在项目的单元测试用例中,有相关数据库的DEMO。 PDF格式数据字典效果展示如下:直接运行 DataBaseApplication 开启springboot web 启动成功后,访问:http://127.0.0.1:9998/就可以进入首页了 在线markdown展示效果如下:
- 下一篇
APISIX 发布 0.7 版本,增加 gPRC 协议转换、serverless 等多项功能
这个版本带来很多新的特性,比如 IP 黑白名单、gPRC 协议转换、支持 IPv6、对接 IdP(身份认证提供商)服务、serverless、radix tree 路由等。 Core ? gRPC 协议转换: 支持 gRPC 协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API. #395 ? radix tree 路由: 将 radix tree 作为默认的路由器实现,支持把 uri、host、cookie、请求头、请求参数、Nginx 内置变量等作为路由的条件,并支持等于、大于、小于等常见操作符,更加强大和灵活. #414 动态上游支持更多的参数,可以指定上游的 uri 和 host,以及是否开启 websocket. #451 支持从 ctx.var 中直接获取 cookie 中的值. #449 路由支持 IPv6. #331 Plugins ? serverless: 支持 serverless,用户可以把任意 Lua 函数动态的在网关节点上运行。用户也可以把这个功能当做是轻量级的插件来使用。#86 ? IdP 支持: 支持外部的身份认证服务...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装