面试题答案
一键面试熔断触发条件
- 错误率:
- 统计一定时间窗口(如10秒)内服务调用的失败次数和总调用次数。
- 当失败率超过设定阈值(如50%)时,触发熔断。例如,在10秒内共调用100次,其中失败50次以上,则满足此触发条件。
- 超时率:
- 同样在一定时间窗口(如10秒)内,统计调用超时的次数和总调用次数。
- 若超时率达到设定阈值(如30%),触发熔断。即10秒内调用100次,超时30次以上。
- 连续失败次数:
- 记录连续调用失败的次数,当连续失败次数达到设定值(如10次),触发熔断。例如,连续10次调用服务都失败。
熔断后的处理逻辑
- 快速失败:
- 一旦熔断开启,后续所有对该服务的调用不再实际发起远程调用,而是立即返回一个预设的错误响应。这个错误响应可以包含提示信息,告知调用方服务当前不可用。
- 例如,返回HTTP 503 Service Unavailable状态码,并在响应体中说明“服务熔断中,暂时不可用”。
- 监控与记录:
- 开启熔断期间,持续监控服务调用的请求数量等相关指标。记录每次触发熔断的相关信息,如触发时间、触发原因(错误率、超时率或连续失败次数)等,方便后续分析。
- 可以将这些监控和记录信息发送到日志系统或专门的监控平台,便于运维和开发人员查看。
服务调用恢复
- 试探恢复:
- 设置一个熔断超时时间(如1分钟),当熔断开启达到这个超时时间后,进入试探恢复阶段。
- 在试探恢复阶段,允许少量的请求(如1 - 5个)尝试调用实际服务。这可以通过限流算法来实现,控制请求数量。
- 恢复判定:
- 如果试探调用的请求中成功次数达到一定比例(如80%),则认为服务恢复正常,关闭熔断,恢复正常的服务调用。
- 若试探调用的成功率未达到设定比例,则继续保持熔断状态,等待下一次试探恢复时机(如再等待1分钟后进行下一次试探)。