测验:同步通信的代价
下游每次响应都慢了 5 秒时,上游最先耗尽的资源是什么?
- 磁盘 I/O 带宽
- CPU 利用率
- 连接池或线程池
- 应用程序堆内存
哪一组错误适合重试?
- 400、401、404
- 422、409、403
- 301、302、304
- 超时、503、429
如果 20 个实例每个每秒处理 100 个请求,且 maxAttempts 为 5,下游最坏情况下每秒可能收到多少请求?
- 每秒 125 个
- 每秒 10,000 个
- 每秒 500 个
- 每秒 2,000 个
在 A → B → C 的调用链中,把所有超时都设为 3 秒会怎样?
- 这是最安全的配置
- C 会最先放弃
- A 放弃后,B 和 C 仍继续工作,浪费资源
- 总延迟会固定为 3 秒
为什么重试要加入抖动,而不是使用固定间隔?
- 为了缩短重试间的平均等待时间,加快响应
- 为了减少重试次数,节省网络带宽
- 为了避免重试日志集中,从而减少日志总量
- 因为同步发生的重试会周期性地再次压垮正在恢复的服务器
为什么‘对方已处理请求,但只有响应丢失’尤其危险?
- 调用方无法区分‘失败’与‘成功但未知’,重试可能导致重复处理
- 调用方日志中不会留下请求已处理的记录
- 网络变慢,还会拖慢下一个请求
- 无论把超时设得多长都不可能收到响应