测验:错误处理与重处理
网关、服务 A、服务 B 各自最多重试 4 次时,用户点击一次最多会在最终系统产生多少个请求?
- 4 次——只有最后一层的重试会到达最终系统
- 64 次——4 × 4 × 4
- 12 次——4 + 4 + 4
- 16 次——4 × 4,不计算网关
指数退避不加入抖动(jitter)会产生什么问题?
- 等待时间持续翻倍,最后一次重试过晚
- 间隔计算没有上限,重试事实上无限持续
- 多个客户端在同一时刻重试,再次击倒正在恢复的服务器
- 等待中的请求对象不断积累,增加客户端内存
收到 HTTP 429(Too Many Requests)时,正确做法是什么?
- 立即重试
- 不再重试,立即送入 DLQ
- 遵守 Retry-After 请求头,在指定时间后重试
- 缩小请求后重新发送
DLQ 只保存原始消息,却遗漏原因、尝试次数和首次失败时间,会造成什么问题?
- 同一消息多次堆积,浪费存储空间
- 无法判断保存期限,清理作业会删除消息
- 重处理对象持续增加,拖慢原队列
- 日后没有依据判断是否应重处理,实际上等同于悄悄丢弃
以下哪项对幂等性(idempotency)的描述最准确?
- 同一请求始终返回相同响应
- 同一请求处理多次,副作用仍只发生一次
- 请求保证只投递一次
- 按顺序处理请求
用 SELECT 로 조회 후 없으면 INSERT 的方式实现重复防护,有什么问题?
- 查询和插入需要两次往返,吞吐量显著下降
- 两个语句无法放入同一事务,会留下部分失败
- 查询条件无法使用索引,数据量增加后急剧变慢
- 查询和插入之间存在空隙,两个请求同时到达时都会通过
确定幂等历史表的保留期限时,应以什么为标准?
- 磁盘容量
- 与审计日志保留期相同
- 长于现实中可能收到重发的最长时间
- 表行数上限