2Release It!(第2版)

稳定性模式

系统稳定策略

超时断路器舱壁模式降级限流

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第2章:稳定性模式(Stability Patterns)

一、导读

1.1 本章学习目标

第2章讲解构建稳定系统的核心模式:超时、断路器、舱壁、降级和限流。

1.2 为什么第二章如此重要

稳定性模式是生产级软件的基石。没有这些模式,系统在面对故障时会像多米诺骨牌一样崩溃。

1.3 核心问题引导

为什么必须设置超时?

断路器如何防止级联故障?

舱壁模式如何隔离故障?

降级策略如何保持核心功能?

限流如何保护系统?


二、核心概念详解

2.1 超时

所有外部调用都必须设置超时:

java
// 连接超时 + 读取超时
HttpClient client = HttpClient.newBuilder()
    .connectTimeout(Duration.ofSeconds(5))
    .build();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(url))
    .timeout(Duration.ofSeconds(10))
    .build();

2.2 断路器

断路器防止级联故障:

状态转换:
CLOSED → OPEN(失败次数超过阈值)
OPEN → HALF_OPEN(超时后)
HALF_OPEN → CLOSED(成功)或 OPEN(失败)

2.3 舱壁模式

舱壁模式隔离故障,防止一个组件的故障影响整个系统:

线程池隔离:
- 用户服务:独立线程池(20线程)
- 订单服务:独立线程池(30线程)
- 支付服务:独立线程池(10线程)

一个服务耗尽线程不会影响其他服务

2.4 降级

当依赖不可用时,提供降级响应:

java
public String getUser(String id) {
    try {
        return userService.getUser(id);
    } catch (Exception e) {
        // 降级:返回缓存数据
        return cache.get("user:" + id);
    }
}

2.5 限流

限流保护系统免受过载:

java
// 令牌桶限流
RateLimiter limiter = RateLimiter.create(100); // 100 QPS

public Response handle(Request request) {
    if (!limiter.tryAcquire()) {
        return Response.status(429).build(); // Too Many Requests
    }
    return process(request);
}

三、实战案例

3.1 综合稳定性方案

java
public class ResilientService {
    private final CircuitBreaker circuitBreaker;
    private final RateLimiter rateLimiter;
    private final Cache fallbackCache;

    public String call(String key) {
        // 限流
        if (!rateLimiter.tryAcquire()) {
            throw new RateLimitException();
        }

        // 断路器
        return circuitBreaker.execute(() -> {
            try {
                return remoteCall(key);
            } catch (Exception e) {
                // 降级
                return fallbackCache.get(key);
            }
        });
    }
}

四、本章小结

稳定性模式是生产级软件的核心:超时防止无限等待,断路器防止级联故障,舱壁隔离故障,降级保持核心功能,限流保护系统。


五、思考与练习

如何确定合适的超时时间?

断路器的阈值如何设置?

舱壁模式有哪些实现方式?

降级策略如何设计?

限流算法有哪些?各有什么优缺点?


2/7稳定性模
0%