这两天我又看了一下HBase SI
HBase SI是HBase的一个分布式事务框架,它被设计成一套客户端的API,不需要对HBase中现有的数据做任何改动。它用了几张额外的HBase表来保存事务的源数据。HBaseSI也采用了SnapshotIsolation,但它的特点是它没有使用传统的两阶段提交来解决分布式事务的问题,而是采用了一种新的方法。
HBase SI可以说是一个相对不完善的解决方案:
- 它使用Committed表来保存业务数据的快照,并在事务过程中使用Committed表来获知业务数据的最新版本。但是,如果对于一个已有业务数据的HBase应用系统来说,想要使用HBase SI的前提就是,先对所有已有数据生成Committed表中的记录,在此过程中,系统必须停机禁止数据的修改,否则会干扰Committed表的生成过程。
- 它使用两个全局的Queue来控制所有事务的提交,对于性能而言,这是很明显的瓶颈,尤其是出错时的超时,会阻碍所有事务的提交,这对于一个OLTP来说,是致命的。
- 没有出错回滚机制,如果事务发生错误,它涉及到的那些中间状态的业务数据会一直保存在HBase中,日积月累,没人清理,十分悲催。
- 即使事务发现有写冲突,也提交
基本上来说,HBase SI只能用于理论探索,无法用于大数据量的实战。
唯独全局Queue来解决分布式事务的思路可以说是亮点,虽然也是无法用于实战。
感觉它需要不少补丁啊,不如Percolator或者Haeinsa那么成熟。
HBase SI的详细说明,请参见HBase SI,HBase的一个不成熟的分布式事务方案【12页】
关于Percolator,可参考我的博文Percolator详解
关于Haeinsa,可参考我的博文Haeinsa详解