【方案-技术】可配置化接口降级

目录

一、背景

二、技术架构

三、名词解释

三、Apollo配置使用说明

四、响应头规范


一、背景

二、技术架构

三、名词解释

名词

解释

Apollo配置项目中的apollo配置,这里主要是指接口降级配置信息
自定义埋点Sentinel的埋点,采用自定义上报的方式,通过Apollo配置的url字段,就是改埋点的一部分。可参考下方的Apollo配置。
熔断即,阻断请求,直接走降级逻辑;这里的熔断是指Sentinel 的熔断规则,sentinel会根据我们上报的自定义埋点,进行统计异常次数,当达到熔断条件时,将会同步到我们应用,我们应用就会直接走降级逻辑。可参考上图的①号链路。
降级逻辑当业务发生异常时,执行的兜底逻辑。我们这里会对Apollo配置的埋点接口,进行缓存,当触发降级时会读取缓存数据返回给前端。
触发降级逻辑的链路有两个(如:①、②链路),①号链路属于Sentinel触发的熔断机制导致;②号链路属于Sentinel熔断机制未触发、或未配置,而执行业务时发生错误了,导致执行了降级逻辑。

三、Apollo配置使用说明

[

    {

        // 接口匹配参数配置

        "url""/cms/materials/[0-9]+/check-detail",   // 请求地址

        "methods":["GET"],              // 请求方式,默认为GET

        "matchPattern""REGEXP",       // 请求地址匹配规则,枚举值:[REGEXP:正则匹配,TERM:精准匹配]

  

        // 降级参数控制策略配置

        "degradeParamsStrategy":"AUTO",  // 降级参数策略,默认为AUTO。枚举值:MANUAL:手动、AUTO:自动、SINGLE_PAGE:单页

          

        // 降级参数控制-配置 (任何降级参数控制策略,都会执行的,相当于扩展能力)

        "degradeInParams": [],           // 自定义设置降级入参, degradeInFieldsByReq=false时才生效。

        "degradeInPathParams": [],       // 自定义设置降级请求地址占位符入参, degradeInFieldsByReq=false时才生效。

        "degradeInHeaders": [            // 自定义设置降级请求头入参

            "x-channel-id"

        ],

        "conditionParams": [             // 条件参数控制

            {

                "field""show_rule",    // 入参字段名,条件1:入参字段名

                "type""QUERY",         // 入参类型,枚举值:[QUERY,PATH,HEADER] 。 条件1:show_rule字段,为Query类型入参。

                "value": [               // 入参范围值,条件1:show_rule 允许入参(结合:operation 来看)

                    "0",

                    null

                ],

                "operation""IN",       // 运算条件,枚举值:[IN,NOT_IN,EQ,NOT_EQ],条件1:只要show_rulec参数值,在value的范围内,那么就需要添加x-user-id请求头,作为降级的维度。

                "degradeInParams": [],   // 符合条件后,而外增加需要进行降级的参数

                "degradeInPathParams": [], // 符合条件后,而外增加需要进行降级的「地址占位符」参数

                "degradeInHeaders": [    // 符合条件后,而外增加需要进行降级的「请求头」参数

                    "user-info"

                ]

            }

        ],

  

        // 降级默认响应配置

        "degradeOutDefaultValue""{}",  // 降级默认返回值,没有命中缓存的话。

        "degradeOutDefaultHeader": {},   // 降级默认响应头,没有命中缓存的话。

  

        // 缓存采集、缓存时长配置

        "cacheDuration""3d",  // 缓存时长,单位:[s:秒, m:分钟, h:小时 d:天 ]

        // 缓存更新间隔比例: 0-100 默认为50,主要是为了减少没什么差异的缓存频繁更新。比如:0 表示每次都会更新;50 表示缓存时长过去一半后,会允许更新;100 表示过期后才会更新;

        "cacheUpdateIntervalRate":50,

        "samplingRate"100      // 采集率,值范围:[0-100]。 100 表示全量采集,0 表示不采集。

    }

]

四、响应头规范

两种状态码:
读取到缓存返回200,读取不到降级缓存,返回203状态,以及空对象。

/**
 * 降级相关响应头
 */
// 响应来源:ResponseSourceEnum.class
public static final String RESPONSE_SOURCE = "X-Gd-Response-Source";
// 是否熔断(断路) 1:是 ,0:不是
public static final String RESPONSE_SHORT_CIRCUITED = "X-Gd-Response-Short-Circuited";
// 是否降级响应 1:是 ,0:不是
public static final String RESPONSE_FROM_FALLBACK = "X-Gd-Response-From-Fallback";

 

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值