十一、分布式事务最终一致性方案对比
核心实现模式
方案 技术原理 适用场景 核心缺陷
TCC:(TryConfirmCancel) 业务阶段补偿机制 跨服务强一致性 开发成本高,幂等性难保证
本地消息表: 事务消息+本地日志 异步最终一致性 消息堆积处理复杂
Saga模式: 长事务拆分为本地事务链 跨系统长流程事务 补偿逻辑复杂度高
java
// Seata AT模式示例
@GlobalTransactional
public void createOrder(Order order) {
// 1. 扣减库存(本地事务)
inventoryService.deductStock(order.getProductId());
// 2. 创建订单(本地事务)
orderDao.insert(order);
// 3. 写入分支事务记录到TC
}
关键技术点
1. Seata AT模式:通过代理数据源实现全局锁与回滚日志
2. 消息事务可靠性:RocketMQ的事务消息两阶段提交
3. 幂等性设计:唯一流水号+状态机控制
十二、缓存穿透/雪崩/击穿解决方案对比
核心防御策略
问题类型 产生原因 解决方案 技术选型建议
缓存穿透: 恶意查询不存在数据 布隆过滤器+空值缓存 RedisBloom+Guava Cache
缓存雪崩 :大量缓存同时失效 随机过期时间+多级缓存 Caffeine+Redis集群
缓存击穿: 热点key集中失效 互斥锁+逻辑过期 Redisson分布式锁
java
// 布隆过滤器防穿透实现
public Object getData(String key) {
if (!bloomFilter.mightContain(key)) {
return null;
}
Object value = redisTemplate.opsForValue().get(key);
if (value == null) {
value = db.query(key);
if (value != null) {
redisTemplate.opsForValue().set(key, value, 300, TimeUnit.SECONDS);
} else {
// 写入空值标记
redisTemplate.opsForValue().setex(key, 60, "NULL", 60, TimeUnit.SECONDS);
}
}
return value;
}
高级技巧
1. 二级缓存架构:Caffeine本地缓存+Redis分布式缓存
2. 逻辑过期:缓存数据附加时间戳实现延迟双删
3. 热点Key探测:Redis的keyspace通知+监控统计
十三、Netty线程模型与性能优化
Reactor线程架构
mermaid
graph TD
AMain Reactor -->Accept BSub Reactor1
A -->Accept CSub Reactor2
B --> DIO Thread Pool
C --> EIO Thread Pool
D --> F业务线程池
E --> F
核心参数调优
1. ChannelOption.SO_BACKLOG:服务端SYN队列长度(建议2048)
2. TCP_NODELAY:禁用Nagle算法减少小包延迟
3. ALLOCATOR:使用PooledByteBufAllocator降低内存碎片
java
// Netty服务端启动示例
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 2048)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new HttpServerCodec());
}
});
ChannelFuture f = b.bind(8080).sync();
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
性能优化点
1. 零拷贝:FileRegion+CompositeByteBuf组合使用
2. 内存池化:重复利用ByteBuf减少GC压力
3. 线程绑定:EventLoop处理固定Channel避免锁竞争
十四、Spring Cloud Alibaba Sentinel熔断降级
核心工作原理
mermaid
graph LR
A资源调用 --> B{QPS>阈值?}
B -->是 C滑动窗口统计
C --> D{异常比例>5%?}
D -->是 E触发熔断
E --> F快速失败返回
F --> G半开状态探测
关键配置参数
参数 默认值 说明
grade :1 0慢调用比例,1异常比例
count :5 熔断阈值
timeWindow :5s 熔断持续时间
minRequestAmount :5 触发熔断最小请求数
java
// 自定义流控规则
FlowRule rule = new FlowRule();
rule.setResource("getUserInfo");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100);
FlowRuleManager.loadRules(Collections.singletonList(rule));
高级特性
1. 系统自适应保护:基于系统负载动态调整阈值
2. 关联限流:根据调用关系进行链路限流
3. 预热模式:渐进式提高允许QPS
十五、分布式消息事务可靠性保障
事务消息实现流程
mermaid
sequenceDiagram
事务发起方->>MQ: 发送半消息
MQ-->>事务发起方: 返回消息ID
事务发起方->>业务系统: 执行本地事务
事务发起方->>MQ: 提交/回滚消息
alt 事务提交
MQ->>消费者: 投递可读消息
else 事务回滚
MQ-->>消费者: 删除消息
end
核心可靠性保障
1. 生产者端:本地事务表+异步消息回查
2. 服务端:事务消息状态机管理
3. 消费者端:消息幂等消费处理
java
// RocketMQ事务消息示例
TransactionMQProducer producer = new TransactionMQProducer("transaction_group");
producer.setTransactionListener(new TransactionListener() {
@Override
public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
// 执行本地事务
boolean success = localTransaction();
return success ? LocalTransactionState.COMMIT : LocalTransactionState.ROLLBACK;
}
@Override
public LocalTransactionState checkLocalTransaction(MessageExt msg) {
// 事务回查
return checkTransactionStatus(msg);
}
});