分布式事务的最佳实践(java)

时间:2016-05-18 11:06:40

标签: distributed-transactions

请分享您对分布式事务的经验。您建议使用哪种框架(java)?

2 个答案:

答案 0 :(得分:2)

分布式交易的做法远远落后于其理论。只有一种分布式事务(2PC)的方法有很多种库和框架可供选择;而其他你需要自己实现它们。不幸的是,2PC也是最不先进的算法,因此选择它会牺牲分区容差和性能,以方便开发速度。

让我们看一下分布式事务领域中的其他主要算法。所有这些都允许您进行跨多个数据源的交易。

两阶段提交算法(2PC)

2PC是最发达的算法。它是X/Open XA标准的核心,它为基于2PC的通用分布式事务处理建模,并使客户端,协调器和资源之间的交互正式化。 XA允许供应商不将其解决方案与所有其他解决方案集成,而只是遵循标准并免费获得集成。 JTA是X / Open XA模型的Java接口。

2PC的一些问题来自于协调器是单点故障的事实。如果它已关闭,则系统不可用,如果存在网络分区且协调器恰好位于除客户端和资源之外的其他分区中,则系统也不可用。

该算法的另一个问题是其阻塞性质:一旦资源向协调器发送了协议消息,它将一直阻塞,直到收到提交或回滚。因此,系统无法使用其使用的所有硬件潜力。

Percolator的交易

Percolator的交易是分布式可序列化的乐观交易。它们在Google的Large-scale Incremental Processing Using Distributed Transactions and Notifications论文中介绍,后来在亚马逊的Transaction Library for DynamoDBCockroachDB数据库中实现。

与2PC Percolator的交易不同:

  1. 不需要协调器,因此当有网络分区和客户端执行事务时,它们会工作,并且受事务影响的资源恰好位于同一分区中
  2. 使用类似于无锁算法的技术,因此它们是非阻塞的,并且更好地利用群集的硬件
  3. Percolator的交易可以在客户端实施,这非常方便。唯一的要求是数据源必须是可线性化的,并提供比较和设置操作。缺点是,在竞争的情况下,并发事务可以相互中止。

    您可以查看Visualization of the Percolator's transaction以了解它们的工作原理。

    RAMP交易

    RAMP事务是Read Committed隔离级别的分布式事务。 Peter Bailis在Scalable Atomic Visibility with RAMP Transactions论文中介绍了它们。它们很新,所以它们还没有进入任何数据库,但Cassandra可能会支持它们rumors。还有Facebook reported,他们正在使用Paxos进行复制的Apollo数据库和CRDT& RAMP用于交叉分片交易。

    与2PC一样,RAMP事务需要类似协调器的服务器,但与它们不同的是,可以有任意数量的此类服务器,因此不会对可用性产生影响。

    就像Percolator的交易一样,RAMP使用非阻塞方法,轻松的隔离级别有助于避免争用问题并实现令人难以置信的性能,请参阅本文的详细信息。

    RAMP对存储的要求与Percolator的交易相同:线性化和比较和设置操作。

    您可以查看Visualization of the RAMP transaction以了解它们的工作原理。

答案 1 :(得分:0)

我会开始,例如这里 https://en.wikipedia.org/wiki/Java_Transaction_API#Open_source_JTA_implementations

作为Narayana项目的qa工作,我个人推荐http://narayana.io