Percolator是Google发表在OSDI 2010上的论文Large-scale Incremental Processing Using Distributed Transactions and Notifications中介绍的分布式事务模型。
Percolator本身是一个依赖BigTable作为数据存储引擎的分布式Key-Value数据库,是一个典型的通过2PC进行分布式事务协调的实现,简单来说是依靠Timestamp-Order实现了快照级别的事务。创新点在于,依靠对时间戳的使用和BigTable的单行事务,实现了跨行事务,更进一步说,由于某一行数据可以位于不同的BigTable的TabletServer之上,所以该事务也是跨节点的。
事务实现时主要参与者有三个:Percolator客户端、BigTable TabletServer、Timestamp Oracle(TSO)。按照2PC的要求分为两个步骤:PreWrite 和 Commit。
TiDB数据库中默认的事务隔离级别为快照隔离级别(Snapshot Isolation),事务只能看到早于它开始时间之前提交的其他事务。
如果事务采用了悲观锁模型,TiDB中的快照隔离级别跟MySQL中的可重复读隔离级别类似。
常见的分布式授时方法有True Time多点物理时钟、HLC多点混合授时、以及TSO混合授时三种方法,代表产品分别有Google Spanner、CockroachDB、TiDB。
Percolator模型中事务实现时主要参与者有三个:Percolator客户端、BigTable TabletServer、Timestamp Oracle(TSO)。按照 2PC 的要求分为两个步骤:PreWrite和Commit。
BigTable中的每行数据是由三个列簇(Column Family, CF)存储的,即data、lock、write。
事务执行流程的Prewrite阶段包含以下步骤:
start_ts
。事务执行流程的Commit阶段包含以下步骤:
commit_ts
。如果其他行没有提交完成前客户端或者服务端就发生了crash,Percolator保证在读操作的实现时依然可以看到整个事务的完整性,并执行roll-forward将所有记录恢复以得到数据完整性。
如果在主行commit前服务器发生了crash,服务器恢复正常后整个事务就会rollback回滚。
优点:
缺点:
References
【1】Percolator分布式事务模型原理与应用