
1) 【一句话结论】:在分布式系统中验证容错性与恢复能力,需通过模拟服务故障(如服务宕机、网络分区)设计测试用例,重点验证熔断、降级、限流机制的有效性,确保系统在异常下仍能保持核心业务可用。
2) 【原理/概念讲解】:容错性指系统在部分组件故障时仍能继续运行的能力;恢复能力指故障后系统自动或手动恢复的能力。熔断(Circuit Breaker):当服务调用失败次数超过阈值时,触发熔断,直接返回失败或默认值,避免级联故障(类比电路保险丝,故障时断开电路,保护系统)。降级(Fallback):熔断后,调用降级逻辑(如缓存数据、默认值),保证核心功能可用。限流(Rate Limiting):控制请求速率(如每秒最大请求数),防止过载(类比交通信号灯,控制车流量,避免拥堵)。这些机制共同作用,提升系统鲁棒性。
3) 【对比与适用场景】:
| 机制 | 定义 | 触发条件 | 核心作用 | 使用场景 |
|---|---|---|---|---|
| 熔断 | 服务调用失败次数超过阈值时,触发,直接失败 | 调用失败次数 > 阈值 | 防止级联故障 | 服务宕机、超时 |
| 降级 | 熔断后调用降级逻辑(如缓存、默认值) | 熔断触发 | 保证核心功能 | 服务不可用时,提供默认服务 |
| 限流 | 控制请求速率(如每秒最大请求数) | 请求速率超过阈值 | 防止过载 | 高并发场景,保护后端服务 |
注意点:熔断需合理设置阈值(如失败次数、超时时间),避免误触发;降级逻辑需保证业务可用性;限流需结合业务场景(如漏桶/令牌桶算法)。
4) 【示例】:假设信步科技有订单服务(OrderService)调用库存服务(InventoryService),测试容错性:
@CircuitBreaker注解,设置熔断器,当InventoryService宕机时,OrderService触发熔断,调用降级方法(如返回默认库存量)。@Service
public class OrderService {
@Autowired
private InventoryService inventoryService;
@CircuitBreaker(name = "inventory", fallbackMethod = "fallbackInventory")
public void placeOrder(Order order) {
// 正常调用库存服务
inventoryService.checkInventory(order.getProductId());
}
public void fallbackInventory(Order order, Throwable t) {
// 降级逻辑:调用缓存库存或返回默认值
System.out.println("库存服务故障,调用降级:订单" + order.getId() + "库存不足,使用默认库存");
}
}
@HystrixCommand的threadPoolProperties设置线程池大小,模拟网络延迟或分区,测试熔断和限流。例如,设置线程池最大线程数为1,模拟网络分区时,请求被阻塞,触发熔断。5) 【面试口播版答案】:在分布式系统中验证容错性和恢复能力,核心是通过模拟服务故障(如服务宕机、网络分区)设计测试用例,重点验证熔断、降级、限流机制。比如,假设信步科技有订单服务调用库存服务,当库存服务宕机时,通过Spring Cloud的熔断器(@CircuitBreaker),设置失败次数阈值(如3次),触发熔断,调用降级方法返回默认库存,保证订单服务不因库存服务故障而崩溃。同时,用限流控制订单请求速率(如每秒10个请求),防止库存服务过载。测试时,先模拟库存服务宕机,观察订单服务是否触发熔断并降级,再恢复库存服务,验证熔断是否自动恢复(恢复能力)。这样能确保系统在异常下仍能保持核心业务可用。
6) 【追问清单】:
7) 【常见坑/雷区】: