2018-06-26 牛科技 细数区块链技术应用的三个大坑,坑坑难填!
- 第一个坑:公链和私链混淆,速度和扩展性的问题依然得不到解决。
- 第二个坑:依然不能做到完全地去中心化
- 第三个坑:现有的容错机制离实际需求差距很远
2018-06-14 金融界 蔡维德:区块链技术几个重要的坑(上)
2018-08-02 金融界 蔡维德:区块链的第四大坑(中)
作者:蔡维德,姜晓芳,刘璨
近些年,区块链技术飞速发展,引领了互联网领域一次新的技术浪潮,这种新型技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术;并成为最近两年的热门投资方向,如著名投资人索罗斯在2017年年底的时候,把Facebook的股票全部卖掉,投资了一家用区块链发行股票公司Overstock。全球各大互联网公司也大力在区块链领域布局,积极推进区块链技术的落地,如IBM的供应链物流,金融结算服务区块链创业公司井喷般出现,国内区块链企业已达456家。
在区块链技术变得火热的同时,许多新技术出现,区块链技术混淆越来愈平常,公链和私链技术混淆使用,如一些著名公链竟然使用私链的技术来解决速度和扩展性的问题。很不幸的是,在区块链技术快速发展的时候,一些著名的链的基础协议居然还是和几年前一样, 这表明以前发现的问题到今天还是存在没有解决,新出来的技术并未解决以前的问题,例如以下将要讲述的第一个坑。
在2018年,让人惊讶的是,甚至几个世界出名的公链也被人察觉居然部分机制还是一个中心在控制。这和长期标榜“去中心化”的区块链思想直接冲突,表示完全“去中心化”的系统难实现,而且在今天法律制度下(例如美国证券交易监督委员会出的新法规)很难实现。但是哪些中心化机制可以被接受,哪些不能被接受,应该有所讨论。这是第二个坑。
加拿大央行, 欧洲央行, 和日本央行三个世界重要央行在2017年和2018年出的3篇报告,现在区块链容错机制不能达到金融机构的需求已经是共识。区块链不是自己有容错机制吗?有,但现在的容错机制离实际需求差距很远。这是第三个坑。
这些坑还存在今天著名区块链系统里,这给区块链投资人造成了困扰。有人认为,著名公司研发的区块链系统应该比较好,但事实上不是这样。
- 2017年加拿大央行报告[18]指出一些著名的区块链系统离实际银行的需求还相差很大,一些融资上亿美元的区块链公司在2016年和2017年开始宣布研发大型区块链合作项目,但是后来也没能研发出来。
- 2018年一位美国高科技公司CTO 在拜访天德公司的时候就表示有资金和有名声的美国高科技公司不一定可以研发出好的区块链系统。这些问题也没有因为现在新技术发展而解决。
当然区块链不只有这三个坑,其他坑以后再讨论。这三个都是老坑,几年前已经发现的问题,但直到今天,这些坑还是存在一些区块链系统里面,甚至有的坑今年才引起大家重视。
这些坑都是中国的机会,因为这些著名的链要改是非常难的。但问题是中国真有团队愿意好好打造一个好区块链吗?还是大家只要炒币赚钱?还是只要山寨那些明知有问题的链?
第一大坑:拜占庭将军协议或是“刘关张”共识协议
区块链是一种分布式记账系统。在分布式系统中,最为关键的问题就是一致性问题。一致性问题指的是:对于给定的一组服务器节点,指定一系列操作,在某个协议保障下,使得各服务器节点对处理结果达成一致,其中用到的协议也被称作为共识算法。根据节点信任程度和容错能力,我们将共识协议分为两类:
拜占庭将军协议(节点非互信)
拜占庭(BFT)将军协议则是考虑存在一定数量恶意节点的情况下,当恶意节点出现任意行为时,也能有效的保证数据的一致性。BFT系列算法,是一种确定性容错算法,共识效率高,确认时间短,容错能力稍差,允许1/3以下的恶意节点。而区块链的应用场景就是互不信任的各方通过区块链技术来做生意、开公司、上法庭,解决互不信任的各方的信任问题。图1 演示PBFT的协议,PBFT 是一个实用拜占庭将军协议,如图1所示,该算法经过预准备(Pre-prepare)、准备(Prepare)和确认(Commit)三个阶段达成一致性。
图1 PBFT(BFT协议的一种)“刘关张”共识协议(节点互信)
“刘关张”协议就是节点之间互信的协议,刘备、关羽、张飞三人桃园结义,互相信任对方,他们互不欺骗对方,三兄弟齐心协力。如果将他们对应于传统的分布式系统各个节点,也就是说各节点只可能出现宕机或是断开连接的情况,不会向其他节点发送虚假消息,理想情况下,互信协议中不会出现恶意的恶意节点(向不同的节点发送不同序号的消息)。
**图2“刘关张”协议**拜占庭将军协议和“刘关张”共识协议的最大差别在于:
“刘关张”协议有两轮投票,拜占庭有三轮投票。
其中,拜占庭协议的前两轮投票阶段和“刘关张”协议相似。但是在拜占庭协议的第三轮投票中,参与节点需要向其他节点发送他们在第二轮阶段收到的消息。所以,如果没有第三个阶段,拜占庭将军协议就会变成“刘关张”协议。国内一些工程师原本是为了“优化”拜占庭将军协议,结果却是将拜占庭将军协议第三轮去掉变成了“刘关张”协议。
本来认为“刘关张”协议只会在中国出现,但是发现“刘关张”协议也已经技术输出国外,国外一些出名的区块链居然也使用“刘关张”协议。他们也和中国公司一样,自称使用拜占庭将军协议, 其实是用“刘关张”协议。
“刘关张”协议又可以分两种:分布式“刘关张”和中心化“刘关张”。
分布式“刘关张”协议
这种协议用在传统的分布式数据库系统,能保持多个数据副本之间的一致性,如两阶段提交协议、Paxos、Raft等, 这些都是传统数据库的一致性协议。互信协议允许宕机的节点数为1/2,但是一旦黑客攻击了其中的主节点,成为恶意节点,就可能会造成系统内的数据副本混乱,系统瘫痪。
图2、3表示两段式分布式“刘关张”协议, 一个是确认情景,一个是回滚情景。
图2 “刘关张”协议——确认情景 图3“刘关张”协议——回滚情景如果将数据库的互信协议应用到区块链技术当中,将不能够查验以及抵挡恶意节点,这样的区块链只能够应用在节点之间互相信任的环境下运行。因此,这样的区块链被许多学者认为是一个弱化的区块链。
在中国工信部信通院发布的“可信区块链”白皮书标准里面,“有效防止节点欺诈”是“可信区块链”的一个最低要求,没有达到这个功能就不能称为“可信区块链”。所以,凡使用“刘关张”协议的区块链都不是可信区块链。
而且工信部认为不光需要满足上面的需求,“绝对一致的共识机制”还要满足以下需求:
对于下述情况,共识机制需要保证在小于理论节点数欺诈的情况下,节点间数据能够恢复正确且一致,并且和对外响应结果正确且一致。”
1)任意节点错误响应,包括执行成功对外返回‘失败’、执行失败或者不执行的时候对外返回‘成功’。
2)任意节点向网络中其他节点发送不同的消息请求,例如:系统中有4个节点,请求消息序列为a, b, c, d, e,其中任意一个节点不按照a, b, c, d, e的序列发送给其他节点,把a只发给其中的一个节点,把b,c,d,e发给另外两个节点。
3)任意节点通过修改本地数据,构造本节点校验合法的请求,例如,本节点余额为100单位,修改本地余额为200单位,然后发起200单位的转账。
如果使用这种弱化的区块链,将不能用于有强监管需求的应用里面。例如金融、公检法、政务。
例如,最近亚洲的一个重要国家的首相夫人参与舞弊事件,而政府官员为了保护首相夫人居然篡改文件。然而一年后这舞弊事情包括政府官员违法篡改文件仍然被发现,引起政治风波。
这件事情表明,政务上的区块链必须使用拜占庭将军协议,而不是“刘关张”协议。因为被信任的政府官员也可能参与舞弊, 只有拜占庭协议可以查验说谎的节点, 而且可以防止从外部和内部篡改。
图4分布式“刘关张”协议中心化“刘关张”协议
中心化的“刘关张”协议使用“原子广播”(atomic broadcast)来做共识。原子广播原来目的在于保证每个参与节点收到同样信息,因为每个节点收到同样信息等于保证每个节点有共识。一个原子广播通用软件是Kafka,而Kafka 是用另一软件Zookeeper 完成的。
参考:2018-08-03 万云 区块链时代的拜占庭容错:Tendermint(一)
...
原语一:可靠广播(Reliable Broadcast,RBC)。本质上,可靠广播使得消息最终到达所有的进程一次。可靠广播(RBC)是一个广播原语满足如下特性,对消息m,有:
1)有效性(validity) - 如果一个正确的进程广播m,它最终成功传达了m
2)一致性(agreement) - 如果一个正确的进程成功传达了m,所有最终所有的进程成功传达m
3)完整性(integrity) - m只传递一次,并且是以广播的形式被发送者发送出去。
...
原语二:原子广播( Atomic Broadcast,ABC),其满足可靠广播(RBC)和另外的一个属性:
4)总的顺序(total order) - 如果正确的进程p和q分别传递出m和m',p传达m在m'之前,那么q传达m在m'之前
...
原子广播是一个可靠的广播,其中值(values)以相同的顺序被发送到每个机器上。注意到这实际上复制交易日志的问题。通俗地讲,该问题可以被称作共识。
...
共识原语的标准定义满足以下条件:
1)终止性 - 每个正确的进程最终能做出决定——【共识特有】
2)完整性 - 每个正确的进程最多只做出决定一次
3)一致性 - 如果一个进程做出了v1的决定, 并且另外一个进程做出了v2的决定,那么v1=v2
4)有效性 - 如果一个正确的进程做出了v的决定,至少一个进程提议了v
...
直观地,共识和原子广播看上去十分类似,主要的差异在于,原子广播本身作为一个协议是连续的,然而共识期望终止。这就是说,每一个可以精简为另一个。共识可以被精简为原子广播通过决定第一个原子广播的值。原子广播可以精简为共识,通过依次运行许多共识协议的实例。然而存在一些微妙的考量,特别是在处理拜占庭故障方面。一个完整的参数空间的关于原子广播精简为共识的描述仍然是一个开放的研究话题。
但是原子广播真的安全吗?是分布式共识,还是中心化共识协议?
如图5,Kafka使用的Zookeeper提供的数据状态存储和主节点选举服务。而Zookeeper是依赖于ZAB(一种从Paxos改造的协议)为其提供非拜占庭容错,即ZAB是一种“刘关张”(传统数据库)协议, 属于弱化的区块链。所以Kafka 不能处理拜占庭将军的问题。
而且因为Zookeeper是一个中心化的系统,Kafka 也成为中心化的系统。这个Zookeeper中心系统被攻破后,整个系统就会发生问题。所以,Kafka是中心化的“刘关张”协议,和分布式区块链系统不匹配。
如果有人怀疑Zookeeper不是中心化的系统,可以查Apache [1] 和 IBM [2] 官方网站,以及著名IT 信息网站 InfoQ[3],上面都是说是中心化的系统。
Hypeledger就是使用原子广播这种的共识协议,如图6。其中Orderer Service的核心是Kafka集群来完成交易排序服务。对于这种协议,即使右端的节点做拜占庭共识,如果中心化的Orderer Service被攻破了,整个系统还是会陷入瘫痪。
图5 Kafka、Zookeeper、ZAB协议 图6 Hyperledger中心化“刘关张”协议不光在性能方面,中心化的“刘关张”协议和分布式的“刘关张”协议差别很大,在具体实现上,中心化的“刘关张”协议很容易实现,而分布式的实现起来相对困难。与Hyperledger使用图6的中心化“刘关张”协议实现不同。
??? 总结来说,如表1,根据可信度,区块链可以分为以下三种。
表1:
序号 | 协议 | 可信度 | 例如 |
---|---|---|---|
1 | 中心化的“刘关张”协议 | * | Fabric+Kafka |
2 | 分布式的“刘关张”协议 | *** | 两阶段提交协议、Paxos、Raft等 |
3 | 拜占庭将军协议 | ***** | PBFT等 |
第二大坑:中心化的区块链控制
有些区块链为了取得更快的交易速度,采用了中心化的控制,这种区块链称为“伪区块链”。这种伪区块链披着区块链的外衣,却是中心化的系统。在一个中心化的系统中,控制整个区块链的中心节点就是这个系统最为薄弱的环节。如果中心节点故意说谎或者被人攻破,则整个区块链瘫痪。不论是公链或是私链,都可能是中心化的链。
-
例如,一家市值排名很高的加密货币,多年自称是分布式区块链,但在2018年研究人员发现每个节点都是由另外一家公司所控制,是中心化的集权系统,所有交易都是由中心节点来控制。消息出来后,引起业界争论。
-
一些区块链项目,被人爆料节点是由官方“静态”部署的,并不具备动态选举的特性。这是不是一种中心化的共识机制?
-
没有人会认为以太访是中心化的系统,但在其历史上,也出现过中心化的行为,在The Dao 事件上,以太坊采用中心化的决策回复原来的状态, 而不是采取“去中心”的决定。可以清楚看到,一些“去中心化的区块链”,在特殊关键时刻,很可能还是采取中心化的行为来解决问题。因为完全“去中心化”是很难的。
部分公链的支持者会以妖魔化来形容私链(联盟链等),认为联盟链就是中心化的系统。这是商业言语,不是学术言语。在计算机领域,多个并行的执行线程,就是分布式系统,而且中心化的系统也不是妖魔,也不用躲避。中心化银行系统用了如此多年,长期服务国家、社会、家庭、个人,根本没有必要被妖魔化。
传统中心化的系统中有许多好处。安全性由的安全防护系统来完成,防火墙隔离了内部系统,保护系统免受各种类型的网络攻击。现在的许多大型应用都是用中心化的系统。
但是区块链系统不能采取这种中心化方式,因为中心化的区块链和区块链初衷是完全不符合的。如果每一次建块或是每一笔交易都是中心化的行为,那这个链就不是区块链,而是伪链。
- 以太坊只有在特殊情形下才使用中心化的手段,建块的时候并没有采取中心化的手段。
- Hyperledger系统每个交易信息都经过Zookeeper处理,所以是一个伪链。
实际上,区块链系统应该由“独立的”节点来运行,独立节点就是指每个节点的状态变化不受其他节点的控制,根据共识协议的规定,以及从其他节点接收的有效消息,独立的进行状态转移。区块链系统除了要分布式处理,每个节点还要独立式处理,所以这是一个很难的一个设计。
我们完全不需要妖魔化中心化的系统。在特殊情形下,区块链也可以有中心化的行为, 例如The Dao事件,如果当时当事人没有中心化的处理,相关单位马上就会有几亿美元官司。他们当时做的决定是正确的。但是在一般情形下,区块链必须是分布式的,节点还是必须是独立式处理交易和共识。
第三大坑:区块链功能机制必须需要有其容错机制
什么是容错机制?
一个容错机制乃是保护一个“功能机制”。基于一个功能机制(A),工程师设计一个容错机制B,通常B 是A+容错协议。
区块链基本共识是用投票,而共识算法PBFT本质上是容错机制,即允许系统内存在一定错误(恶意节点)的情况下,还能保证系统投票结果能够保持一致性。
问题是在区块链的设计里面,投票不是功能,拜占庭协议才是功能。当一个容错机制成为功能机制的时候, 那就需要一个自己的容错机制。如下表:
- 功能机制A 基于一个功能机制A的容错机制B (A +容错协议)
- 功能机制B 基于一个功能机制B的容错机制C (B +容错协议)
投票(A)是一个功能机制,一个投票的容错机制(B)就是拜占庭协议。
但是在区块链里面,投票不是功能机制,拜占庭协议才是区块链功能机制(B), 所以区块链需要一个基于拜占庭协议的容错机制(C)。这关系可以从下表显示。
- 功能机制A(投票) 基于一个投票机制的容错机制B (拜占庭协议)
- 功能机制B(拜占庭协议) 基于一个拜占庭协议机制B的容错机制C(容错的拜占庭协议)
任何子系统都可以出错, 任何一步都可以出错。
但是基于拜占庭协议的容错机制是什么?就是“拜占庭协议+容错协议”是什么?
在国外一下学术文章里面有一些这样的研究,但是这些设计离实际应用还非常远,因为在实际系统里面,任何子系统都可以出错,而且在系统恢复的时候仍然可能出错,造成恢复机制非常复杂。但是学术文章里面的容错机制通常只有少数子系统可以出错, 例如投票领导出错(RBFT等协议), 但是实际系统复杂的多。
任何区块链子系统都可以出错代表什么意义?表示通讯子系统可能出错,计算子系统可能出错,投票的时候可以出错,每一步区块链投票都可以出错,数据库可以出错,并行算法可以出错,加解密可以出错。区块链每个功能、每个协议、每一步、每个节点都可以出错。而且出错不一定是“停止错误”,而且可能是“拜占庭错误”,就是有人故意捣蛋,送不同数据给不同节点。所以一个容错的区块链系统是非常复杂的!
如果没有容错的拜占庭协议,任何会带来什么影响?一个简单的错误使得拜占庭协议停止工作,或是导致错误的信息写进区块链数据库里面。前者会造成区块链停止不能前行(区块链性能因此差),后者造成区块链不能维持数据的一致性(区块链功能丧失, 后果更严重)。
根据第二个坑,区块链不应该有中心的控制节点,而每一个节点都可以查验其他节点,并且独立作业。这代表区块链容错机制必须是分布式处理,将使一个区块链容错机制设计变得非常困难。如果是中心化的容错机制,例如由中心控制的恢复系统,这会比分布式的恢复系统容易很多。
如图 7,容错和功能的关系可以从下图来看,
- 从功能上看,投票机制最简单,拜占庭协议相对简单,容错的拜占庭协议比较复杂,分布式容错的拜占庭协议最复杂。
- 从容错性上看,投票机制最差,拜占庭协议相对差,容错的拜占庭协议比较好,分布式容错的拜占庭协议最好。
如果有人怀疑这论点,可以看加拿大央行2017年的区块链实验报告,报告明确指出其所测试系统的容错机制不够加拿大央行报告的第8页多次指出:
验证节点的容错机制不够,加拿大央行在这个系统里面必须是一个验证节点,但是央行需要有完整的信息,央行系统需要进行备份,也会是大数据版的系统。
加拿大央行、欧洲央行和日本央行三大央行报告之后,区块链发展重点不在速度,而是可靠性,容错性和安全性,这是区块链时代的一个里程碑,也代表区块链技术走上成熟期。
引用
[1]Index - Apache ZooKeeper - Apache Software Foundation. https://cwiki.apache.org/confluence/display/ZOOKEEPER/Index
[2]What is Apache ZooKeeper. https://www.ibm.com/analytics/hadoop/zookeeper
[3]Centralized Application Configuration with Spring and Apache ZooKeeper.
https://www.infoq.com/presentations/spring-apache-zookeeper
[4]区块链:具有改变世界潜力的颠覆性新兴技术 ——专访国家“千人计划”特聘专家、北京航空航天大学教授蔡维德.http://www.1000thinktank.com/zxgz/16609.jhtml
[5]蔡维德, 郁莲. 区块链技术在金融领域的应用解析[J]. 金融电子化, 2016(5):57-60.
[6]蔡维德, 郁莲, 王荣,等. 基于区块链的应用系统开发方法研究[J]. 软件学报, 2017, 28(6):1474-1487.
[7]Castro M, Liskov B. Practical Byzantine fault tolerance[C]// ACM, 1999:173-186.
[8]Reed F J & B. ZooKeeper : Distributed Process Coordination[M]// ZooKeeper: Distributed Process Coordination. O’Reilly Media, Inc. 2013.
[9]Tsai W T, Blower R, Zhu Y, et al. A system view of financial blockchains[C]//Service-Oriented System Engineering (SOSE), 2016 IEEE Symposium on. IEEE, 2016: 450-457.
[10]Yu L, Tsai W T, Li G, et al. Smart-Contract Execution with Concurrent Block Building[C]//Service-Oriented System Engineering (SOSE), 2017 IEEE Symposium on. IEEE, 2017: 160-167.
[11]Tsai W T, Bai X, Yu L. Design Issues in Permissioned Blockchains for Trusted Computing[C]//Service-Oriented System Engineering (SOSE), 2017 IEEE Symposium on. IEEE, 2017: 153-159.
[12]Kreps J, Narkhede N, Rao J. Kafka: A distributed messaging system for log processing[C]//Proceedings of the NetDB. 2011: 1-7.
[13]Lamport L. Generalized consensus and paxos[R]. Technical Report MSR-TR-2005-33, Microsoft Research, 2005.
[14]数据中心联盟(DCA)可信工作组,可信区块链第1部分:区块链技术参考框架、可信区块链第2部分:总体要求和评价指标。
[15]向继志. 区块链:是“野蛮生长”,还是“笑傲江湖”?——专访区块链专家蔡维德[J]. 中国信息安全, 2018(3):96-99.
[16]蔡维德.熊猫-CBDC央行数字货币模型. https://mp.weixin.qq.com/s/VMF1R9q2D61-2R3neo6lGg.
[17]蔡维德.天德科技全球首创双链设计,引国际金融技术界关注.
https://mp.weixin.qq.com/s/J_dvTOXyrd-7jJHvSgb7kA.
[18]Engert W, Fung B S C. Central Bank Digital Currency: Motivations and Implications [J]. Social Science Electronic Publishing, 2017.
[19]Payment systems: liquidity saving mechanisms in a distributed ledger environment, European Central Bank and Bank of Japan, 2017.
[20]Securities settlement systems: delivery-versus-payment in a distributed ledger environment, European Central Bank and Bank of Japan, 2018.
[21]Chapman, J, R Garratt, S Hendry, A McCormack and W McMahon (2017): "Project Jasper: are distributed wholesale payment systems feasible yet?", Bank of Canada, Financial System Review, June, pp 1-11.
2018-08-02 金融界 蔡维德:区块链的第四大坑(中)
作者:蔡维德,姜晓芳,刘璨
- 蔡维德(Wei-Tek Tsai),男,博士、教授、博士生导师。现任北京航空航天大学国家“千人计划”特聘教授、清华大学长江讲座、北京天德科技有限公司首席科学家、天民(青岛)国际沙盒研究院院长、赛迪(青岛)区块链研究院名誉院长、国家大数据(贵州)综合试验区区块链互联网实验室主任 。1979年在美国麻省理工学院(MIT),获得计算机科学专业学士学位。1985年在美国加州大学伯克利分校获得计算机科学专业硕士学位及博士学位。在美国明尼苏达大学和亚利桑那州立大学计算机系任教30余年。
- 姜晓芳,女,北京航空航天大学博士生,CFA持证人和北京金融分析师协会的发起会员。现任金融信息化研究所资深研究员,负责金融大数据、人工智能、区块链等领域相关理论体系建立和新兴技术的跟踪研究。
- 刘璨,男,北京航空航天大学硕士生。
前面已介绍了区块链技术的三个大坑[1],本文将继续介绍区块链技术一定要跨过去的一个大坑——可扩展性问题,主要集中在分片技术上。
第四大坑:可扩展性问题
区块链,无论公链还是私链,要想真正做到更深入的应用和普及,关键就是要解决交易的吞吐量和速度问题,这在区块链中也被称作可扩展性[2]。目前业界可扩展性问题的解决方案主要分为链上和链下两种。
- 线下扩容技术以闪电网络(Lighting Network)为代表,它将大量交易放到链外进行,只把关键环节放到链上确认,这种方法最大的问题在于链下扩展(没有区块链的保护),安全性不能得到保证。
- 链上扩展技术则有侧链(SideChains)和分片(Sharding)技术。
侧链因为最早是对比特币提出,所以这个概念后期也更多是在描述比特币相关的扩容,它的定义是:
可以让比特币安全地从比特币主链转移到其他区块链,又可以从其他区块链安全地返回比特币主链的一种协议。
也即以比特币区块链作为主链,其他区块链作为侧链,两者通过双向挂钩,实现比特币从主链转移到侧链,侧链机制可将一些定制化或高频的交易放到主链之外进行,从而实现可扩展性。
如果说侧链是通过“外部嫁接”到主链,那分片就是将主链进行“内部分割”。
- 区块链分片技术,是指创建很多分片链,每个分片都是一个新的小星系,或者说将区块链网络切分成许多独立的小区域,称为“碎片”,每个碎片由专门的节点来维护。假设现在有三个节点A,B,C,并且它们需要验证数据T。在传统的区块链网络模式中,每个节点都需要分别去计算和验证整个数据T,在分片技术下,整个数据被分成3个片区:T1,T2 和T3,节点 A,B,C 加上其他节点可以并行验证数据T1,T2和T3,提高了扩展性。
区块链的分片技术来源于数据库的分片技术。数据库的分片技术是将一个数据库切分成多个部分放到不同的数据库上,每个数据库存储部分数据,数据查询方便,从而缓解单一数据库的性能问题。
数据库分片区块链也是将数据分片,每个分片处理一部分数据。但是,这二者间有个关键性不同——数据库分片是相互独立的,区块链分片之间有数据交互(如下图)。这就意味着在分片机制里,区块链依然要解决跨片交易问题。
数据库分片与区块链分片的异同——区块链分片后每片仍然互相交互可以看到,不论是侧链技术——主链和侧链交互,还是分片技术——两条子链交互通过主链来实现,或是两条链之间直接交互,都需要两次(直接交互)或三次(间接交互)以上的共识,而不跨片的交易只要一次共识。
这将使得整体交易的代价变大,跨片或是跨链交易越多,延迟越高,同时负责两个链共识的节点就成了薄弱环节。切片越多,跨片或跨链交易问题越大,因为太多跨片或是跨链将会使系统瘫痪。这才是真正的问题所在。
如果我们把系统分片为七片,七片交互如下图。
区块链分片:七片分片交互图如果是切成九片,那交互图成为下图。
区块链分片:九片分片交互图从以上两张图,我们很容易发现交互明显增加了。如果再切成一百片,那交互将更为复杂。再进一步想象,如果按照计划,进行无限扩展,假设切成十万片,那交互情形将会如何?那将会是异常恐怖!
不知道聪明的读者到此是否已经明白?
现在区块链的分片技术根本不是扩展性技术,而是紧缩性技术!
- 扩展性技术是指,工作量虽然增大,但性能保持差不多。
- 紧缩性技术则是工作量越大,性能越差。
区块链现在的分片技术,如果工作量越大,分片越多,交互也越多,性能就越差。可能有人说,“不对,当我分成两片的时候,性能比较好。”这是可能的,因为只分了两片。但如果一直切分下去,分片越多,性能越差,这正是紧缩性技术的特性,而不是扩展性技术的特性。
2015年在清华大学和Vitalik合影早在2015年,笔者第一次见到Vitalik时,他就说自己有一套方法,可以使以太坊无限扩充,速度无限提高。他当时拿出一篇论文从数学上证明他的方法是正确的。
现在已经到了2018年中,虽然以太坊确实有了长足进步,也提出了Casper及分片技术,但是离以太坊跨分片交易的目标——速度无限提高——还有点距离。
笔者非常喜欢Vitalik,他是一个难得的天才,伟大的数学天才!但是笔者是一个软件工程师,因此下面将从软件工程的角度来分析这个问题。
区块链分片在数学上可以达到无限扩展,但实际工程上有其他问题。
目前,已经有很多链设计了各种各样的算法和协议,它们像以太坊一样,都说自己有可行的分片技术,具有很强的扩展性,而且图文并茂,另外也有许多区块链分片学术论文发表,上面满满的都是数学推导和协议算法。但这些是否真的解决了区块链分片问题?
如果想研究这些白皮书或学术论文来弄明白区块链分片的问题,很容易走进“林间小路”(Garden path),这是美国学术界用的名词,表示在“学术丛林里”迷失方向。文中的协议复杂,但是一些协议没有介绍高层设计原则,而是直奔协议细节,搞得你辛辛苦苦研究完细节后还是不明白协议的本质。
实际上,笔者认为 分片技术,即区块链扩展性问题应该换另一个角度来考虑,那就是应该先关注底层数据结构,而不是只注重算法或协议。
现在大家都关注顶层协议,设计了各式各样的协议和算法,但效果都有距离,问题的关键在哪里呢?在于他们没有透过现象看本质,没有看到底层的数据结构才是最关键的。如果不解决数据结构的问题,无异于在沙滩上盖大楼。
错误的关注点,应关注底层数据结构图灵奖得主尼古拉斯·沃斯(Niklaus Wirth)写过一本名著《算法+数据结构=程序》(Algorithms + Data Structures = Programs),书名中的公式是计算机科学的名言。他的一个重要理论就是,
算法受数据结构影响,数据结构是算法实现的基础,算法设计是不可能独立于数据结构的,如果数据结构不好,算法很难发展。
可能有人会说区块链是协议,不是软件,所以 沃斯理论 不适用。但是网络协议也是软件实践的,因此沃斯理论其实是完全可以用在区块链上的。有人说他的分片技术使区块链性能提高很多,也有数据证明。但有没有把跨片交易的一致性成本放进去?如果有,跨片交易成本一定高(因为跨片交易要多次共识),分片越多,跨片交易越多,成本越高。
图灵奖得主Niklaus Wirth教授,提出"程序以数据结构为主".从这观点出发我们来看一下前两代区块链数据结构:
第一代区块链,半账户数据结构
第一代区块链以比特币为代表,使用UTXO模型,可以称为“半账户”,就是没有完整的账户[3]。账户创造后,只能使用一次,用过就不能再用。传统金融系统都采用余额账户,但是用UTXO模型来处理余额账户会非常困难。系统必须把相关UTXO账户整理成传统账户。因为在传统金融系统中,一个人只会有几个账户,其中一些账户可能有许多交易。而在UTXO模型中,每一笔交易就是一个账户,所以一个人可能就有成千上万甚至几十万个UTXO账户。
在这种情况下,我们可以想想,余额计算会有多么困难,那么多的账户如何处理?比如宇宙第一大行工行,拥有数亿级的客户账户,假设每个客户有100笔交易(每笔存取款都是一笔交易),那工行使用UTXO模型就需要处理百亿级的计算量!
现在我们在UTXO系统上使用分片技术。因为每个UTXO账户只能属于一个客户,而且只能用一次,可以用下列两种方法存放UTXO账户:
- 一是随机放在一个分片上;
- 二是以客户账户分,放相关的UTXO账户。
采用第一种方法,会立刻面临一个难题。因为需要跟踪UTXO账户和客户账户的关系,做余额计算非常困难;而如果用第二种方法,余额计算则比较容易,因为可以分析每片上的账户得到余额。
无论采用上述两种方法中的哪种,每个分片上的账户都可能和其他分片上的账户进行交易,导致很多跨片交易,而跨片交易成本比片内交易成本高的多。
我们可以这样思考,第一代区块链系统,为了方便交易处理,把账户系统大大简化,账户的数据结构太过简单,简单到没有办法支持现代金融系统。可以说第一代区块链系统主要是一个交易系统,账户管理系统只是外加的[4]。
所以基于第一代数据结构发展出来的系统,在金融上很难有所发展,如RSCoin和Corda,因为它们的数据结构和现代金融系统数据结构格格不入[5]。
第二代区块链,全账户数据结构
第二代区块链系统像现在金融系统一样,有完整的账户[6,7]。这是一个很大的进步,以太坊是第一个有全账本的区块链系统!值得嘉奖。
但它却带来了一个新问题。现在的金融系统,账户系统只管理账户,交易系统只负责交易,是两套不同系统,但在第二代区块链系统中,这个余额账户系统,既要做账户管理,又要做交易。如果这只是个小系统,还不成问题,但如果是大系统,需要扩展怎么办?
如果区块链系统只有账户管理系统,扩展性很容易。分片就像切蛋糕一样,将不同账户分到不同分片就好。比如说,有100个账户,每个分片上可以放20个账户,可将所有账户分成五片,放到五个服务器上。这样,每个账户都是独立的,和其他账户没有联系。想要查询账户,只需知道账户在哪个分片,然后找到那个分片,在其内进行处理。
切蛋糕,每片蛋糕独立,和其他片没有关联或者,如果区块链系统只有交易系统,就不能采用分片。否则会存在 藕断丝连 的问题,因为区块链里每个账户都可能和其他账户做交易,不管怎样分片,两个交易账户都可能处在不同分片上,这样两个账户之间的交易就是跨分片的交易,非常麻烦。
这种情况下,扩展性以增加交易系统或是代理(Agent)为主。
问题是第二代区块链既要管理账户又要做交易,应该如何扩展呢?
- 若用第一种方案,跨片交易会很多,成本高又麻烦。
- 而用第二种方案,账户管理就会出问题。为了处理一个客户的余额,需要在每个交易系统里面收集资料,再处理收集到的资料。
可能有人会说,可不可以有第三种扩展性技术能解决这一问题?也许有,但这第三种技术要解决两个扩展性:账户管理扩展和交易扩展,而这两种扩展方式是不一样的。
可能有人会说,他有分片技术可以使区块链性能提高很多,也有数据证明。但有没有把跨片交易的一致性成本放进去? 如果有,跨片交易成本一定高(因为跨片交易要多次共识),分片越多,跨片交易越多,成本越高。
账户和交易扩展方法不匹配问题就在这里,第二代区块链犯了软件工程的一个大忌,即一个系统应该只处理一个功能。如果一个系统处理两个功能,那更改性和扩展性一定会有问题。
这是46年前软件工程之父戴维·帕纳斯(David Parnas)提出的理论。帕纳斯提出的理论都非常简单,不懂的人会认为太简单了,没什么价值,但事实上大道至简,世界上最有价值的理论都是最简单的!根据帕纳斯的理论,第二代区块链系统的扩展性问题极其难解。
软件工程之父戴维·帕纳斯(David Parnas)教授软件工程之父David Parnas教授,提出许多非常简单但极有价值的理论,至今他的理论还在影响区块链的发展
如果不肯让一个系统只处理一个功能,根据帕纳斯的理论,设计这种系统就是自讨苦吃,更改性和扩展性都会很差。这就是今天第二代区块链遇到的困难,也是经过这么多年的研究,设计了各式各样的协议,问题还是没有解决的真正原因。
第二代区块链的困难就是既维持全账本但又做交易,所以存在跨片或跨链交易的问题。跨片或是跨链交易越多,问题越大。而要解决这问题,通常就是用中心化的方案。为什么要用中心化设计呢?因为跨片或是跨链交易成本很高,很难处理,用中心化系统处理比较方便。
比如2017年欧美提出一种异构网络(Heterogeneous networks),
- 欧洲提出的是Polkadot,
- 美国提出宇宙网络(Cosmos)。
上述异构区块链网络都是中心化的设计[8]。它们与以太坊一样,做成中心化的结构,这是这类系统的通病[9]。虽然中间链可以由一条分布式的链构成,但从整个系统的角度来看,这还是中心化的结构,就与区块链的设计初衷相悖[10,11]!当有许多参与链需要相互交易时,中间链的计算及通讯量就成了系统的瓶颈。
异构网络的特点是多参与链(Parachain)经中间链连接,需要维护三个一致性[12]:
- 一是每条链(参与链或中间链)需要维护自己的一致性;
- 二是中间链需要和每一条参与链维护彼此的一致性;
- 三是一条跨链交易需要由多条参与链以及中间链来维护。
现在很多单条的区块链因为共识算法复杂,都需要花费大量时间和算力,而无法提高效率。所以,要维护上面三个一致性,效率就更低了。因为每条链与每条链之间的一致性必须动态维护,而且第一个一致性必须与第二个一致性是有关联的,在做第二个一致性时,必须牵动第一个一致性。
例如,参与链A与中间链做共识,参与链B与中间链也做共识。中间链要保持一致性,就需要参与链A与参与链B同时和中间链维护一致性,这会使整个网络变慢。而且参与链越多,复杂性越高,而参与链事实上可能有成千上万条,这将使该设计达不到第二代互联网的需求。
如何处理这一问题?其实很容易,就是 让一个系统只具备一个功能。这就是第三代区块链系统,这是区块链的未来发展方向。
第三代区块链和第二代一样有完整账户,但是账户管理系统只处理账户,交易系统只处理交易。
这就是天德链系统分账户链(Account Blockchain,ABC)和交易链(Trading Blockchain,TBC)的原因[13,14]。
账户链可以用分片处理来解决扩展性,交易链用增加交易链来解决扩展性。这与现在的金融系统一样,而且与Cosmos等中心化的架构相比,天德链系统没有中心链的概念,这是区块链技术思想上一个突破。因为每个系统只做一个功能(符合帕纳斯原则),可以有扩展性,像切蛋糕一样。金丝猴模型和熊猫模型就是以这种原则完成的。
其中金丝猴模型,是完全分布式、多链网络,没有中心节点或者架构。如下图所示:
金丝猴模型金丝猴模型
- 红色的区域是参与链,可以有一个或多个金融机构,
- 而绿色的区域是中间链,也是一个或多个金融机构。
- 在两个参与链之间,可以有多条中间链,每两个机构之间都可以互相进行交易。
要听从沃斯的建议,采用正确的数据结构,并进行符合帕纳斯原则的设计,就可以有可扩展的分片技术。
参考阅读
[1]蔡维德:区块链技术重塑商业.
https://mp.weixin.qq.com/s/isfV5Sn64vEidKCaA8SNjg
[2]Index- Apache ZooKeeper - Apache Software Foundation.
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Index
[3]CentralizedApplication Configuration with Spring andApacheZooKeeper.https://www.infoq.com/presentations/spring-apache-zookeeper
[4]区块链:具有改变世界潜力的颠覆性新兴技术——专访国家“千人计划”特聘专家、北京航空航天大学教授蔡维德.http://www.1000thinktank.com/zxgz/16609.jhtml
[5]蔡维德, 郁莲. 区块链技术在金融领域的应用解析[J]. 金融电子化, 2016(5):57-60.
[6]蔡维德, 郁莲, 王荣,等. 基于区块链的应用系统开发方法研究[J]. 软件学报, 2017, 28(6):1474-1487.
[7]ReedF J &; B. ZooKeeper : Distributed ProcessCoordination[M]//ZooKeeper:Distributed Process Coordination. O'Reilly Media,Inc. 2013.
[8]Tsai W T, Blower R, Zhu Y, et al. A system viewoffinancialblockchains[C]//Service-Oriented System Engineering (SOSE), 2016IEEESymposiumon. IEEE, 2016: 450-457.
[9]Yu L, Tsai W T, Li G, et al. Smart-Contract ExecutionwithConcurrentBlock Building[C]//Service-Oriented System Engineering (SOSE),2017IEEESymposium on. IEEE, 2017: 160-167.
[10]Tsai W T, Bai X, Yu L. Design Issues in PermissionedBlockchainsforTrusted Computing[C]//Service-Oriented System Engineering (SOSE),2017IEEESymposium on. IEEE, 2017: 153-159.
[11]Kreps J, Narkhede N, Rao J. Kafka: A distributedmessaging systemforlog processing[C]//Proceedings of the NetDB. 2011: 1-7.
[12]Lamport L. Generalized consensus and paxos[R].TechnicalReportMSR-TR-2005-33, Microsoft Research, 2005.
[13]什么是IOTA?它和物联网、区块链有什么联系.
http://sh.qihoo.com/pc/94b36d686c1b0c585?sign=360_e39369d1
[14]区块链互联网.
https://mp.weixin.qq.com/s/7cTVxvGVPZeax0zuUAhWmg
[15]Richard Gendal Brown, ChiefTechnology Officer, R3,Introducing R3 Corda?: A Distributed LedgerDesignedfor Financial Services,http://www.r3cev.com/blog/2016/4/4/introducing-r3-corda-a-distributed-ledger-designed-for-financial-services
[16]向继志. 区块链:是“野蛮生长”,还是“笑傲江湖”?——专访区块链专家蔡维德[J]. 中国信息安全, 2018(3):96-99.
[17]蔡维德.熊猫-CBDC央行数字货币模型. https://mp.weixin.qq.com/s/VMF1R9q2D61-2R3neo6lGg.
[18]蔡维德.天德科技全球首创双链设计,引国际金融技术界关注.
https://mp.weixin.qq.com/s/J_dvTOXyrd-7jJHvSgb7kA.
[19]蔡维德,张弛,刘璨.区块链技术几个重要的坑(上).
https://mp.weixin.qq.com/s/t3myn-sUw4YnuQ3Xki6xBw
[20]蔡维德.真伪区块链——泰山沙盒知道.
https://mp.weixin.qq.com/s/7fgQ8ao0g6IK2HDQDfBSBw
[21]蔡维德.区块链教育实事求是,不教空气链.
https://mp.weixin.qq.com/s/Po0crZE0ttk2nHYa6KGK2w
[22]区块链教育
https://mp.weixin.qq.com/s/LKVKjuUlx2BhNFpKkelZTA
[23]亲,你的链是什么链?
https://mp.weixin.qq.com/s/aD8eJQ9IIBcvv9_OI_9HLw
[24]大风吹, 吹什么?
https://mp.weixin.qq.com/s/5LFdSVF1pWeTPte7VIWP5g
2018-01-16 关于区块链技术,最致命的5个坑! | 标题有误导
投资区块链的5个“大坑”
- 第一个大坑:乱投ICO
- 第二个大坑:什么币都买
- 第三个大坑:踏入山寨交易所
- 第四个大坑:听信“砖家”
- 第五个大坑:受情绪控制
网友评论