二十六、熔断降级框架:Hystrix与Sentinel对比
核心机制对比
特性 Hystrix Sentinel
隔离策略 线程池隔离 信号量/线程池混合隔离
熔断策略 错误比例熔断 异常比例/异常数/慢调用熔断
实时规则配置 支持 支持动态规则(Nacos集成)
流量控制 不支持 滑动窗口计数器
java
// Sentinel流控规则配置示例
FlowRule rule = new FlowRule();
rule.setResource("order_create");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // QPS阈值
FlowRuleManager.loadRules(Collections.singletonList(rule));
核心架构差异
mermaid
graph LR
Hystrix-->线程池隔离A依赖服务
Sentinel-->信号量控制B依赖服务
Hystrix-->熔断回退CFallback逻辑
Sentinel-->实时监控D控制台
源码深度解析
-
Hystrix:`HystrixCommand`通过`execute()`方法触发熔断逻辑,依赖`CircuitBreaker`状态机
-
Sentinel:`Entry`入口对象调用`SphU.entry()`触发资源统计,`DegradeRuleManager`管理熔断规则
二十七、Service Mesh架构:Istio数据面通信原理
核心通信流程
-
服务发现:Pilot通过xDS协议下发服务路由规则
-
流量劫持:iptables重定向流量到Envoy代理
-
遥测数据:Envoy上报指标到Prometheus
性能优化点
-
Sidecar资源控制:通过`resources.limits`限制CPU/Memory
-
mTLS双向认证:使用SPIFFE标识服务身份
-
WASM扩展:用WebAssembly实现自定义过滤器
二十八、热点数据治理:缓存击穿与雪崩防护
高并发场景解决方案
问题类型 解决方案 技术实现
缓存击穿 互斥锁+永不过期 Redis SETNX + 异步更新
缓存雪崩 随机过期时间+热点Key拆分 Caffeine二级缓存
数据一致性 双删策略+延迟双删 MySQL binlog监听
java
// 互斥锁实现缓存击穿防护
public Object getData(String key) {
Object value = redis.get(key);
if (value == null) {
if (redis.setnx("lock:" + key, "1")) {
try {
value = db.query(key);
redis.setex(key, 3600, value);
} finally {
redis.del("lock:" + key);
}
} else {
Thread.sleep(50);
return getData(key);
}
}
return value;
}
进阶挑战
-
多级缓存同步:Redis+LocalCache+MQ实现最终一致性
-
冷热数据分离:Redis ZSET按访问频率分层存储
-
自动降级策略:Sentinel动态切换数据源