微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。
sentinel官网
访问微服务任意端点,即可触发sentinel监控:
在service层方法添加@SentinelResource注解
对来源于query入口的请求限流。
CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。
CAP 定理(CAP theorem)指出对于一个分布式系统来说,当设计读写操作时,只能同时满足以下三点中的两个:
C:一致性(Consistency) : 所有节点访问同一份最新的数据副本
A:可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。
P:分区容错性(Partition Tolerance) : 分布式系统出现网络分区的时候,仍然能够对外提供服务。
由于当前的网络服务,网络故障是不可避免的,那么在保证分区容错性(P, Partition Tolerance)的前提下,可用性(A,Avaliability)和一致性(C, Consistency)就只能保证一个,因为你要保证可用,在分区的情况下,发生网络故障一定无法保证一致性,在保证一致性的情况下,就只能把网络故障断开的分区的机器停用,那这就违背了可用性。
CAP理论告诉我们,在保证P的前提下,只能出现CP或AP的架构
XA模式:强一致性模式,几乎所有主流的数据库都对XA规范提供了支持。
缺点在于:
正常情况下:
回滚情况下:
seata的XA模式:
seata对XA模式做了一些调整:
RM(资源管理者)一阶段工作:
TC(事务协调者)二阶段工作:
TC检测各个分支事务执行状态
RM(资源管理者)二阶段工作:
接收TC(事务协调者)指令,提交或回滚事务
代码中实现:
直接在yaml中设置XA模式,然后使用时用@GlobalTransaction注解。
XA模型中多个资源需要相互等待事务提交状态都报告后,才可以执行最后的提交或者回滚,期间会锁定资源,由于多个事务相互等待,可能导致资源锁定周期过长。
AT模式强调最终一致性,同样是分阶段提交的事务模型:
阶段一RM的工作:
阶段二:
如果成功提交,则RM删除undo-log
如果失败回归,则RM根据快照记录恢复到执行前
解决脏写问题,可以由TC记录正在操作某行数据的事务,该事务持有全局锁,具备执行权,即AT模式的写隔离,这样AT模式相当于锁的粒度就降低了。
AT模式的优点:
AT模式的缺点:
实现:
TCC模式与AT模非常相似,每个阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复,需要实现三个方法:
优点:
缺点:
具体编码时:
首先申明TCC服务接口,定义好TCC的三个方法:
在service层编写实际的TCC逻辑
Saga模式是Seata提供的长事务解决方案,也分为两个阶段: