1. 分布式原理
CAP 原理
一致性(Consistency):客户端知道一系列的操作都会同时发生。
可用性(Availability):每个操作都必须以可预期的响应结束。
分区容错性(Partition tolerance):即使出现单个组件无法可用,操作依然可以完成。
在分布式系统中,CAP 原理最多能保证两个,在分布式系统中,分区容错性是一定要保证的,否则它就不是一个分布式系统,所以整个 CAP 原理其实就是围绕如何在一致性和可用性当中去做取舍。
有些时候需要保证一致性,牺牲掉可用性,让整个系统阻塞住,以达到最强的一致性后才能对外访问,这种情况称为强一致性。而有些时候为了提供吞吐,一般来说都是保证可用性,牺牲一致性,这种情况称为弱一致性。
结合 CAP 原理我们又得到另外一个 Base 原理,Base 原理是基于 CAP 原理之上总结出的保护可用性,牺牲一致性的方案。
基本可用(Basically Available)
软状态(Soft state):最常见的软状态就是处理中
最终一致性(Eventually consistent)
2. 分布式事务方案
只有两阶段提交可以保证 CAP 原理中对应的强一致性和分区容错性,其余都是保证了可用性和分区容错性,不能绝对意义上保证强一致,但是保证了最终一致性。
2.1 两阶段提交
两阶段提交主要包括两个关键字,第一阶段的 prepare 和第二阶段的 commit 和失败后的 rollback。
使用两阶段提交会锁定对应的资源到整个二阶段时间范畴,非常影响性能,所以生产中两阶段提交方案用的很少。
2.2 TCC协议
TCC 协议主要包括三个关键字,第一阶段的 try、第二阶段的 confirm 和失败后的 cancel。整个 TCC 协议就是仿照了两阶段提交,与两阶段提交不同的是,在任何一个 try、confirm、cancel 当中,都可以执行一个完整的本地事务,因此整个 TCC 协议相较于两阶段提交无需锁定对应的资源到整个二阶段时间范畴,而仅仅需要锁定资源在对应的 try、confirm、cancel 的独立事务当中,所以 TCC 协议被广泛的用于应用层分布式事务实现方案,用来取代两阶段提交方案。