Spring Cloud Alibaba 三件套,加上分布式锁与事务。
一、组件
Spring Cloud Alibaba
Spring Cloud Alibaba 在 Spring Cloud 之上对接 Nacos、Sentinel、RocketMQ 和 Seata,让 Java 微服务用同一套注解完成注册发现、限流降级和分布式事务。它降低了国内云上中间件的接入成本。
版本矩阵必须和 Spring Boot 对齐,混用社区 Netflix 组件时尤其容易踩兼容坑。配置中心的命名空间和环境隔离要先于代码仓库拆分,避免测试配置冲进生产。
治理上把限流规则当代码一样评审。只靠默认值会上线后才发现热点接口被打穿。可观测性要同时看 JVM、Sentinel 实时指标和调用链。
Sentinel
什么是雪崩问题?
雪崩问题是微服务之间的调用链,其中一个服务结点故障,导致的整条调用链的崩溃问题。
雪崩问题的处理
-
超时机制
-
舱壁模式(线程池隔离、信号量隔离):限制每个业务能够请求的线程数。
-
熔断降级
-
流量控制:限制QPS
Sentinel和Hystrix对比
流量控制-流控模式
-
直接模式
-
关联模式
-
链路模式
流控效果
-
快速失败
-
warm up(预热模式、冷启动模式)
-
排队等待
热点参数限流
隔离
-
线程池隔离
-
信号量隔离(Sentinel默认)
降级
熔断策略
-
慢调用比例
-
异常比例
网关授权
自定义异常结果
规则持久化
-
规则管理三种模式
-
实现push模式持久化
Seata
Seata 为微服务提供分布式事务协调,常见 AT、TCC、SAGA 和 XA。AT 靠反向 SQL 自动回滚,侵入小但要求本地事务和 undo 日志;TCC 要业务提供 try/confirm/cancel,适合资金类强一致。
事务协调器是单点风险,生产要高可用并监控全局锁超时。长事务会拖垮资源,分支要短、重试要幂等。和 Spring Cloud 集成时注意数据源代理是否生效,未代理等于没保护。
选型先问能不能拆成最终一致。能用本地消息表就不要上全局事务。压测要覆盖回滚路径,而不是只测提交成功的快乐路径。
二、架构与一致性
互联网应用架构
互联网应用架构通常从接入层、应用层、数据层向外延展:CDN 与网关挡流量,无状态服务水平扩展,会话外置,数据按读写比拆分。缓存、消息队列和搜索是常见的外围依赖。
演进顺序应匹配规模:先单体模块化,再拆独立扩展的热点服务,最后才是全微服务。观测(日志、指标、追踪)必须先于拆分,否则出了问题找不到调用链。降级和限流是架构的一部分,不是运维临时脚本。存储选型看一致性需求,别把所有状态都塞进同一套 MySQL。安全从网关统一鉴权,内部服务默认不暴露公网。
分布式锁解决方案
分布式锁用来互斥跨进程的临界区,常见实现有 Redis、ZooKeeper 和数据库唯一约束。正确性要求互斥、可重入策略明确、持有者崩溃能释放。性能上要避免锁粒度过粗把吞吐锁死。
Redis 方案简单快,要处理过期与续期;ZK 临时节点适合需要严格通知的场景,延迟更高。能用数据库约束或队列串行化的,不必上锁。锁内只做最短必要操作。
测试要覆盖时钟回拨、主从切换和网络分区。没有 fencing token 时,过期后旧持有者回来仍可能写脏数据。日志打上 lockKey 和持有线程,方便事后对账。
分布式事务
CAP理论
BASE理论
分布式事务实现方案
-
2PC
-
XA 方案:基于数据库XA实现2PC
-
Seata框架方案
-
3PC
-
TCC 方案
-
SAGA 方案
-
本地消息表
-
可靠消息最终一致性方案
-
最大努力通知方案
参考
深入浅出分布式事务处理-CSDN博客
Spring Cloud 微服务组件速查:Sentinel、Seata 与容错
https://lautung.com/archives/spring-cloud-microservice
评论