Java进阶之路66问 | 谈谈对熔断,限流,降级的理解

熔断(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 "正常服务响应。";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值