降级
降级(Degrade/Fallback)是指当系统压力过大或后端服务不可用时,主动关闭部分功能或返回默认值,保证核心功能可用,防止雪崩。
1. 简单降级实现思路
- 检查后端服务/依赖是否可用,不可用时返回友好提示或默认数据。
- 可以用Redis、文件、内存等记录降级状态。
PHP降级示例
<?php
function isServiceAvailable() {
// 这里可以用Redis、健康检查接口等判断依赖服务状态
$redis = new Redis();
try {
$redis->connect('127.0.0.1', 6379, 0.5);
return true;
} catch (Exception $e) {
return false;
}
}
if (!isServiceAvailable()) {
// 降级处理
http_response_code(503);
exit('服务繁忙,请稍后再试');
}
// 正常业务逻辑
echo "服务正常";
?>
2. 自动降级+恢复
- 可以用Redis记录降级状态,定时检测依赖服务恢复后自动解除降级。
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$degradeKey = "service:degrade";
if ($redis->get($degradeKey)) {
http_response_code(503);
exit('服务降级中,请稍后再试');
}
// 检查依赖服务
try {
// 这里假设依赖服务是另一个Redis
$dep = new Redis();
$dep->connect('127.0.0.1', 6380, 0.5);
} catch (Exception $e) {
// 标记降级
$redis->setex($degradeKey, 60, 1); // 60秒后自动恢复
http_response_code(503);
exit('服务降级中,请稍后再试');
}
// 正常业务逻辑
echo "服务正常";
?>
三、实际应用场景
- 降级:依赖服务(如支付、搜索、推荐等)不可用时,主业务可用,非核心功能关闭或返回默认值。
四、总结
- 降级保证核心功能可用,防止雪崩和连锁故障。
- 推荐用Redis等中间件实现分布式限流和降级,简单高效。