怎样设计弹性与容错?
查看完整题解
参考回答
直接回答
用有限超时、受控重试、熔断、隔离、限流和合理降级共同保护系统,先定义每次调用的时间与资源预算。Boot可集成这些机制,却不会替业务决定何时可重试、降级返回什么。降级应保留真实失败含义,不能用一个空成功把故障藏起来。
讲清原理
超时限制等待,重试处理可能暂时失败,熔断减少持续故障调用,隔离控制故障占用范围。多层同时重试会倍增流量;总次数、退避、抖动和总时限必须一起算。
有副作用的操作只有在具备幂等或明确去重时才适合自动重试。超时并不证明远端没有执行,客户端取消也不保证外部副作用被撤回。
例子与易错点
演示用固定失败序列验证有限尝试,不做真实支付重试。生产还要测慢依赖、部分成功、恢复与指标告警,确认故障不会挤满所有连接和线程。
以下为 Java 21 类成员示例,放入同一外部类中使用,依赖 Boot4.1.2 / Framework7.0.10。只验证有限尝试与异常分类,省略退避计时;真实网络调用还需总时限、取消与幂等,不是生产重试器。
static String limitedRetry(java.util.concurrent.Callable<String> operation,int maxAttempts)
throws Exception {
if (maxAttempts<1) throw new IllegalArgumentException("attempts");
for (int attempt=1; ; attempt++) {
try { return operation.call(); }
catch (java.io.IOException failure) {
if (attempt>=maxAttempts) throw failure;
}
}
}
相关题:第 39 题、第 40 题、第 49 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。