十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

算法学习服务异常时如何分层降级

算法学习服务异常时如何分层降级 算法学习服务异常时如何分层降级上游响应变慢时最危险的动作通常是无差别重试。旧请求还占着连接、并发名额和预算新请求又不断进入队列很快会把问题从一个接口扩散到整条调用链。先限制在途请求再讨论如何提高成功率。取消要沿着调用链传下去入口为一次调用设置截止时间并把同一个context传给 HTTP 请求、队列任务和子进程。调用方退出后后续工作应尽快停止仅给 HTTP 客户端设置超时并不能自动结束已经启动的后台任务。ctx, cancel : context.WithTimeout(parent, timeout) defer cancel() req req.WithContext(ctx) resp, err : client.Do(req)并发限制应覆盖真正消耗下游资源的那一段而不是只限制 Web 层 goroutine。满载时可以排队也可以返回稍后重试两种策略都要有队列长度和等待时间上限。把错误分开处理网络短暂中断、连接被重置等错误可能适合限次重试。参数错误、认证失败、响应格式不合法通常重试无益。429 是否重试取决于服务端的Retry-After、本次请求的截止时间和本地预算。对非幂等操作重试前还要确认服务端是否提供幂等键否则可能产生重复写入。熔断器用于连续、可归因的失败在短时间内拒绝一部分新请求冷却后用少量探测请求判断是否恢复。它不能替代容量规划也不应把所有超时都视为同一种故障。验收时至少模拟上游变慢、断网、429、调用取消和恢复过程记录负载、队列长度与结果。超时和重试次数应根据这些结果调整而不是照搬一组通用数字。
返回列表