1 Star 0 Fork 9

lzb974 / gray

forked from liuyunlong / gray 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

gray

介绍

SpringCloud生态,灰度发布,以及服务下线,流量无损

软件架构

本组件利用了SpringCloud Rabbion自定义负载均衡的策略,重写了负载均衡算法,完成了多版本路由的策略

安装教程

  1. 微服务项目需引入gray-plugin-framework-starter-service项目
<dependency>
   <groupId>com.rainbow.gray</groupId>
   <artifactId>gray-plugin-framework-starter-service</artifactId>
   <version>1.0.0-SNAPSHOT</version>
</dependency>
  1. 网关项目需引入gray-plugin-framework-starter-gateway项目
<dependency>
   <groupId>com.rainbow.gray</groupId>
   <artifactId>gray-plugin-framework-starter-gateway</artifactId>
   <version>1.0.0-SNAPSHOT</version>
</dependency>
  1. 本组件推荐使用远程配置的方法,配置rule规则,现在只支持nacos配置中心

  2. 组件支持全局订阅,或局部订阅。

    全局订阅即:DataId = group1,Group=group1;即DataId也为group名称,这样每个微服务以及网关都只订阅的是同一个rule规则

    局部订阅即:DataId = 服务名称,Group=group1;即DataID是服务名称,即只有这个服务订阅了rule规则;其他服务不适用

    (推荐全局订阅,因为灰度发布一般针对所有的服务生效;而且规则里面可以细化到每个服务的规则)

    相关rule规则配置,可以参考源文件的规则案例rule.xml

使用说明

  1. 配置nacos,在bootstrap.properties中配置nacos注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=sit
  1. 在bootstrap.properties中组件需要的配置
nacos.server-addr=${spring.cloud.nacos.discovery.server-addr}
nacos.username=${spring.cloud.nacos.discovery.username}
nacos.password=${spring.cloud.nacos.discovery.password}
nacos.plugin.namespace=${spring.cloud.nacos.discovery.namespace}
  1. 在application.properties 配置元数据,非常重要,这个就是每个服务不同的版本version,地域region,环境env,区zone相关的配置
spring.cloud.nacos.discovery.metadata.group=example-service-group
spring.cloud.nacos.discovery.metadata.version=1.0
spring.cloud.nacos.discovery.metadata.region=dev
spring.cloud.nacos.discovery.metadata.env=env1
spring.cloud.nacos.discovery.metadata.zone=zone1
  1. 亲和性

    启动和关闭可用区亲和性,即同一个可用区的服务才能调用,同一个可用区的条件是调用端实例和提供端实例的元数据Metadata的zone配置值必须相等。缺失则默认为false

    spring.application.zone.affinity.enabled=true

    启动和关闭可用区亲和性失败后的路由,即调用端实例没有找到同一个可用区的提供端实例的时候,当开关打开,可路由到其它可用区或者不归属任何可用区,当开关关闭,则直接调用失败。缺失则默认为true

    spring.application.zone.route.enabled=true

外部参数Header

​ 通过前端(Postman)方式传入灰度路由策略,来代替配置中心方式,传递全链路路由策略。

注意:当配置中心和外部参数都配置后,会先从配置中心的规则会先过滤执行,然后外部参数再过滤的原则

  • 版本匹配策略,Header格式如下任选一个
1. n-d-version=1.0
2. n-d-version={"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}
  • 版本权重策略,Header格式如下任选一个
1. n-d-version-weight=1.0=90;1.1=10
2. n-d-version-weight={"discovery-guide-service-a":"1.0=90;1.1=10", "discovery-guide-service-b":"1.0=90;1.1=10"}
  • 区域匹配策略,Header格式如下任选一个
1. n-d-region=qa
2. n-d-region={"discovery-guide-service-a":"qa", "discovery-guide-service-b":"qa"}
  • 区域权重策略,Header格式如下任选一个
1. n-d-region-weight=dev=99;qa=1
2. n-d-region-weight={"discovery-guide-service-a":"dev=99;qa=1", "discovery-guide-service-b":"dev=99;qa=1"}
  • IP地址和端口匹配策略,Header格式如下任选一个
1. n-d-address={"discovery-guide-service-a":"127.0.0.1:3001", "discovery-guide-service-b":"127.0.0.1:4002"}
2. n-d-address={"discovery-guide-service-a":"127.0.0.1", "discovery-guide-service-b":"127.0.0.1"}
3. n-d-address={"discovery-guide-service-a":"3001", "discovery-guide-service-b":"4002"}
  • 环境隔离下动态环境匹配策略
1. n-d-env=env1
  • 服务下线实时性的流量绝对无损,全局唯一ID屏蔽策略
1. n-d-id-blacklist=e92edde5-0153-4ec8-9cbb-b4d3f415aa33;af043384-c8a5-451e-88f4-457914e8e3bc
  • 服务下线实时性的流量绝对无损,IP地址和端口屏蔽策略
1. n-d-address-blacklist=192.168.43.101:1201;192.168.*.102;1301

当外界传值Header的时候,网关也设置并传递同名的Header,需要决定哪个Header传递到后边的服务去。需要通过如下开关做控制

# 当外界传值Header的时候,网关也设置并传递同名的Header,需要决定哪个Header传递到后边的服务去。如果下面开关为true,以网关设置为优先,否则以外界传值为优先。缺失则默认为true
spring.application.strategy.gateway.header.priority=false
# 当以网关设置为优先的时候,网关未配置Header,而外界配置了Header,仍旧忽略外界的Header。缺失则默认为true
spring.application.strategy.gateway.original.header.ignored=true

# 当外界传值Header的时候,网关也设置并传递同名的Header,需要决定哪个Header传递到后边的服务去。如果下面开关为true,以网关设置为优先,否则以外界传值为优先。缺失则默认为true
spring.application.strategy.zuul.header.priority=false
# 当以网关设置为优先的时候,网关未配置Header,而外界配置了Header,仍旧忽略外界的Header。缺失则默认为true
spring.application.strategy.zuul.original.header.ignored=true

参与贡献

测试参数

n-d-version:{"discovery-springcloud-example-a":"feature-JID-1", "discovery-springcloud-example-b":"feature-JID-2"}

  1. 非常感谢nepxion discovery开源项目,借鉴了设计思路,以及一些代码设计,简化了实现

空文件

简介

SpringCloud生态,灰度发布,以及服务下线,流量无损 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/lzb974/gray.git
git@gitee.com:lzb974/gray.git
lzb974
gray
gray
master

搜索帮助