熔断(Circuit Breaker)
熔断机制类似于电路中的保险丝,用于在服务或系统出现异常或超负荷时暂时关闭,防止问题进一步扩大,待问题解决后再逐步恢复。这可以有效保护系统免受过载的影响。
想象你在使用电器时,突然电路过载,保险丝跳闸,自动切断电流,以防止电器损坏或火灾,这就是熔断。
public class CircuitBreaker {// 熔断器开关状态,真实开发中应该放到配置文件或配置中心中private boolean isOpen = false; public void executeRequest() {if (isOpen) {// 熔断器开启状态,执行快速失败逻辑System.out.println("服务暂时不可用,请稍后重试。");} else {try {// 执行服务请求// 如果服务正常,熔断器关闭} catch (Exception e) {// 发生异常,打开熔断器isOpen = true;System.out.println("服务异常,熔断器已打开。");}}}public void reset() {isOpen = false; // 重置熔断器状态}
}
通常情况下,熔断器的开关状态可以写在配置文件中,这样可以在运行时动态调整熔断器的行为,而无需修改代码并重新部署应用程序。
限流(Rate Limiting)
限流是为了保护系统资源不被某一类型的请求过度占用,控制请求的频率或数量,避免系统负载过高而导致性能下降或宕机。
假设某个游乐园的过山车每小时只能承载100人,国庆节人流过多,为了保证安全和舒适度,园方实施限流措施,每小时只允许100人排队乘坐。
public class RateLimiter {private static final int MAX_REQUESTS_PER_HOUR = 100;private int requestCount = 0;public void processRequest() {if (requestCount < MAX_REQUESTS_PER_HOUR) {// 处理请求requestCount++;System.out.println("处理请求...");} else {// 达到限流阈值,拒绝处理请求System.out.println("已达到每小时请求上限,暂时无法处理新请求。");}}
}
真实的限流器肯定比这里复杂,有不同的限流算法,这里只是为了简单说明限流器的工作原理,没有使用复杂的限流算法。
降级(Fallback)
降级是指在系统负载过高或部分服务不可用时,为了保证核心功能的可用性,临时关闭非关键功能或提供备用方案。
在车辆堵塞时,导航软件可能关闭一些高耗资源的实时交通信息功能,仅显示基本的导航路线,以确保用户仍能获得基本的导航服务。
public class FallbackService {public String getResponse() {try {// 尝试获取服务正常的响应return fetchResponse();} catch (Exception e) {// 服务异常时,返回备用响应return "备用响应:暂时无法获取正常服务。";}}private String fetchResponse() {// 实际获取服务响应的逻辑return "正常服务响应。";}
}