运维开关(Ops Toggles)是特性管理(Feature Management)的核心应用场景之一。这类开关通常从运维的角度管控系统功能,比如当我们上线的新功能出现问题或某个依赖服务出现故障时,运维或研发人员可以禁用功能或服务降级,来减少故障对系统整体的影响。本文将介绍如何使用 FeatureProbe 实现手动降级开关和自动降级开关。
一、什么是降级开关 ?
服务降级作为服务容错的常用方式之一,其思想是牺牲系统中非核心功能或服务来保证系统整体可用性。常用的服务降级方式有熔断降级,限流降级以及开关降级 ,这些不同的降级方式分别应对不同的故障场景。
关于熔断降级和限流降级方式不展开介绍,这里的开关降级指的是在代码中预先埋设一些开关,并实时获取开关的状态来控制服务的行为。比如,开关开启的时候访问下游服务获取实时数据,当依赖的下游服务出现故障时,立即关闭开关来访问旧的缓存数据或默认值;再比如,在电商大促期间为了保障核心服务用到的计算资源,通过开关来关闭非核心服务。
下面是利用开关执行降级逻辑的代码示例:
// 获取降级开关返回值
degradeRpcService := fpClient.BoolValue("degrade_rpc_service", false)
if degradeRpcService {
// 执行降级逻辑, 如从缓存中获取旧数据} else {
// 调用正常逻辑,如从远程服务获取实时数据
}
其中 degrade_rpc_service 就是一个典型的降级开关。
二、如何实现手动降级开关?
实现降