区块链的技术世界观:账本的技术演进(2)
多运营方账本 上面的账本都只考虑同一个主体运营维护的场景,内部的信任较高。但如果是多方共同维护一个账本的场景,也就是上一个方案的不同机房其实属于不同的主体。这样的场景下,另外一方无法直接信任应用的最终状态,所以在不同机房同步的不能是应用的状态,而是应用的 Event(事件)。无论是本机房用户写操作的 Event 还是从其他机房同步过来的,都需要经过业务逻辑校验处理后再变更应用状态。这实际就是 EventSource/CQRS 的架构,也是很多联盟链的架构。多机房场景下其实也会用这种架构,主要区别是在对从其他机房同步过来的 Event 的信任度。这时候,账本技术的挑战除了跨机房分布式共识算法,还有共识算法和业务逻辑融合。在前面场景里的共识算法,基本只关心数据,不关心业务,共识算法只保证数据的一致性,并不保证数据在业务场景下的合法性。但在这个场景下,共识算法要保证只对合法的数据达成一致,二者融合了。无法直接沿用上面几种分布式共识算法,需要考虑作弊情况的共识算法,比如 BFT 这样的。 有人会问,有什么动力要将同一个账本交给多个运营方呢?那我们拿互联网电商来说明这个场景。当前的电商,一方面对接商家和商家的库存管理系统,另外一方面对接银行和快递系统,以及最终用户。一个商品,从库存管理系统,到电商平台,用户购买后,从银行扣钱,发送快递,实际上是同一个账本上的信息在不同的运营方系统之间的同步。当前的实现方式是通过远程调用或者商家和用户介入手工操作。那不同的账本之间如何保证一致性呢?只能定时对账清算,因为远程调用本质上只是信息传递,无法保证一致性。如果这时候有个多方共享的账本,架构就会像上面那样,不仅架构更优雅,同时结算效率会更高。 关于联盟链的技术架构以及模式的更详细分析,我会在下一篇文章中细说。 去中心化账本 去中心化账本这个概念没有非常准确的定义,但我们这里可以简单的理解成 Peer to Peer 网络 + 账本。Peer to Peer 网络的特征是无准入机制,给人的印象也是不可靠,更不追求一致性,而账本是要追求一致性的。比特币创造性的把二者结合起来。所以一般所说的去中心化账本,或者公链,关键一个特性就是无准入机制。 之前的账本都是有准入机制的,并且账本本身的运营成本以及收益通过系统外的机制来解决,那如果去掉准入限制,同时账本的运营成本以及收益也通过账本系统内置的机制来调节,会有哪些新的挑战?
下面我们通过几个公链是来分析上面的问题。 Bitcoin: A Peer-to-Peer Electronic Cash System 比特币首先带给我们的是一套内生的激励机制。虽然比特币到底应该理解成货币,还是数字黄金,还是股票,大家争论不休。这里我们把比特币设想成一个创业公司,这个创业公司要做一个记账交易系统。于是它发行了2100万股,发行规则直接写到了这个记账系统的代码中,分期释放,奖励给给这个系统提供运行资源的人。而用户拿什么来交易呢?也用它的股票来做交易媒介。这样它就实现了软件系统在经济上的自举,也带给软件系统一种能力:在程序算法中引入经济博弈机制。 Proof of Work PoW 到底应该算是激励的评估机制,还是共识算法,还是反 DoS 策略?实际上它兼具多种功能。所以这也是公链的共识算法和传统分布式共识算法的差异之处,容易让人迷惑。 最早应用 PoW 的是 hashcash,它的主要目的就是通过 PoW 来实现邮件的反垃圾,关键点是通过 PoW 制造额外成本,这样发邮件少的用户可以接受成本,但发垃圾邮件的用户就很难承担这样的成本。 同时,有了成本也就可以作为贡献的评估标准,Proof of Work 这个词,顾名思义,就像是一个工作的评估机制。运行比特币系统,需要机房,机器,带宽等,如何通过程序来评估资源提供者的工作呢?比特币的做法就是算哈希函数,要求算出来的哈希值小于一个难度。虽然简单粗暴,但它难计算,易验证,是一种可行的办法。 中本聪共识(Nakamoto Consensus) 只有 PoW 是无法实现一致性的,需要再加上其他的一些策略,统称为中本聪共识。
中本聪共识的特点是无交互,纯异步,每个节点只需要按照内置的规则处理即可,无需和其他节点交互协调。 区块与链式结构 比特币带来的区块与链式结构,也是区块链这个名字的由来。但区块和链式结构是必须的吗?真的存在一条这样的全局链式结构吗?实际上区块只是一种为了降低网络开销的批量操作,链式结构的主要目的是建立一种时间上的依赖关系,即便两个交易本身不相关,但由于链式结构的存在,后面的交易实际上给前面的交易做了背书,增加了篡改和回滚的成本,因为一旦想要撤回前面的交易,必然也会影响后来的交易。这种结构和关系只是共识协议的一部分,并不存在这样一个全局的结构,具体每个节点如何保存数据,是节点自己决定的。链式结构虽然存在分叉,但只要配合共识机制,最终可以选择出一条唯一的链,达到最终一致性。也就是说,只要能达到这个目标,区块和链式结构并不是必须的,也没必要因为这个名字纠结什么是真正的区块链。 (编辑:ASP站长网) |