回退只用于可选路径
优雅回退在可选依赖失败时保持关键路径存活。推荐、相关条目和非必要个性化可以降级为缓存或空数据;价格、库存、授权和支付状态不可以——那里的陈旧或编造值比错误更糟。添加回退前先给依赖排序。
try {
return await withTimeout(loadOptional(), 300);
} catch {
metrics.increment('optional.degraded');
return { items: cachedItems, degraded: true };
}
让降级可见
静默返回陈旧数据的回退会掩盖故障。返回响应头或字段,发出指标,并在降级率越过阈值时告警。界面应显示轻微提示,而不是假装内容完整。变成永久的回退只是名字好听的的技术债。
验证失败路径
测试快速错误、慢超时和格式错误的响应。确认核心数据仍能渲染、回退有界,降级信号到达指标和响应。也要测试恢复路径:依赖恢复后,回退应停止,正常响应无需重启即可恢复。
验证边界
预期结果:可选依赖失败时主流程返回 200 且带 degraded 标记,核心数据正确;依赖恢复后标记消失。通过注入超时和错误确认,并检查降级指标增加后回落。