项目简介
本项目是基于Go语言开发的模块,用于实现业务接口的灰度发布策略。灰度发布作为软件发布策略,可在正式环境前对新功能或更新进行测试,保障新功能在真实环境中的稳定运行。项目通过HTTP接口完成灰度策略的配置与查询,依据灰度策略决定请求的路由方向。
项目的主要特性和功能
- 灰度策略配置格式设计:采用JSON格式配置灰度策略,可方便定义不同业务接口的灰度规则。每个应用有多种业务接口,各业务接口可能有多个放量规则,每个放量策略由多个维度匹配规则构成。
- 仓库接口定义:定义了Repository接口,用于获取和更新灰度策略,可根据实际存储方式(如数据库、文件等)实现该接口。
- 灰度策略管理:初始化AppGrey实例并传入自定义的配置获取接口实现,可实现灰度策略的动态刷新。
- 灰度流量判定:使用AppGrey实例的Match方法,可判断请求是否为灰度请求,并根据匹配规则返回对应的主机和端口,便于将请求路由至正确环境。
- 示例DEMO:提供简单的业务处理系统使用示例,模拟网关和两个服务端场景,展示模块对灰度流量的转发功能。
安装使用步骤
前提条件
假设用户已经下载了本项目的源码文件,且系统已配置好Go语言开发环境。
具体步骤
- 实现appgrey.Repository接口:因不同应用的配置管理实现方式不同,使用模块前需先实现
appgrey.Repository
接口,其定义如下:go type Repository interface { // 查询 灰度放量策略, 返回其配置的 json 字符串 或 error GetAppGreyStrategy() (string, error) }
- 初始化AppGrey实例:
appgrey.AppGrey
为全局变量,默认未初始化,未初始化时调用其Match
方法将返回false
。初始化完成后,appgrey.AppGrey
会自动启动一个ticker
按指定时间自动重新获取配置,实现动态刷新。在应用启动时调用一次初始化方法,示例如下:go func main() { //... // 初始化 只需在应用启动时调用一次, 传入 自定义的配置获取接口 实现,指定多久自动重新获取一次配置 if err := AppGrey.Initialize(&AppGreyRepositoryExample{}, time.Second * 5); err!= nil { fmt.Printf("AppGrey initialize failed: %v\n", err) // 初始化异常应用自行处理 } //... }
- 使用AppGrey判定灰度流量:调用
Match
方法判断请求是否为灰度请求,示例如下:go // 开始进行 某类业务接口的 灰度维度数据 匹配,判断是否为一个灰度流量 isGreyFlow, host, port := AppGrey.Match(OnlineJsonDirect, map[ApiGreyDimension]string{ // 在处理某类业务接口请求时,解析相关的维度数据, 对于 OnlineJsonDirect 的两个灰度规则, 命中第一个 Version: "v1", StoreId: "SID000002", InsCode: "INS0001xx", })
- 运行样例DEMO
- 在Windows系统开启三个命令行分别执行如下命令:
shell app-grey-demo -gateway app-grey-demo -server -port 8081 app-grey-demo -server -port 8082
- 打开POSTMAN,导入
app-grey-demo.postman_collection.json
文件,可调整参数和更新灰度放量策略配置进行测试:GET http://localhost:8080/grey/strategy/json
:查看应用当前的灰度放量策略配置。PUT http://localhost:8080/grey/strategy/json
:更新应用当前的灰度放量策略配置。GET http://localhost:8080/api/v1/business/online-json-direct
:测试online-json-direct
的业务接口灰度放量策略。GET http://localhost:8080/api/v1/business/online-json-indirect
:测试online-json-indirect
的业务接口灰度放量策略。
- 在Windows系统开启三个命令行分别执行如下命令:
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】