核心问题

系统扛不住时,应该怎么拒绝?

工程困境

所有请求都接,队列无限增长,最终所有用户都超时。看似“尽力服务”,实际是一起失败。

思想模型

背压告诉上游:我处理不过来了,慢一点。
负载丢弃告诉系统:与其全挂,不如保核心。

好做法

  • 限流
  • 队列上限
  • 超时
  • 拒绝低优先级任务
  • 降级非核心功能
  • retry-after

例如课程播放比推荐更核心。高峰时可以关闭推荐,不能拖死播放。

Atlas Action

列出系统功能优先级:必须保、可降级、可延迟、可丢弃。

小结

成熟系统不是永不拒绝,而是知道什么时候、以什么方式拒绝。