如何解决分布式数据库的原子性的问题
扫描二维码
随时随地手机看文章
当我们在支付网络中进行交易时,我们希望100%地确保交易将完全完成并到达最终目的地,这样就不会有人赔钱。为了保证其有效性,每个数据库事务都应该满足四个主要条件,这四个条件构成了所谓的ACID模型。事务必须是原子的、一致的、隔离的、持久的。
我们想谈谈这些特性之一——原子性。原子性意味着数据库事务必须遵循“全或无”规则。原子事务可以全部执行,也可以完全不执行,这对于确保数据一致性至关重要。
传统的解决方案
让我们从分布式数据库中使用的解决方案开始。
· 单阶段提交是实现原子性最直接的方法。事务管理器发送,参与者按照指示进行更改。这种模式效率低下,而且存在许多固有的威胁和缺陷。
· 两阶段提交更为全面,因为每个事务都分为两个阶段。首先,事务管理器查询每个参与者,以确定是否应该提交事务。他们创建必要的临时条目并投票承诺。如果所有参与者都同意付款,则经理将提交请求发送给他们。
· 三相提交版本将第一阶段分为两部分,具有更高的安全性。经理还会从询问参与者的投票情况开始,但只有在所有参与者都同意的情况下,他才会给出准备指令。然后,参与者创建条目(分配)并确认他们对下一阶段的准备。只有在管理器接收到所有确认之后才执行最后一个阶段。
单个DB节点中的原子性是通过前馈分类器实现的。当用户请求在数据库中反映一个事务时,条目首先是持久的,然后写入磁盘分类账。如果系统在进程中途失败,事务可以在重新启动时从磁盘回滚或恢复。
离线网络中的原子事务
闪电网络和其他的离线网络使用各种具体的解决方案来防止交易过程中由于某人的错误而造成的资金损失。
HTLC
最新的解决方案大多使用HTLC(散列timelock契约)。它允许在预先设定的时间锁前展示原始秘密,然后花钱。让我们看一下闪电网络中的事务流程流。首先,接收节点生成秘密并计算其散列。然后将散列发送到发送方节点,作为生成HTLC的基础。发送方生成合约并将其发送到node1,即路由上的下一个节点,该节点使用递减的TImelock创建一个合契约(使用相同的散列)。这个新生成的合约由node1通过路由进一步发送到node2, node2再次重复动作并减少时间锁。它一直传递到接收方,接收方使用自己在开始时生成的秘密签署资金支出(解锁支付),并从发送合同的节点接收资金。
HTLA
Interledger是一个开放的协议套件,用于通过各种账簿进行转账。传输可以使用两种模式之一执行:通用模式和原子模式。在通用模式下,原子性的账间操作由HTLA提供,是HTLC的一种修改。即使区块链不支持HTLC,也可以使用HTLA。在这种情况下,连接器(负责路由的特殊账间节点)可以使用其他方法复制HTLC——有条件的支付通道(使用HTLCs)、账上持有/托管(使用HTLCs)、简单的支付通道、信任线等,以确保满足所有合同要求(例如支付时间、金额、支付解锁条件)。
PM
Sprite通道是一项建议新版本的付费通道以解决与原子性相关的一些闪电问题的项目。HTLC通过添加预映像管理器(PM)进行了显著升级。开发人员希望PM成为HTLC的仲裁者,并将合同到期的决策从任何单个节点委托给软件。Sprite通道应该有一个统一的合同有效期。如果一个预图已经及时发布,那么所有的争议都是可以接受的,因为一方不可能及时发布预图,而另一方不可能不发布。(双方有效期相同)但是,如果在错误的时间发布了预图,那么付款是没有争议的。
HTLR
Celer网络是通过离线技术实现公共区块链规模和性能最大化的解决方案。在这里,PM已经成为一个散列的TImelock注册表(HTLR),主要具有相同的特性。HTLR有两个依赖端点:isterminate和QueryResult,这两个特性最终可以合并。
Notaries
在原子模式下,Interledger使用参与者选择的公证人来协调转账。通过公证进行的支付类似于使用HTLC进行的闪电支付。唯一的区别是,在披露秘密之前,接收方节点必须将合同移交给公证员进行验证,公证员是随机从其总登记册中挑选出来的特殊实体,必须对支付批准进行投票。
Observers
这个角色出现在GEO协议概念中,它提供了一种解决原子性问题的新方法。项目团队正在创建一个分散的对等脱链网络,允许交换资产。如果参与者在进行事务时遇到问题,就会涉及到观察者。观察者不能影响事务方向并更改其中的任何内容。它们不用于验证每个事务,只对用户的请求进行干预。
GEO对常规事务使用类似于两阶段提交的框架。所有的参与者都要签署一些东西,比如准备付款,如果每个人都有签名清单,付款就会执行。如果有一个参与国说没有文件,观察员就在两个阶段之间采取行动。在这种情况下,观察者从任何节点获取签名列表,并将其发送给所有参与者,或者在不可能且事务在适当的时间过期时什么也不做。
去中心化网络原子性的发展受到新概念的推动,这些新概念各有优缺点。
· 散列TImelock合约的优点是减少节点脱机时的损失以及发送方和接收方的安全性。问题是,资金必须冻结在渠道中,参与者必须经常上网,以避免损失。
· 对HTLC进行了修改,得到了HTLA,可以在不同的注册中心使用HTLC,解决了节点脱机问题。
· 全新的解决方案是observers和notaries。我们在执行时应特别小心,因为observers/notaries的集中可能会损害网络,但适当设计的制度可能使其去中心化。