分布式系统经常出现的异常:机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失
CAP定理
一致性(Consistency) : 在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(Availability) : 在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容错性(Partition tolerance): 大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition) 。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。
CAP原则指的是在一个分布式系统中这三个要素最多只能同时实现两点,不可能三者兼顾。,一般来说,分区容错无法避免,因此可以认为CAP的p总是成立。CAP定理告诉我们,剩下的C和A无法同时做到。
分布式系统中实现一致性使用的是raft算法演示链接
CAP面临的问题
对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,房以节点故障、网络故障是常态,而且要保证服务可用性达到99.9999 (M个9) ,即保证P和A,舍弃C
BASE理论
是对CAP理论的延伸,思想是即使无法做到强一致性(CAP的一致性就是强一致性) ,但可以采用适当的采取弱一致性,即最终一致性。
BASE是指基本可用( Basically Available): 基本可用是指分布式系统在出现故障的时候,允许损失部分可用性(例如响应时间、功能上的可用性) ,允许损失部分可用性。需要注意的是,基本可用绝不等价于系统不可用。
响应时间上的损失: 正常情况下搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障(比如系统部分机房发生断电或断网故障) ,查询结果的响应时间增加到了1~2秒。
功能上的损失: 购物网站在购物高峰(如双十一)时,为了保护系统的稳定性,部分消费者可能会被引导到一个降级页面。
软状态(SoftState): 软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据会有多个副本,允许不同副本同步的延时就是软状态的体现。mysg replication的异步复制也是一种体现。
最终一致性( Eventual Consistency): 最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
分布式事务几种方案
1)、2PC模式数据库支持的2PC 【2 phase commit二阶提交】,又叫做 XA TransactionsMysQL从5.5版本开始支持, SQL Server 2005开始支持, Oracle7开始支持。其中, XA是一个两阶段提交协议,该协议分为以下两个阶段I第一阶段:事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交.第二阶段:事务协调器要求每个数据库提交数据。其中,如果有任何一个数据库否决此次提交,那么所有数据库都会被要求回滚它们在此事务中的那部分信息。
XA协议比较简单,而且一旦商业数据库实现了XA协议,使用分布式事务的成本也比较低。
XA性能不理想,特别是在交易下单链路,往往并发量很高, XA无法满足高并发场景.
XA目前在商业数据库支持的比较理想,在mysal数据库中支持的不太理想, mysgl的XA实现,没有记录prepare阶段日志,主备切换回导致主库与备库数据不一致。
许多 nosgl也没有支持XA, 这iXA的应用场景变得非常狭隘。
也有3PC,引入了超时机制(无论协调者还是参与者,在向对方发送请求后,若长时间未收到回应则做出相应处理)
2)、柔性事务-TCc事务补偿型方案
刚性事务:遵循ACID原则,强一致性。
柔性事务:遵循BASE理论,最终一致性;
一阶段prepare行为:调用 自定义的prepare逻辑。
二阶段commit行为:调用自定义的commit逻辑。·
二阶段rollback行为:调用自定义的rollback逻辑。
所谓TCC模式,是指支持把自定义的分支事务纳入到全局事务的管理中。
3)、柔性事务最大努力通知型方案
按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对。这种方案主要用在与第三方系统通讯时,比如:调用微信或支付宝支付后的支付结果通知。这种方案也是结合MQ进行实现,例如:通过MQ发送http 请求,设置最大通知次数。达到通知次数后即不再通知。案例:银行通知、商户通知等(各大交易业务平台间的商户通知:多次通知、查询校对、对账文件),支付宝的支付成功异步回调
分布式事务Seata
Seata官方文档
Seata完成分布式事务核心也就是下面这张图
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata并不是合高并发场景,在并发不是特别高的后台,还是挺好的!
分布式事务
分布式事务常规解决方案
分布式事务最经典的七种解决方案
分布式事务开山之作——《深入理解分布式事务:原理与实战》草图曝光!!