标准答案

  1. CPU 密集工作控制执行并发接近 CPU 容量,优先缩短算法和避免无效计算。
  2. I/O 密集工作允许更多等待,但要限制连接、缓冲、任务数和单请求响应大小。
  3. 外部依赖受限时按对端配额设置信号量、超时、缓存和批量,并为非核心调用设置降级。
  4. 用排队时间、服务时间、成功率、资源利用率和下游错误调整上限,而不是只看本机 CPU。

题目解析

CPU 密集任务受核心和计算时间约束,I/O 密集任务受连接、缓冲和内存约束,外部依赖受对端配额和响应时间约束。三类工作即使都叫“并发”,可接受的上限也不同。

入口、执行器和下游连接池需要形成一条预算链。入口可以接收的请求数不能超过执行器和最窄下游在截止时间内能完成的工作量,否则排队只会转移位置。

上限应通过排队时间、服务时间、成功率、资源利用率和下游错误反复校准。拒绝、降级和处理中状态要对用户可见,不能把超载隐藏成无限等待。

常见误区

  • 误区:不同依赖共用一个并发上限。改正:按每个下游的配额、耗时和失败代价分别设置信号量或队列。
  • 误区:只按实例数线性放大下游请求。改正:重新计算全局连接和配额,扩容可能直接突破数据库或供应商限制。
  • 误区:拒绝和排队没有用户可见结果。改正:返回可分类的限流、处理中或降级状态,并提供明确的重试边界。

作者信息