核心问题
系统扛不住时,应该怎么拒绝?
工程困境
所有请求都接,队列无限增长,最终所有用户都超时。看似“尽力服务”,实际是一起失败。
思想模型
背压告诉上游:我处理不过来了,慢一点。
负载丢弃告诉系统:与其全挂,不如保核心。
好做法
- 限流
- 队列上限
- 超时
- 拒绝低优先级任务
- 降级非核心功能
- retry-after
例如课程播放比推荐更核心。高峰时可以关闭推荐,不能拖死播放。
Atlas Action
列出系统功能优先级:必须保、可降级、可延迟、可丢弃。
小结
成熟系统不是永不拒绝,而是知道什么时候、以什么方式拒绝。