一杯咖啡的时间,聊聊技术与成长
超时治理:全链路的时间预算
没有超时的调用是最危险的等待,但超时不是随手填一个 3000ms——上游超时要大于下游耗时加余量,层层倒挂的超时等于没设,重试还得从预算里扣。超时是全链路的时间账本,要像做账一样对齐。
资源隔离:舱壁模式
把所有依赖塞进同一个线程池,等于让全船人共用一堵舱壁——一处漏水全船沉。舱壁模式把资源切成隔舱:每个下游一个线程池或信号量配额,谁的依赖病了,淹的只有它自己的舱。隔离的本质,是把故障的爆炸半径限制在你愿意承受的范围内。
服务降级:有损服务的艺术
熔断挡住了伤害的蔓延,但跳闸之后用户总得看到点什么——返回缓存、给默认值、砍功能、上兜底。降级的核心不是「做得更好」,而是明确放弃什么:谁先下桌、怎么下、何时回来。有损服务是门艺术,预案要在晴天写好。
Sentinel 实战:注解一贴,熔断上线
手写熔断器搞懂了原理,生产要的是注解一贴就能用、规则不发版就能改、监控不用自己搭——Sentinel 用 @SentinelResource 一个注解接住拒绝与异常,用一条 DegradeRule 把上篇的参数表翻译成配置,再用控制台把跳闸变成看得见的事。轻量派 Resilience4j 是另一个答案。
熔断判定:错误率、慢调用与统计窗口
三态骨架搭好了,判定标准还没定——什么时候该跳闸?错误率与慢调用比例是两根体温计,最小请求数防止小样本误诊,滑动统计窗口让指标看「最近」而非「远古」。判得准,断路器是保险丝;判不准,它自己就是故障源。
熔断器:三态模型的断路哲学
下游病了还持续叩门,线程一样被拖死——限流管进来的流量,熔断管出去的调用。Closed、Open、Half-Open 三个状态构成一台自动断路器:病了快断、断了快探、好了快合,家里的空气开关早就想明白了这件事。
限流算法对比与选型:一张表定案
固定窗口、滑动窗口、漏桶、令牌桶,单机与分布式两组旋钮——限流篇的算法备齐了,本篇一张总表定选型,再用 503 咖啡馆的完整方案演示「混合使用才是常态」,顺带清算四个常见误区。
多级限流:三层防线的额度分配
网关、应用、数据库各一道闸,但阈值不是随手拍——外层要略宽于内层,拒绝的对象各有分工:网关挡恶意,应用管配额,数据库做保险丝。额度分配错一层,整条防线就互相打架。
网关层限流:Nginx 与 Spring Cloud Gateway
闸门装在入口最划算:流量还没进业务就被拦下,省下的是整条链路的资源。Nginx 的漏桶匀速放行,Spring Cloud Gateway 的 Redis 令牌桶按维度发牌——但网关看不见业务上下文,粗与细要分层配合。