Skip to content

区块链及时指南

Huimao edited this page Aug 8, 2018 · 9 revisions

区块链的诞生

新事物往往不是凭空而生,其发展演化也不会一蹴而就。

认识一个从未见过的新事物,最重要的是要弄清楚它的来龙去脉。知其出身,方能知其所以然。

区块链(Blockchain)结构首次为人关注,来源于 2009 年初上线的比特币(Bitcoin)开源项目。然而,正如很多创新成果并非凭空出现,区块链实际上是记账科技发展到分布式场景下的天然结果。

本章将从数字货币的历史讲起,简要介绍区块链思想诞生的摇篮——比特币项目的诞生和发展过程,并初步剖析区块链技术带来的潜在的商业价值。通过阅读本章内容,读者可以了解到区块链技术出现的背景、原因,以及在诸多商业应用场景中的潜在价值。

TODO

记账科技的千年演化

如果说金融科技(Financial Technology,Fintech)是保障社会文明的重要支柱,那么记账科技(Ledger Technology,或账本科技)则是最核心的支柱基石。

无论是大到国际经济贸易,还是小到个人日常消费,都离不开记账这一看似普通、却不简单的操作。无论是资金的流转,还是资产的交易,实际上都是通过银行、交易机构中的账本记录来实现的。

可以毫不夸张地说,整个人类文明的发展历程,都伴随着账本科技的不断演化。 然而,关于账本科技的演化过程,目前还未见到相关研究,这也导致了人们对其认知的局限。特别近年来,以区块链为基础的分布式账本技术飞速崛起并得到快速应用,尽管如此,却很少有人能说清楚区块链到底因何而来,它解决了账本科技中的哪些问题,以及为何它能在金融领域产生如此巨大的影响。

笔者尝试按照科技创新的特点,将账本科技从古至今的演化过程大致分为四个阶段:简单账本、复式账本、数字化账本、分布式账本。各个阶段的时期和特点如下表所示。

阶段 时期 主要特点
阶段一:简单账本 约公元前3500年 ~ 15世纪 用原始的单式记账法(Single Entry Bookkeeping)
阶段二:复式账本 15世纪 ~ 20世纪中期 现代复式记账法(Double Entry Bookkeeping)出现和应用
阶段三:数字化账本 20 世纪中期 ~ 21 世纪初 物理媒介账本演化到数字化账本
阶段四:分布式账本 2009 年至今 以区块链为代表的分布式账本相关思想和技术出现

任何创新的出现都不是孤立的。账本科技的发展也与众多商业和科技成果的出现都息息相关,特别是商业贸易、计算技术、数据处理和分析手段等,如下图所示。

图1.4.1.1-账本科技的演化

下面笔者将具体讲述不同阶段中账本科技的发展状况。

阶段一:单式账本

在人类文明的早期,就已经有了记账的需求和活动。

最早的账本是“库辛(Kushim)泥板”,于 1929 年发掘于幼发拉底河下游右岸的伊拉克境内。据鉴定,库辛泥板属于公元前 3500 ~ 前 3000 年的乌鲁克城(Uruk,美索不达米亚西南部苏美尔人的古城),其上的文字记录内容为“37 个月收到了 29086 单位的大麦,并由库辛签核”。如下图所示。 图1.4.1.2-乌鲁克城的库辛泥板

库辛泥板是目前已知的最古老的人类文字记录。另外,包括古中国、古埃及、古希腊、古罗马等古代文明,也不乏跟账本相关的考古发现。 类似通过单条记录进行账目记录的方法,被称为“单式记账法”或“简单记账法”。

此后相当长的一段时间里(至今),人们都是通过简单记账法进行记账,无论是早期记录在泥板、绳索,还是后来的纸质账本,虽然所用的物理媒介不同,但核心方法都是一致的。

简单记账法自然易用,适合小规模的简易账务,但当面对大规模、特别是涉及到多个实体的记账需求时,就暴露出了不少问题。 首先是容易出错。以库辛账本为例,如果经常发生大麦入库和出库交易,当记录很多时,很难确认账本上记录跟实际情况是否匹配;即便发现不匹配,也很难找到是哪次记录出了问题。

其次是容易被篡改。由于账本只有一个,只能保管在个人手里,假设记账者不那么诚实正直,那么,他可以轻易地通过修改已有的单条记录来从仓库中盗取大麦。并且同样的情况下,几乎没办法知道账本是否被篡改过。随着商业活动的增多,交易规模增大和参与方的增多(特别是所有者和经营者的分离),简单记账技术已经越来越无法满足人们的需求。代表现代记账技术核心思想的“复式记账法”应运而生。

阶段二:复式账本

14 世纪的意大利,是世界贸易的门户,来自各国的商人、学者、艺术家、工匠齐聚于此,揭开了文艺复兴时期的序幕。此后长达三个世纪里,整个欧洲涌现出大量商业、文化、艺术、科技多方面的创新成果,对全世界都产生了深远的影响,例如:

  • 宗教改革:马丁·路德批判了当时基督教的诸多弊端,提出宗教不应有等级制度,即宗教面前人人平等,无需任何代理人或中间人。
  • 宇宙观形成:从地心说,到日心说,再到形成宇宙观,人类终于意识到自己并非所处世界的“中心”,同时任何位置也可以说是宇宙的“中心”,但这并不特别或重要。
  • 复式记账法出现:将单一中心记录分拆为多个科目,提高了篡改记录的难度,并且方便追查错误根源。

这些成果分属文化、天文和金融等不同领域,但在核心思想上却如此一致和谐,不得不令人惊讶。 关于复式记账法最早的文字记载出现于 1494 年意大利著名数学家卢卡·帕切奥利(Luca Pacioli)的著作中,演化到现在包括增减记账法、收付记账法、借贷记账法三种。目前最常用的是借贷记账法,它基于会记恒等式(资产=负债+权益),确保每笔交易都按照该恒等式进行记录。复式记账法一经出现便得到了广泛的应用,成为现代会计学的重要基础。

复式记账法原理并不复杂。由于交易的本质是某种价值从来源方转移到了目标方,因此可将每笔交易分别在借方(目标方)和贷方(来源方)科目进行记录,且借贷双方的总额应该时刻保持相等。

使用复式记账法,库辛如果再收到大麦入库,会分别在“库存大麦科目”和“应收大麦科目”上都进行记录,并且两个科目的数额是一致的。如果要做审核,可以分别对不同科目进行统计,最终所有科目的结果应该保持一致。可见,使用复式记账法能很容易的追踪交易的来龙去脉,而且可以容易验证账目是否记录正确。

复式记账法解决了单个记账人对本地账本可信的问题,但是仍然无法解决多交易方不同账本的可信和互通问题。 注:借(Debit):意味着债务,表示从其他方转移到本科目内;贷(Credit):意味着债权,代表从该科目转移出去。

阶段三:数字化账本

如果要评价 20 世纪最伟大的十大发明,数字计算机的出现一定会入围。它在物理世界之外开创了全新的赛博空间,为社会的方方面面都带来了巨大变化。早期的计算机,很重要的一个用途便是进行账目相关的统计处理。1951年,全世界第一台商用计算机 UNIVAC,即为美国人口普查局所使用。

使用计算机,不但可以提高大规模记账的效率,而且可以避免人工书写的错误。为了更好的 管理统计数据,人们发明了专门的数据库技术。从最早的网状数据库(Network Databases)和层次数据库(Hierarchical Databases),到开创意义的关系型数据库(Relational Database),再到互联网出现后大量新需求催生的大数据、NoSQL 等技术,根源上其实都与记账息息相关。

在这一阶段,记账方法本身的思想并没有太多创新,但由于数字媒介的出现,使得账本的规模、记账处理的速度、账本的复杂度,都有了天翻地覆的提升。而这直接为后来包括电子商务、互联网金融在内的多种数字化服务奠定了核心技术基础。

注:关于 NoSQL 的理解曾发生数次变化:Not SQL!(不支持 SQL!);No,SQL! (不,还得要 SQL!);Not Only SQL(不仅仅是 SQL!)。

阶段四:分布式账本

复式记账法里虽然记录了每笔交易的来龙去脉、不宜错误、也十分方便统计,但仍然是中心化的模式。

中心化模式的账本结构方便使用,但在很多情况下仍然存在不少问题:账本掌握在个体手中,一旦出现数据丢失则无法找回;同时涉及到多个交易方的情况下,需要分别维护各自的账本,容易出现不一致、对账也较困难的情况。

由此可以很自然的想到,可以借助分布式系统的思想来实现分布式账本(Distributed Ledger):由交易多方一起来共同维护同一个分布式账本;打通交易在各个阶段的来龙去脉;凭借分布式技术,进一步提高记账的效率和可靠性。但在分布式的情况下,如何避免参与方恶意篡改或破坏记录?如何决定该由谁来将交易记录写到账本中?这些问题一直没有得到很好的解答。

直到 2009 年 1 月,基于区块链结构的比特币网络悄然问世,此后数年里,在分布式的场景下稳定支持了大量的转账业务。这让人们开始认识到,区块链这一极为简洁的数据结构,居然恰好解决了分布式记账的基本需求。目前,基于区块链结构的分布式账本解决方案,也往往被简称为区块链技术。

从 2014 年开始,金融、科技领域的专家们越来越关注区块链相关的技术,尝试研发基于分布式账本技术的解决方案。

2015 年底,三十家金融、科技领域的巨头企业们(包括 IBM、Accenture、Intel、 J.P.Morgan、DTCC、SWIFT、Cisco 等)联合成立了超级账本(Hyperledger)项目,由 Linux 基金会进行管理,遵循 Apache v2 许可,致力于打造一个开源、满足企业级应用的分布式账本科技生态。目前围绕企业分布式账本的核心诉求,已经发展到 9 大顶级项目,超过 200 名来自全球的企业会员,并支撑了众多的探索和落地案例。目前,基于分布式账本技术的各种创新方案已经在包括金融、供应链、医疗等领域得到了不少落地应用。但笔者认为,类比互联网科技的发展过程,目前分布式账本技术还处于发展的初期,还存在不少尚待解决的问题,包括权限管理、隐私保护、性能优化和互操作性等。在这些方面的科技突破,可以极大拓展分布式账本技术的应用场景和形态,真正实现传递“价值”的商业互联网络。

注:超级账本项目中来自中国的企业会员已经超过 40 家,包括百度、腾讯、华为、万达等科技巨头。

注:互联网自诞生之日起用了十余年时间才从内部的 ARPA 网络演化到互联可通;又用了十余年时间才打造了包括 TCP/IP 等在内的基础架构和协议;在其三十岁生日时才可以开放接入,开始支持商业应用场景。

账本科技的未来

账本科技经历了数千年的演化,整体发展趋势由简单到复杂、由粗糙到精细、由中心化到分布式,这与运行在其上的业务需求的不断变化密不可分。伴随着社会的发展,大规模、高安全、易审计将始终是账本科技应用中最受人们关注的特性。 笔者相信,随着社会文明特别是商业活动的进一步的发展和成熟,分布式账本科技的需求将变得更加普遍和强烈。分布式账本科技自身也将变得更加成熟和可靠。

分布式记账与区块链

从分布式记账问题说起

分布式记账问题由来已久。自以电子计算机为主要记账手段的数字化账本诞生以来,商业活动参与者首先要寻找一个多方均能信任的第三方来记账,确保交易记录的准确。然而,随着商业活动的规模越来越大,商业过程愈加动态和复杂,很多场景下难以找到符合要求的第三方记账方(例如供应链领域动辄涉及来自多个行业的数百家参与企业)。这就需要交易各方探讨在多方分布式场景下进行协同记账的可能性。

实际上,可以很容易设计出一个简单粗暴的分布式记账结构,如下图所示方案(一)。多方均允许对账本进行任意读写,一旦发生新的交易即追加到账本上。这种情况下,如果参与多方均诚实可靠,则该方案可以正常工作;但是一旦有参与方恶意篡改已发生过的记录,则无法确保账本记录的正确性。 图 1.4.2.1 - 方案(一):简单分布式记账结构

为了防止有参与者对交易记录进行篡改,需要引入一定的验证机制。很自然地,可以借鉴信 息安全领域的数字摘要(Digital Digest)技术,从而改进为方案(二)。每次当有新的交易记录被追加到账本上时,参与各方可以使用 Hash 算法对完整的交易历史计算数字摘要,获取当前交易历史的“指纹”。此后任意时刻,每个参与方都可以对交易历史重新计算数字摘要,一旦发现指纹不匹配,则说明交易记录被篡改过。同时,通过追踪指纹改变位置,可以定位到被篡改的交易记录。

图 1.4.2.2 - 方案(二):带有数字摘要验证的分布式记账 方案(二)可以解决账本记录防篡改的问题,然而在实际生产应用时,仍存在较大缺陷。由于每次追加新的交易记录时需要从头对所有的历史数据计算数字摘要,当已存在大量交易历史时,数字摘要计算成本将变得很高。而且,随着新交易的发生,计算耗费将越来越大,系统扩展性很差。 为了解决可扩展性的问题,需要进一步改进为方案(三)。注意到任何一次摘要实际上已经确保了从头开始到摘要位置的完整历史,当新的交易发生后,实际上需要进行增加验证的只是新的交易,即增量部分。因此,计算摘要的过程可以改进为对旧的摘要值再加上新的交易内容进行验证。这样就既解决了防篡改问题,又解决了可扩展性问题。 图 1.4.2.3 - 方案(三):带有数字摘要验证的可扩展的分布式记账

实际上,读者可能已经注意到,方案(三)中的账本结构正是一个区块链结构(如下图所示)。可见,从分布式记账的基本问题出发,可以自然推导出区块链结构,这也说明了在分布式场景下的记账问题中,区块链结构是一个简洁有效的天然答案。

图 1.4.2.4 - 区块链结构

区块链的三次热潮

从比特币诞生之日(2009 年 1 月)算起,区块链已在全世界掀起了三次热潮。 图 1.4.2.5 - 区块链的三次热潮

第一波热潮出现在 2013 年左右。比特币项目上线后,很长一段时间里并未获得太多关注。直到比特币价格发生暴涨,各种加密货币项目纷纷出现,隐藏在其后的区块链结构才首次引发大家的兴趣。2014 年起,区块链这个术语开始频繁出现,但更多集中在加密货币和相关技术领域;

第二波热潮出现在 2016 年前后。以区块链为基础的分布式账本技术被证实在众多商业领域存在应用价值。尤其 2015 年 10 月《经济学人》封面文章《信任机器》中,正式指出区块链在构建分布式账本平台中的重要作用,更多实验性应用出现。下半年更是出现了“初始代币发行 (Initial Coin Offering,ICO)”等新型融资募集形式。这一时期,区块链技术自身也有了突破,首个大规模公有智能合约引擎——以太坊项目正式上线;首个面向企业应用的联盟分布式账本——超级账本项目,在众多企业巨头的支持下也正式成立。

随着更多商业项目开始落地,从 2017 年开始至今,众多互联网领域的资本开始关注区块链领域,人才缺口持续加大,区块链已经俨然成为继人工智能后的又一资本热点。分析这三次热潮可以看出,每一次热潮的出现都与金融行业对区块链技术的深化应用密切相关。这也表明金融行业对信息科技成果始终保持了较高的敏感度。

分布式记账的重要性

分布式记账问题为何重要?可以类比互联网出现后对社会带来的重大影响。

互联网是人类历史上最大的分布式互联系统。作为信息社会的基础设施,它很好地解决了传递信息的问题。然而,由于早期设计上的缺陷,互联网无法确保所传递信息的可靠性,这大大制约了人们利用互联网进行大规模协作的能力。而以区块链为基础的分布式账本科技则可能解决传递可信信息的问题。这意味着基于分布式账本科技的未来商业网络,将成为新一代的文明基础设施——大规模的协作网络。

分布式账本科技的核心价值在于为未来多方协同网络提供可信基础。区块链引发的记账科技 的演进,将促使商业协作和组织形态发生变革。甚至世界经济论坛执行主席 Klaus Schwab 认为 “区块链是(继蒸汽机、电气化、计算机之后的)第四次工业革命的核心成果 (Blockchains are at the heart of the Fourth Industrial Revolution)”。

分布式账本的现状与未来

类比互联网,从科技发展的一般规律而言,笔者认为,分布式账本科技仍处于发展早期,而商业应用已经在加速落地中,如下表所示。

阶段 互联网 区块链 阶段
1974~1983 ARPANet内部试验网络 比特币试验网络 2009~2014
1984~1993 TCP/IP基础协议确立,基础架构完成 基础协议和框架探索,出现超级账本、以太坊等开源项目 2014~2019?
1990s~2000s HTTP应用协议出现;互联网正式进入商用领域 商业应用的加速落地,仍未出现杀手级应用 2018~?
2000s~? 桌面互联网、移动互联网、物联网 分布式协同商业网络 ?

互联网在发展过程中,先后经历了试验网络、基础架构和协议、商业应用、大规模普及等四个阶段。其中第二个阶段尤为关键,TCP/IP 协议取代了已有的网络控制协议,成为基础协议栈的核心,这为后来互联网扩展到全球规模奠定了扎实的技术基础。

作为一套前所未有的大规模协同网络,分布式账本网络的发展很大可能也要经历这四个阶段的演化。当然,站在前人肩膀上,无论是演化速度还是决策效率,都会有不小的优势。客观来看,虽然超级账本、以太坊等开源项目在基础协议和框架方面进行了诸多探索,并取得了重要成果,但在多账本互联、与已有系统的互操作性等方面还存在不足,商业应用的广度和深度仍需实践的考验。

但毫无疑问,分布式账本科技已经成为金融科技领域的重要创新成果,带来的效率提升必将为金融系统创造新的发展机遇。而互联网之后的商业协同网络,必将进一步推动整个人类文明的进步。

站在前人肩膀上的比特币

加密货币的历史

随着上世纪 50 年代计算机的出现和发展(ENIAC,1946 年),人们就尝试将信息技术应用到支付过程以提高效率。除了作为电子支付手段的银行卡,自 80 年代起,利用密码学手段构建的数字货币(加密货币)也开始成为研究的热门。

加密货币的发展前后经历了近 30 年的演化,比较典型的成果包括 e-Cash、HashCash、Bmoney 等。

1983 年,时任加州大学圣塔芭芭拉分校教授的 David Chaum 最早在论文《Blind Signature for Untraceable Payments》 中提出了 e-Cash,并于 1989 年创建了 DigiCash 公司。ecash 系统是首个尝试解决不可追踪(untraceable)问题的匿名数字货币,基于 David Chaum 自己发明的盲签名技术,曾被应用于部分银行的小额支付系统中。ecash 虽然不可追踪,但仍依赖中心化机构(银行)的协助,同期也由于信用卡体系的快速崛起,DigiCash 公司最终于 1998 年宣告破产。鉴于 David Chaum 在数字货币研究领域发展早期的贡献,有人认为他是“数字货币之父”。

1997 年,Adam Back 发明了 HashCash,来解决邮件系统和博客网站中“拒绝服务攻击 (Deny of Service,DoS)”攻击问题。Hashcash 首次提出用工作量证明(Proof of Work, PoW)机制来获取额度,该机制后来被后续数字货币技术所采用。

1998 年,Wei Dai 提出了 B-money 的设计,这是首个不依赖中心化机构的匿名数字货币方案。B-money 引入工作量证明的思想来解决数字货币产生的问题,指出任何人都可以发行一定量的货币,只要他可以给出某个复杂计算问题(未说明是用 Hash 计算)的答案,货币的发行量将跟问题的计算代价成正比。并且,任何人(或部分参与者)都可以维护一套账本,构成一套 P2P 网络,使用者在网络内通过对带签名的交易消息的广播来实现转账的确认。Bmoney 是去中心化数字货币领域里程碑式的成果,为后面比特币的出现奠定了基础。从设计上看,B-money 已经很好的解决了货币发行的问题,但是未能解决“双花”问题,也未能指出如何有效、安全地维护账本,最终未能实现。

这些数字货币方案要么依赖于一个中心化的管理机构,要么更多偏重理论层面的设计。直到比特币的出现,采用了区块链结构来维护账本,并引入经济博弈机制,充分利用现代密码学成果,首次从实践意义上实现了一套去中心化的数字货币系统。也正因为比特币的影响力巨大,现在谈到数字货币往往是指类似基于密码学原理的加密货币(crypto currency)。

比特币依托的分布式网络无需任何管理机构,通过密码学原理来确保交易的正确进行;另一方面,比特币的价值和发行并未有中央机构进行调控,而是通过计算力进行背书,通过经济博弈进行自动调整。这也促使人们开始思考,在数字化的世界中,应该如何发行货币,以及如何衡量价值。目前,除了像以比特币这样完全丢弃已有体系的分布式技术之外,仍然存在不少中心化代理模式的数字货币机制,包括类似 paypal 这样的平台。通过跟已有的支付系统合作,可以更高效率地代理完成交易。

现在还很难讲哪种模式将会成为日后的主流,未来甚至还可能出现更先进的技术。但毫无疑问,这些成果都为后来的数字货币设计提供了极具价值的参考;而站在前人肩膀上的比特币,必将在人类货币史上留下难以磨灭的印记。

比特币的诞生

2008 年 10 月 31 日(东部时间),星期五下午 2 点 10 分,化名 Satoshi Nakamoto (中本聪) 的人在 metzdowd 密码学邮件列表 中提出了比特币(Bitcoin)的设计白皮书《Bitcoin: A Peer-to-Peer Electronic Cash System》,并在 2009 年公开了最初的实现代码。首个比特币是 UTC 时间 2009 年 1 月 3 日 18:15:05 生成。但比特币真正流行开来,被人们所关注则是至少两年以后了。

作为开源项目,比特币很快吸引了大量开发者的加入,目前的官方网站 bitcoin.org,提供了比特币相关的代码实现和各种工具软件 除了精妙的设计理念外,比特币最为人津津乐道地一点,是发明人“中本聪”到目前为止尚无法确认真实身份。也有人推测,“中本聪”背后可能不止一个人,而是一个团队。这些猜测都为比特币项目带来了不少传奇色彩。

比特币的意义和价值

直到今天,关于比特币的话题仍充满了不少争议。但大部分人应该都会认可,比特币是数字货币历史上,甚至整个金融历史上一次了不起的社会学实验。

比特币网络在 2009 年上线以来,在无人管理的情况下,已经在全球范围内 7*24 小时运行超过 8 年时间,成功处理了几百万笔交易,甚至支持过单笔 1.5 亿美金的交易。更为难得的是,比特币网络从未出现过重大的系统故障。

比特币网络目前由数千个核心节点参与构成,不需要任何中心化的支持机构参与,纯靠分布式机制支持了稳定上升的交易量。

比特币首次真正从实践意义上实现了安全可靠的去中心化数字货币机制,这也是它受到无数金融科技从业者热捧的根本原因。

作为一种概念货币,比特币主要是希望解决已有货币系统面临的几个核心问题:

  • 被掌控在单一机构手中,容易被攻击。自身的价值无法保证,容易出现波动。
  • 无法匿名化交易,不够隐私。在前文中也探讨过,要实现一套数字货币机制,最关键的还是要建立一套完善的交易记录系统,以及形成一套合理的货币发行机制。

这个交易记录系统要能准确、公正地记录发生过的每一笔交易,并且无法被恶意篡改。对比已有的银行系统,可以看出,现有的银行机制作为金融交易的第三方中介机构,有代价地提供了交易记录服务。如果参与交易的多方都完全相信银行的记录(数据库),就不存在信任问题。可是如果是更大范围(甚至跨多家银行)进行流通的货币呢?哪家银行的系统能提供完全可靠不中断的服务呢?唯一可能的方案是一套分布式账本。这个账本可以被所有用户自由访问,而且任何个体都无法对所记录的数据进行恶意篡改和控制。为了实现这样一个前所未有的账本系统,比特币网络巧妙地设计了区块链结构,提供了可靠、无法被恶意篡改的数字货币账本功能。

比特币网络中,货币的发行是通过比特币协议来规定的。货币总量受到控制,发行速度随时间自动进行调整。既然总量一定,那么单个比特币的价值会随着越来越多的经济实体认可比特币而水涨船高。发行速度的自动调整则避免出现通胀或者滞涨的情况。

另一方面,也要冷静地看到,作为社会学实验,比特币已经获得了巨大的成功,特别是基于区块链技术,已经出现了许多颇有价值的商业场景和创新技术。但这绝不意味着比特币自身必然能够进入到未来的商业体系中。

更有价值的区块链技术

如果说比特币是影响力巨大的社会学实验,那么从比特币核心设计中提炼出来的区块链技术,则让大家看到了塑造更高效、更安全的未来商业网络的可能。

2014 年开始,比特币背后的区块链技术开始逐渐受到大家关注,并进一步引发了分布式记账本(Distributed Ledger)技术的革新浪潮。

实际上,人们很早就意识到,记账相关的技术,对于资产(包括有形资产和无形资产)的管理(包括所有权和流通)十分关键;而去中心化或多中心化的分布式记账本技术,对于当前开放、多维化的商业模式意义重大。区块链的思想和结构,正是实现这种分布式记账本系统的一种极具可行潜力的技术。

区块链技术现在已经脱离开比特币网络自身,在包括金融、贸易、征信、物联网、共享经济等诸多领域崭露头角。现在,除非特别指出是“比特币区块链”,否则当人们提到“区块链技术”进行探讨时,往往所指已经与比特币没有什么必然联系了。

潜在的商业价值

商业行为的典型模式为:交易的多方通过协商和执行合约,完成交易过程。区块链擅长的正是如何在多方之间达成合约,并确保合约的顺利执行。

根据类别和应用场景不同,区块链所体现的特点和价值也不同。

从技术角度,一般认为,区块链具有如下特点:

  • 分布式容错性:分布式网络极其鲁棒,能够容忍部分节点的异常状态;不可篡改性:一致提交后的数据会一直存在,不可被销毁或修改;
  • 隐私保护性:密码学保证了数据隐私,即便数据泄露,也无法解析。

随之带来的业务特性将可能包括:

  • 可信任性:区块链技术可以提供天然可信的分布式账本平台,不需要额外第三方中介机构参与;
  • 降低成本:跟传统技术相比,区块链技术可能带来更短的时间、更少的人力,降低维护成本;
  • 增强安全:区块链技术将有利于安全、可靠的审计管理和账目清算,减少犯罪风险。

区块链并非凭空诞生的新技术,更像是技术演化到一定程度突破应用阈值后的产物,因此,其商业应用场景也跟促生其出现的环境息息相关。对于基于数字方式的交易行为,区块链技术能潜在地降低交易成本、加快交易速度,同时能提高安全性。笔者认为,能否最终带来成本的降低,将是一项技术能否被深入应用的关键。

所有跟信息、价值(包括货币、证券、专利、版权、数字商品、实际物品等)、信用等相关的交换过程,都将可能从区块链技术中得到启发或直接受益。但这个过程绝不是一蹴而就的,可能需要较长时间的探索和论证。具体的商业应用案例可以参考本书后续的应用场景章节。

图 1.4.4.1 - 区块链影响的交换过程

目前,区块链技术已经得到了众多金融机构和商业公司的关注,包括大量金融界和信息技术界的领军性企业和团体。典型企业组织如下所列(排名不分先后)。

  • Visa
  • 国际组织美国纳斯达克证券交易所(Nasdaq)
  • 高盛投资银行(Goldman Sachs)
  • 花旗银行(Citi Bank)
  • 美国富国银行(Wells Fargo)
  • 中国人民银行
  • 中国浦发银行
  • 日本三菱日联金融集团
  • 瑞士联合银行
  • 德意志银行
  • 美國的證券集中保管結算公司
  • (DTCC)全球同业银行金融电讯协会
  • (SWIFT)国际商业机器公司
  • (IBM)
  • 微软(Microsoft)
  • 英特尔(Intel)
  • 思科(Cisco)
  • 埃森哲(Accenture)

Gartner 在 2017 年的报告《Forecast: Blockchain Business Value, Worldwide, 2017-2030》 中预测:“区块链带来的商业价值在 2025 年将超过 17.6 亿美金,2030 年将超过 3.1 万亿美 金(the business value-add of blockchain will grow to slightly more than $176 billion by 2025, and then it will exceed $3.1 trillion by 2030)”。

本书将在后续章节中通过具体的案例来讲解区块链的多个商业应用场景。

本章小结

区块链思想诞生于数字货币长达三十多年的发展过程中,它支持了首个自带信任、防篡改的分布式记录系统——比特币网络。这也第一次让大家意识到,除了互联网这样的尽力而为 (不保证可信)的基础设施外,基于区块链技术还将可能打造一个实现彼此信任的基础网络设施。

当然,从应用角度讲,比特币也只是基于区块链技术的一种金融应用。区块链技术其实还能带来更通用的计算能力和商业价值。本书后续章节将介绍更多的商业应用案例,并介绍开源界打造的更多区块链平台项目,包括以太坊和超级账本 等项目。这些开源项目加速释放了区块链技术的威力,为更多更复杂的区块链应用场景提供了技术支持。

核心技术概览

运用之妙夺造化,存乎一心胜天工。

跨境商贸合作中签订的合同,怎么确保对方能严格遵守和及时执行?酒店宣称刚打捞上来的三文鱼,怎么追踪捕捞和运输过程中的时间和卫生?现代数字世界里,怎么证明你是谁?怎么证明某个资产属于你?经典囚徒困境中的两个人,怎样才能达成利益的最大化?宇宙不同文明之间的“黑暗森林”猜疑链,有没有可能被彻底打破?这些看似很难解决的问题,在区块链的世界里已经有了初步的答案。

本章将带领大家探索区块链的核心技术,包括其定义与原理、关键的问题等,还将探讨区块链技术的演化,并对未来发展的趋势进行展望。最后,对一些常见的认识误区进行了澄清。 

定义与原理

定义

区块链技术自身仍然在飞速发展中,目前相关规范和标准还在进一步成熟中。

公认的最早关于区块链的描述性文献是中本聪所撰写的 《比特币:一种点对点的电子现金系统》,但该文献重点在于讨论比特币系统,实际上并没有明确提出区块链的术语。在其中,区块和链被描述为用于记录比特币交易账目历史的数据结构。

另外,Wikipedia 上给出的定义中,将区块链类比为一种分布式数据库技术,通过维护数据块的链式结构,可以维持持续增长的、不可篡改的数据记录。笔者认为,讨论区块链可以从狭义和广义两个层面来看待。

狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求。

广义上,区块链还指代基于区块链结构实现的分布式记账技术,还包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。 区块链技术最早的应用出现在比特币项目中。作为比特币背后的分布式记账平台,在无集中式管理的情况下,比特币网络稳定运行了八年时间,支持了海量的交易记录,并且从未出现严重的漏洞,这些都与区块链结构的巧妙是分不开的。

基本原理

区块链的基本原理理解起来并不复杂。

首先包括三个基本概念:

  • 交易(Transaction):一次对账本的操作,导致账本状态的一次改变,如添加一条转账记录;
  • 区块(Block):记录一段时间内发生的所有交易和状态结果,是对当前账本状态的一次共识;
  • 链(Chain):由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。 如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中交易导致状态改变的结果进行确认。

在实现上,首先假设存在一个分布式的数据记录账本,这个账本只允许添加、不允许删除。 账本底层的基本结构是一个线性的链表,这也是其名字“区块链”的来源。链表由一个个“区 块”串联组成(如下图所示),后继区块记录前导区块的哈希(Hash)值。新的数据要加入,

必须放到一个新的区块中。而这个块(以及块里的交易)是否合法,可以通过计算哈希值的方式快速检验出来。任意维护节点都可以提议一个新的合法区块,然而必须经过一定的共识机制来对最终选择的区块达成一致。 图 1.5.1.1 - 区块链结构示例

以比特币为例理解区块链工作过程

具体以比特币网络为例,来看其中如何使用了区块链技术。

首先,比特币客户端发起一项交易,广播到比特币网络中并等待确认。网络中的节点会将一些收到的等待确认的交易记录打包在一起(此外还要包括前一个区块头部的哈希值等信 息),组成一个候选区块。然后,试图找到一个 nonce 串(随机串)放到区块里,使得候选区块的哈希结果满足一定条件(比如小于某个值)。这个nonce 串的查找需要一定的时间进行计算尝试。

一旦节点算出来满足条件的 nonce 串,这个区块在格式上就被认为是“合法”了,就可以尝试在网络中将它广播出去。其它节点收到候选区块,进行验证,发现确实符合约定条件了,就承认这个区块是一个合法的新区块,并添加到自己维护的区块链上。当大部分节点都将区块添加到自己维护的区块链结构上时,该区块被网络接受,区块中所包括的交易也就得到确认。

当然,在实现上还会有很多额外的细节。这里面比较关键的步骤有两个,一个是完成对一批交易的共识(创建区块结构);一个是新的区块添加到区块链结构上,被大家认可,确保未来无法被篡改。

比特币的这种基于算力寻找 nonce 串的共识机制被称为工作量证明(Proof of Work, PoW)。目前,要让哈希结果满足一定条件,并无已知的快速启发式算法,只能进行逐个尝试的暴力计算。尝试的次数越多(工作量越大),算出来的概率越大。

通过调节对哈希结果的限制,比特币网络控制平均约 10 分钟产生一个合法区块。算出区块的节点将得到区块中所有交易的管理费和协议固定发放的奖励费(目前是 12.5 比特币,每四年减半)。这个计算新区块的过程,即俗称的“挖矿”。

读者可能会关心,比特币网络是任何人都可以加入的,如果网络中存在恶意节点,能否进行恶意操作来对区块链中记录进行篡改,从而破坏整个比特币网络系统。比如最简单的,故意不承认收到的别人产生的合法候选区块,或者干脆拒绝来自其它节点的交易等。实际上,因为比特币网络中存在大量(据估计数千个)的维护节点,而且大部分节点都是正常工作的,默认都只承认所看到的最长的链结构。只要网络中不存在超过一半的节点提前勾结一起采取恶意行动,则最长的链将很大概率上成为最终合法的链。而且随着时间增加,这个概率会越来越大。例如,经过 6 个区块生成后,即便有一半的节点联合起来想颠覆被确认的结果,其概率也仅为 (1/2)^6 ≈ 1.6%,即低于 1/60 的可能性。

当然,如果整个网络中大多数的节点都联合起来作恶,可以导致整个系统无法正常工作。要做到这一点,往往意味着付出很大的代价,跟通过作恶得到的收益相比,得不偿失。

注:区块链结构,与 Git 版本管理的有向无环图数据结构,在设计上有异曲同工之妙。 

技术的演化与分类

区块链技术自比特币网络设计中被大家发掘关注,从最初服务数字货币系统,到今天在分布式账本场景下发挥着越来越大的技术潜力。

区块链的演化

比特币区块链已经支持了简单的脚本计算,但仅限于数字货币相关的处理。除了支持数字货 币外,还可以将区块链上执行的处理过程进一步泛化,即提供智能合约(Smart Contract)。 智能合约可以提供除了货币交易功能外更灵活的合约功能,执行更为复杂的操作。 这样扩展之后的区块链,已经超越了单纯数据记录的功能了,实际上带有点“智能计算”的意味了;更进一步地,还可以为区块链加入权限管理,高级编程语言支持等,实现更强大的、支持更多商用场景的分布式账本。

从计算特点上,可以看到现有区块链技术的三种典型演化场景:

场景 功能 智能合约 一致性 权限 类型 性能 编程语言 代表
公信的数字货币 记账功能 不带有或较弱 PoW 公有链 较低 简单脚本 比特币网络
公信的交易处理 智能合约 图灵完备 PoW、PoS 公有链 受限 特定语言 以太坊网络
带权限的分布式账本处理 商业处理 多种语言,图灵完备 包括CFT、BFT 在内的多种机制,可插拔 支持 联盟链 可扩展 高级编程语言 超级账本

区块链与分布式记账

图 1.5.2.1 - 古老的账本

记账技术历史悠久,现代复式记账系统(Double Entry Bookkeeping)是由意大利数学家卢卡 ·帕西奥利 1494 年在《Summa de arithmetica, geometrica, proportioni et proportionalità》一书中最早制定。复式记账法对每一笔账目同时记录来源和去向,首次将对账验证功能引入记账过程,提升了记账过程的可靠性。

从这个角度来看,区块链是首个自带对账功能的数字记账技术实现。

更广泛地,区块链属于一种去中心化的记录技术。参与到系统上的节点,可能不属于同一组织,彼此无需信任;区块链数据由所有节点共同维护,每个维护节点都能复制获得一份完整或部分记录的拷贝。

跟传统的记账技术相比,基于区块链的分布式账本应该包括如下特点:

  • 维护一条不断增长的链,只可能添加记录,而发生过的记录都不可篡改;
  • 去中心化,或者说多中心化,无需集中的控制而能达成共识,实现上尽量分布式;通过密码学的机制来确保交易无法被抵赖和破坏,并尽量保护用户信息和记录的隐私性。

分类

根据参与者的不同,可以分为公有(Public)链、联盟(Consortium)链和私有(Private)链。

公有链,顾名思义,任何人都可以参与使用和维护,典型的如比特币区块链,信息是完全公开的。

如果进一步引入许可机制,可以实现私有链和联盟链两种类型。

私有链,由集中管理者进行管理限制,只有内部少数人可以使用,信息不公开。联盟链则介于两者之间,由若干组织一起合作维护一条区块链,该区块链的使用必须是带有权限的限制访问,相关信息会得到保护,典型如供应链机构或银行联盟。

目前来看,公有链更容易吸引市场和媒体的眼球,但更多的商业价值会在联盟链和私有链上落地。

根据使用目的和场景的不同,又可以分为以数字货币为目的的货币链,以记录产权为目的的产权链,以众筹为目的的众筹链等……,也有不局限特定应用场景的通用链。

现有大部分区块链实现都至少包括了网络层、共识层、智能合约和应用层等结构,联盟链实现往往还会引入一定的权限管理机制。 

关键问题和挑战

从技术角度讲,区块链所涉及到的领域比较繁杂,包括分布式系统、存储、密码学、心理学、经济学、博弈论、控制论、网络协议等,这也就意味着大量工程实践上的技术挑战。

下面列出了目前业内关注较多的一些技术话题。

抗抵赖与隐私保护

怎么防止交易记录被篡改?怎么证明交易双方的身份?怎么保护交易双方的隐私?

密码学的发展,为解决这些问题提供了不少手段。传统方案包括 Hash 算法,加解密算法,数字证书和签名(盲签名、环签名)等。

随着区块链技术的应用,新出现的需求将刺激密码学的进一步发展,包括更高效的随机数产生、更高强度的加密、更快速的加解密处理等。同时,量子计算等新技术的出现,也会带来更多的挑战,例如,RSA 算法等目前商用的加密算法,在未来可能无法提供足够的安全性。

能否满足这些新的需求,将依赖于数学科学的进一步发展和新一代计算技术的突破。

分布式共识

这是个经典的技术难题,学术界和业界都已有大量的研究成果(包括 Paxos、拜占庭系列算法等)。

问题的核心在于如何解决某个变更在分布式网络中得到一致的执行结果,是被参与多方都承认的,同时这个信息是被确定的,不可推翻的。

该问题在公开匿名场景下和带权限管理的场景下需求差异较大,从而导致了基于概率的算法和确定性算法两类思想。 最初,比特币区块链考虑的是公开匿名场景下的最坏保证。通过引入了“工作量证明”(Proof of Work)策略来规避少数人的恶意行为,并通过概率模型保证最后参与方共识到最长链。算法在核心思想上是基于经济利益的博弈,让恶意破坏的参与者损失经济利益,从而保证大部分人的合作。同时,确认必须经过多个区块的生成之后达成,从概率上进行保证。这类算法的主要问题在于效率的低下。类似算法,还有以权益为抵押的 PoS、DPoS 和 Casper 等。

后来更多的区块链技术(如超级账本)在带权限管理的场景下,开始考虑支持更多的确定性的共识机制,包括经典的拜占庭算法等,可以解决快速确认的问题。

共识问题在很长一段时间内都将是极具学术价值的研究热点,核心的指标将包括容错的节点比例、决策收敛速度、出错后的恢复、动态特性等。PoW 等基于概率的系列算法理论上允许少于一半的不合作节点,PBFT 等确定性算法理论上则允许不超过 1/3 的不合作节点。

交易性能

虽然一般说来,区块链不适用于高频交易的场景,但由于金融系统的需求,业界目前十分关心如何提高区块链系统交易的吞吐量,同时降低交易的确认延迟。

目前,公开的比特币区块链只能支持平均每秒约 7 笔的吞吐量,一般认为对于大额交易来说,安全的交易确认时间为一个小时左右。以太坊区块链的吞吐量略高一些,但交易性能也被认为是较大的瓶颈。

注:实际上,小额交易只要确认被广播到网络中并带有合适的交易服务费用,即有较大概率被最终打包。

区块链系统跟传统分布式系统不同,其处理性能很难通过单纯增加节点数来进行横向扩展。 实际上,传统区块链系统的性能,在很大程度上取决于单个节点的处理能力。高性能、安全、稳定性、硬件辅助加解密能力,都将是考察节点性能的核心要素。

这种场景下,为了提高处理性能,一方面可以提升单个节点的性能(如采用高配置的硬 件),同时设计优化的策略和算法,提高性能;另外一方面试图将大量高频的交易放到链外来,只用区块链记录最终交易信息,如比特币社区提出的 闪电网络 等设计。类似地,侧链 (side chain)、影子链(shadow chain)等思路在当前阶段也有一定的借鉴意义。类似设计可以将交易性能提升 1~2 个数量级。

此外,在联盟链的场景下,参与多方存在一定的信任前提和利益约束,可以采取更优化的设计,换来性能的提升。以超级账本 Fabric 项目为例,在普通虚拟机配置下,单客户端每秒可以达到数百次(Transactions per second,tps)的交易吞吐量;在有一定工程优化或硬件加速情况下可以达到每秒数千次的吞吐量。

客观地说,目前开源区块链系统已经可以满足不少应用场景的性能需求,但离大规模交易系统的每秒数万笔的吞吐性能还有较大差距。

注:据公开的数据,VISA 系统的处理均值为 2,000 tps,峰值为 56,000 tps;某金融支付系统 的处理峰值超过了 85,000 tps;某大型证券交易所号称的处理均(峰)值在 80,000 tps 左右。

扩展性

常见的分布式系统,可以通过横向增加节点来扩展整个系统的处理能力。

对于区块链网络系统来说,根据共识机制的不同,这个问题往往并非那么简单。例如,对于比特币和以太坊区块链而言,网络中每个参与维护的核心节点都要保持一份完整的存储,并且进行智能合约的处理。此时,整个网络的总存储和计算能力,取决于单个节点的能力。甚至当网络中节点数过多时,可能会因为一致性的达成过程延迟降低整个网络的性能。尤其在公有网络中,由于大量低性能处理节点的存在,问题将更加明显。

要解决这个问题,根本上是放松对每个节点都必须参与完整处理的限制(当然,网络中节点要能合作完成完整的处理),这个思路已经在超级账本中得到应用;同时尽量减少核心层的处理工作。

在联盟链模式下,还可以专门采用高性能的节点作为核心节点,用相对较弱的节点仅作为代理访问节点。

安全防护

区块链目前最热门的应用场景是金融相关的服务,安全自然是讨论最多、挑战最大的话题。

区块链在设计上大量采用了现代成熟的密码学算法。但这是否就能确保其绝对安全呢?世界上并没有绝对安全的系统。

系统是由人设计的,系统也是由人来运营的,只要有人参与的系统,就难免出现漏洞。

有如下几个方面是很难逃避的。

首先是立法。对区块链系统如何进行监管?攻击区块链系统是否属于犯罪?攻击银行系统是要承担后果的。但是目前还没有任何法律保护区块链(特别是公有链)以及基于它的实现。

其次是软件实现的潜在漏洞是无法避免的。考虑到使用了几十年的 openssl 还带着那么低级的漏洞(heart bleeding),而且是源代码完全开放的情况下,让人不禁对运行中的大量线上系统持谨慎态度。而对于金融系统来说,无论客户端还是平台侧,即便是很小的漏洞都可能造成难以估计的损失。

另外,公有区块链所有交易记录都是公开可见的,这意味着所有的交易,即便被匿名化和加密处理,但总会在未来某天被破解。安全界一般认为,只要物理上可接触就不是彻底的安全。实际上,已有文献证明,比特币区块链的交易记录很大可能是能追踪到真实用户的。

作为一套完全分布式的系统,公有的区块链缺乏有效的调整机制。一旦运行起来,出现问题也难以修正。即使是让它变得更高效、更完善的修改,只要有部分既得利益者联合起来反对,就无法得到实施。比特币社区已经出现过多次类似的争论。

最后,运行在区块链上的智能合约应用可能是五花八门的,可能存在潜在的漏洞,必须要有办法进行安全管控,在注册和运行前需要有合理的机制进行探测,以规避恶意代码的破坏。

2016 年 6 月 17 日,发生 DAO 系统漏洞被利用 事件,直接导致价值 6000 万美元的数字货币被利用者获取。尽管对于这件事情的反思还在进行中,但事实再次证明,目前基于区块链技术进行生产应用时,务必要细心谨慎地进行设计和验证。必要时,甚至要引入“形式化验证”和人工审核机制。

可以参考,著名黑客米特尼克所著的《反欺骗的艺术——世界传奇黑客的经历分享》,介绍了大量的实际社交工程欺骗场景。

数据库和存储系统

区块链网络中的大量信息需要写到文件和数据库中进行存储。

观察区块链的应用,大量的读写操作、Hash 计算和验证操作,跟传统数据库的行为十分不同。

当年,人们观察到互联网应用大量非事务性的查询操作,而设计了非关系型(NoSQL)数据库。那么,针对区块链应用的这些特点,是否可以设计出一些特殊的针对性的数据库呢?

LevelDB、RocksDB 等键值数据库,具备很高的随机写和顺序读、写性能,以及相对较差的随机读的性能,被广泛应用到了区块链信息存储中。但目前来看,面向区块链的数据库技术仍然是需要突破的技术难点之一,特别是如何支持更丰富语义的操作。

大胆预测,未来将可能出现更具针对性的“块数据库(BlockDB)”,专门服务类似区块链这样的新型数据业务,其中每条记录将包括一个完整的区块信息,并天然地跟历史信息进行关联,一旦写入确认则无法修改。所有操作的最小单位将是一个块。为了实现这种结构,需要原生支持高效的签名和加解密处理。

集成和运营

即便大量企业系统准备迁移到区块链平台上,在相当长的一段时间内,基于区块链的新业务系统必将与已有的中心化系统集成共存。

两种系统如何共存,如何分工,彼此的业务交易如何进行合理传递?出现故障如何排查和隔离?已有数据如何在不同系统之间进行迁移和灾备?区块链系统自身又该如何进行运营,包括网络的设计选择、状态监控、灾备等。

这些都是很迫切要解决的实际问题。解决不好,将是区块链技术落地的不小阻碍。

趋势与展望

关于区块链技术发展趋势的探讨和争论,自其诞生之日起就从未停息。或许,读者可以从计算技术的演变历史中得到一些启发。 图 1.5.4.1 - 计算的历史,笔者于某次技术交流会中提出

以云计算为代表的现代计算技术,其发展历史上有若干重要的时间点和事件:

1969 - ARPANet(Advanced Research Projects Agency Network):现代互联网的前 身,被美国高级研究计划署(Advanced Research Project Agency)提出,其使用 NCP 协议,核心缺陷之一是无法做到和个别计算机网络交流;

1973 - TCP/IP:Vinton.Cerf(文特•瑟夫)与 Bob Karn(鲍勃•卡恩)共同开发出 TCP 模型,解决了 NCP 的缺陷;

1982 - Internet:TCP/IP 正式成为规范,并被大规模应用,现代互联网诞生;

1989 - WWW:早期互联网的应用主要包括 telnet、ftp、email 等,蒂姆·伯纳斯-李(Tim Berners-Lee)设计的WWW协议成为互联网的杀手级应用,引爆了现代互联网,从那开始,互联网业务快速扩张;

1999 - salesforce:互联网出现后,一度只能进行通信应用,但 salesforce 开始以云的理念提供基于互联网的企业级服务;

2006 - aws ec2:AWS EC2 奠定了云计算的业界标杆,直到今天,竞争者们仍然在试图追赶 AWS 的脚步;

2013 - cognitive:以 IBM Watson 为代表的认知计算开始进入商业领域,计算开始变得智能,进入“后云计算时代”。

从这个历史中能看出哪些端倪呢?

一个是 技术领域也存在着周期律。 这个周期目前看是 7-8 年左右。或许正如人有“七年之 痒”,技术也存在着七年这道坎,到了这道坎,要么自身突破迈过去,要么就被新的技术所取代。如果从比特币网络上线(2009 年 1 月)算起,到今年正是在坎上。因此,现在正是相关技术进行突破的好时机。

趋势与展望

为何恰好是七年?7年按照产品周期来看基本是23个产品周期,所谓事不过三,经过23个产品周期也差不多该有个结论了。

另外,最早出现的未必是先驱,也可能是先烈。 创新固然很好,但过早播撒的种子,没有合适的土壤,往往也难长大。技术创新与科研创新很不同的一点便是,技术创新必须立足于需求,过早过晚都会错失良机。科研创新则要越早越好,比如二十世纪出现的物理学巨匠们,超前的研究成果奠定了后续一百多年的科技革命的基础。

最后,事物的发展往往是延续的、长期的。 新生事物大都不是凭空蹦出来的,往往是解决了前辈未能解决的问题,或是出现了之前未曾出现过的场景。而且很多时候,新生事物的出现需要长期的孵化,坚持还是放弃,故事不断重复。笔者认为,只要是朝着提高生产力的正确方向努力,迟早会有出现在舞台上的一天。 图 1.5.4.2 - 坚持还是放弃?

目前,区块链在数字货币领域(以比特币为代表)的应用已经相对成熟,而在智能合约和分布式账本方向尚处于初步实践阶段。但毫无疑问地是,区块链技术在已经落地的领域,确实带来了生产力提升。

国际上的标准化组织,包括 ITU-T (SG16,17,20)、IETF、IEEE (P2418)、ISO、W3C 都已经纷纷设立相关研究小组,制定分布式账本领域的相关标准和规范。这也意味着分布式账本技术已经得到了业界的认可和重视。

认识上的误区

目前,由于区块链自身仍是一种相对年轻的技术,不少人对区块链的认识还存在一些误区。

下面,是需要注意的一些问题:

首先,区块链不等于比特币。虽说区块链的基本思想诞生于比特币的设计中,但发展到今日,比特币和区块链已经俨然成为了两个不太相关的技术。前者更侧重从数字货币角度发掘比特币的实验性意义;后者则从技术层面探讨和研究可能带来的商业系统价值,试图在更多的场景下释放智能合约和分布式账本带来的科技潜力。

其次,区块链不等于数据库。虽然区块链也可以用来存储数据,但它要解决的核心问题是多方的互信问题。单纯从存储数据角度,它的效率可能不高,笔者也不推荐把大量的原始数据放到区块链系统上。当然,现在已有的区块链系统中,数据库相关的技术十分关键,直接决定了区块链系统的吞吐性能。 TODO: bigchaindb, chainsql

最后,区块链并非一门万能的颠覆性技术。作为融合多项已有技术而出现的新事物,区块链跟现有技术的关系是一脉相承的。它在解决多方合作和可信处理上向前多走了一步,但并不意味着它是万能的,更不会彻底颠覆已有的商业模式。很长一段时间里,区块链所适用的场景仍需不断摸索,并且跟已有系统也必然是长期合作共存的关系。

本章小结

本章剖析了区块链的相关核心技术,包括其定义、工作原理、技术分类、关键问题和认识上的误区等。通过本章的学习,读者可以对区块链的相关核心技术形成整体上的认识,并对区块链在整个信息科技产业中的位置和发展趋势形成更清晰的认知。

除了数字货币应用外,现在业界越来越看重区块链技术可能带来的面向商业应用场景的计算能力。开源社区发起的开放的 以太坊 和 超级账本 等项目,让用户可以使用它们来快速设计更复杂的分布式账本应用。

有理由相信,随着更多商业应用场景的出现,区块链技术将在未来金融和信息技术等领域占据越来越重要的地位。 

典型应用场景

科技创新,应用为王。

一项新技术能否最终落地普及,有很多影响因素。其中很关键的一点便是能否找到合适的应用场景。

以比特币网络为代表的大规模数字货币系统,长时间自治运行,支持了传统金融系统都难以实现的全球范围即时可靠交易。这为区块链技术的应用潜力引发了无限遐想。如果未来基于区块链技术构造的商业价值网络成为现实,所有的交易都将高效完成且无法伪造;所有签署的合同都能按照约定严格执行。这将极大降低整个商业体系运转的成本,同时大大提高社会沟通协作的效率。从这个意义上讲,基于区块链技术构建的未来商业网络,将可能引发继互联网之后又一次巨大的产业变革。

目前,金融交易系统已经开始验证和使用区块链系统。包括征信管理、跨国交易、跨组织合作、资源共享和物联网等诸多领域,也涌现出大量有趣的应用案例。本章将通过剖析这些典型的应用场景,展现区块链技术为不同行业带来的创新潜力。 

应用场景概览

区块链技术已经从单纯的技术探讨走向了应用落地的阶段。国内外已经出现大量与之相关的企业和团队。有些企业已经结合自身业务摸索出了颇具特色的应用场景,更多的企业还处于不断探索和验证的阶段。

实际上,要找到合适的应用场景,还是要从区块链技术自身的特性出发进行分析。

区块链在不引入第三方中介机构的前提下,可以提供去中心化、不可篡改、安全可靠等特性保证。因此,所有直接或间接依赖于第三方担保机构的活动,均可能从区块链技术中获益。

区块链自身维护着一个按时间顺序持续增长、不可篡改的数据记录,当现实或数字世界中的资产可以生成数字摘要时,区块链便成为确权类应用的完美载体,提供包含所属权和时间戳的数字证据。

可编程的智能合约使得在区块链上登记的资产可以获得在现实世界中难以提供的流动性,并能够保证合约规则的透明和不可篡改。这就为区块链上诞生更多创新的经济活动提供了土壤,为社会资源价值提供更加高效且安全的流动渠道。

此外,还需要思考区块链解决方案的合理边界。面向大众消费者的区块链应用需要做到公开、透明、可审计,既可以部署在无边界的公有链,也可以部署在应用生态内多中心节点共同维护的区块链;面向企业内部或多个企业间的商业区块链场景,则可将区块链的维护节点和可见性限制在联盟内部,并用智能合约重点解决联盟成员间信任或信息不对等问题,以提高经济活动效率。

笔者认为,未来几年内,可能深入应用区块链技术的场景将包括:

  • 金融服务:区块链带来的潜在优势包括降低交易成本、减少跨组织交易风险等。该领域的区块链应用目前最受关注,全球不少银行和金融交易机构都是主力推动者。部分投资机构也在应用区块链技术降低管理成本和管控风险。从另一方面,要注意可能引发的问题和风险。例如,DAO(Decentralized Autonomous Organization 是史上最大的一次众筹活动,基于区块链技术确保资金的管理和投放)这样的众筹实验,提醒应用者在业务和运营层面都要谨慎处理。

  • 征信和权属管理:征信和权属的数字化管理是大型社交平台和保险公司都梦寐以求的。目前该领域的主要技术问题包括缺乏足够的数据和分析能力;缺乏可靠的平台支持以及有效的数据整合管理等。区块链被认为可以促进数据交易和流动,提供安全可靠的支持。征信行业的门槛比较高,需要多方资源共同推动。

  • 资源共享:以 Airbnb 为代表的分享经济公司将欢迎去中心化应用,可以降低管理成本。该领域主题相对集中,设计空间大,受到大量的投资关注。

  • 贸易管理:区块链技术可以帮助自动化国际贸易和物流供应链领域中繁琐的手续和流程。基于区块链设计的贸易管理方案会为参与的多方企业带来极大的便利。另外,贸易中销售和法律合同的数字化、货物监控与检测、实时支付等方向都可能成为创业公司的应用场景概览

  • 突破口。

  • 物联网:物联网也是很适合应用区块链技术的一个领域,预计未来几年内会有大量应用出现,特别是租赁、物流等特定场景,都是很合适结合区块链技术的场景。但目前阶段,物联网自身的技术局限将造成短期内不会出现大规模应用。

这些行业各有不同的特点,但或多或少都需要第三方担保机构的参与,因此都可能从区块链技术中获得益处。

当然,对于商业系统来说,技术支持只是一种手段,根本上需要满足业务需求。区块链作为一个底层的平台技术,要利用好它,需要根据行业特性进行综合考量设计,对其上的业务系统和商业体系提供合理的支持。

有理由相信,区块链技术落地的案例会越来越多。这也会进一步促进新技术在传统行业中的应用,带来更多的创新业务和场景。

金融服务

自有人类社会以来,金融交易就是必不可少的经济活动,涉及货币、证券、保险、抵押、捐赠等诸多行业。交易角色和交易功能的不同,反映出不同的生产关系。通过金融交易,可以优化社会运转效率,实现资源价值的最大化。可以说,人类社会的文明发展,离不开交易形式的演变。

传统交易本质上交换的是物品价值的所属权。为了完成一些贵重商品的交易(例如房屋、车辆的所属权),往往需要十分繁琐的中间环节,同时需要中介和担保机构参与其中。这是因为,交易双方往往存在着不能充分互信的情况。一方面,要证实合法的价值所属权并不简单,往往需要开具各种证明材料,存在造假的可能;另一方面,价值不能直接进行交换,同样需要繁琐的手续,在这个过程中存在较多的篡改风险。

为了确保金融交易的可靠完成,出现了中介和担保机构这样的经济角色。它们通过提供信任保障服务,提高了社会经济活动的效率。但现有的第三方中介机制往往存在成本高、时间周期长、流程复杂、容易出错等缺点。金融领域长期存在提高交易效率的迫切需求。

区块链技术可以为金融服务提供有效、可信的所属权证明,以及相当可靠的合约确保机制。

银行业金融管理

银行从角色上,一般分为中央银行(央行)和普通银行。

中央银行的两大职能是“促进宏观经济稳定”和“维护金融稳定”(《金融的本质》,伯南克,中信出版社,2014 年出版),主要手段就是管理各种证券和利率。央行的存在,为整个社会的金融体系提供了最终的信用担保。

普通银行业则往往基于央行的信用,作为中介和担保方,来协助完成多方的金融交易。

银行活动主要包括发行货币、完成存贷款等功能。银行必须确保交易的确定性,必须确立自身的可靠信用地位。传统的金融系统为了完成上述功能,采用了极为复杂的软件和硬件方案,建设和维护成本都十分昂贵。即便如此,这些系统仍然存在诸多缺陷,例如某些场景下交易时延过大;难以避免利用系统漏洞进行的攻击和金融欺诈等。

此外,在目前金融系统流程中,商家为了完成交易,还常常需要经由额外的支付企业进行处理。这些实际上都极大增加了现有金融交易的成本。 区块链技术的出现,被认为是有可能促使这一行业发生革命性变化的“奇点”。除了众所周知的比特币等数字货币实验之外,还有诸多金融机构进行了有意义的尝试。

欧洲央行评估区块链在证券交易后结算的应用

目前,全球证券交易后的处理过程十分复杂,清算行为成本约 50-100 亿美元,交易后分析、对账和处理费用超过 200 亿美金。 来自欧洲央行的一份报告显示,区块链作为分布式账本技术,可以很好地节约对账的成本,同时简化交易过程。相对原先的交易过程,可以近乎实时的变更证券的所有权。

来源:欧洲央行报告:《Distributed ledger technologies in securities posttrading》,https://www.ecb.europa.eu/pub/pdf/scpops/ecbop172.en.pdf

中国人民银行投入区块链研究

2016 年,中国人民银行对外发布消息,称深入研究了数字货币涉及的相关技术,包括区块链技术、移动支付、可信可控云计算、密码算法、安全芯片等,被认为积极关注区块链技术的发展。

实际上,央行对于区块链技术的研究很早便已开展。

2014 年,央行成立发行数字货币的专门研究小组对基于区块链的数字货币进行研究,次年形成研究报告。

2016 年 1 月 20 日,央行专门组织了“数字货币研讨会”,邀请了业内的区块链技术专家就数字货币发行的总体框架、演进、以及国家加密货币等话题进行了研讨。会后,发布对我国银行业数字货币的战略性发展思路,提出要早日发行数字货币,并利用数字货币相关技术来打击金融犯罪活动。

2016 年 12 月,央行成立数字货币研究所。初步公开设计为“由央行主导,在保持实物现金发行的同时发行以加密算法为基础的数字货币,M0(流通中的现金)的一部分由数字货币构成。为充分保障数字货币的安全性,发行者可采用安全芯片为载体来保护密钥和算法运算过程的安全”。

加拿大银行提出新的数字货币

2016 年 6 月,加拿大央行公开正在开发基于区块链技术的数字版加拿大元(名称为 CAD 币),以允许用户使用加元来兑换该数字货币。经过验证的对手方将会处理货币交易;另外,如果需要,银行将保留销毁 CAD 币的权利。

发行 CAD 币是更大的一个探索型科技项目 Jasper 的一部分。除了加拿大央行外,据悉,蒙特利尔银行、加拿大帝国商业银行、加拿大皇家银行、加拿大丰业银行、多伦多道明银行等多家机构也都参与了该项目。

来源:金融时报- Canada experiments with digital dollar on blockchain,2016-06-16。

英国央行实现 RSCoin

英国央行在数字化货币方面进展十分突出,已经实现了基于分布式账本平台的数字化货币系统,RSCoin。旨在强化本国经济及国际贸易。 RSCoin 目标是提供一个由中央银行控制的数字货币,采用了双层链架构、改进版的两阶段提交(Two Phase Commitment),以及多链之间的交叉验证机制。该货币具备防篡改和防伪造的特性。

因为该系统主要是央行和下属银行之间使用,通过提前建立一定的信任基础,可以提供较好的处理性能。

英国央行对 RSCoin 进行了推广,希望能尽快普及该数字货币,以带来节约经济成本、促进经济发展的效果。同时,英国央行认为,数字货币相对传统货币更适合国际贸易等场景。

日本政府取消比特币消费税

2017 年 3 月 27 日,日本国会通过《2017 税务改革法案》,该法案将比特币等数字货币定义为货币等价物,可以用于数字支付和转账。

法案于 2017 年 7 月 1 日生效,销售数字货币不必再缴纳 8% 的消费税。

中国邮储银行将区块链技术应用到核心业务系统

2016 年 10 月,中国邮储银行宣布携手 IBM 推出基于区块链技术的资产托管系统,是中国银行业首次将区块链技术成功应用于核心业务系统。

新的业务系统免去了重复的信用校验过程,将原有业务环节缩短了约 60-80% 的时间,提高了信用交易的效率。

SWIFT 完成跨银行的分布式账本验证

2018 年 3 月,环球同业银行金融电讯协会(SWIFT)完成了涉及到 34 家银行的分布式账本验证。验证重点关注基于超级账本项目的分布式账本技术能否满足监管、安全、隐私性等方面的需求。验证表明分布式账本技术可以满足自动化的资产管理需求,为未来多银行间合作提供重要支撑。

SWIFT 研发中心负责人 Damien Vanderveken 称:“验证进行的相当不错,证实了分布式账本技术的巨大进展,尤其是超级账本 Fabric 项目 1.0(The PoC went extremely well, proving the fantastic progress that has been made with DLT and the Hyperledger Fabric 1.0 in particular)”。

各种新型支付业务

基于区块链技术,出现了大量的创新支付企业,这些支付企业展示了利用区块链技术带来的巨大商业优势。

  • Abra:区块链数字钱包,以近乎实时的速度进行跨境支付,无需银行账户,实现不同币种的兑换,融资超过千万美金。
  • Bitwage:基于比特币区块链的跨境工资支付平台,可以实现每小时的工资支付,方便跨国企业进行工资管理。
  • BitPOS:澳大利亚创业企业,提供基于比特币的低成本的快捷线上支付。
  • Circle:由区块链充当支付网络,允许用户进行跨币种、跨境的快速汇款。Circle 获得了来自 IDG、百度的超过 6000 万美金的 D 轮投资。
  • Ripple:实现跨境的多币种、低成本、实时交易,引入了网关概念(类似银行),结构偏中心化。

证券交易

证券交易包括交易执行环节和交易后处理环节。

交易环节本身相对简单,主要是由交易系统(高性能实时处理系统)完成电子数据库中内容的变更。中心化的验证系统往往极为复杂和昂贵。交易指令执行后的结算和清算环节也十分复杂,需要大量的人力成本和时间成本,并且容易出错。

目前来看,基于区块链的处理系统还难以实现海量交易系统所需要的性能(典型性能为每秒一万笔以上成交,日处理能力超过五千万笔委托、三千万笔成交)。但在交易的审核和清算环节,区块链技术存在诸多的优势,可以极大降低处理时间,同时减少人工的参与。

咨询公司 Oliver Wyman 在给 SWIFT(环球同业银行金融电讯协会)提供的研究报告中预计,全球清算行为成本约 50100 亿美元,结算成本、托管成本和担保物管理成本 400450 亿美元(390 亿美元为托管链的市场主体成本),而交易后流程数据及分析花费 200~250 亿美元。

2015 年 10 月,美国纳斯达克(Nasdaq)证券交易所推出区块链平台 Nasdaq Linq,实现主要面向一级市场的股票交易流程。通过该平台进行股票发行的发行者将享有“数字化”的所有权。

其它相关案例还包括:

  • BitShare 推出基于区块链的证券发行平台,号称每秒达到 10 万笔交易。
  • DAH 为金融市场交易提供基于区块链的交易系统。获得澳洲证交所项目。
  • Symbiont 帮助金融企业创建存储于区块链的智能债券,当条件符合时,清算立即执行。
  • Overstock.com 推出基于区块链的私有和公开股权交易“T0”平台,提出“交易即结算”(The trade is the settlement)的理念,主要目标是建立证券交易实时清算结算的全新系统。
  • 高盛为一种叫做“SETLcoin”的新虚拟货币申请专利,用于为股票和债券等资产交易提供“近乎立即执行和结算”的服务。

众筹管理

ICO(Initial Coin Offering)是一种基于加密货币的新型众筹管理方式。项目发起方通过售卖项目早期的加密货币向外界融资,当项目上线后,如果能否得以健康成长,加密货币价格上溢,投资者可以获得回报,并且可以选择任何时候卖出这些货币而退出。

最早的 ICO 出现在 2013 年 6 月,万事达币(MSC)在 Bitcointalk 论坛上众筹 5000 个比特币。虽然,很可惜该项目后来并没有成功,但开启了 ICO 的浪潮。

2014 年,比较出名的如比特股 Bitshares 和以太坊 Ethereum 先后发起 ICO,并且随着平台自身的发展,投资者获取了大量的回报。

2016 年 4 月 30 日上线的 DAO(Decentralized Autonomous Organization)项目,试图打造基于以太坊的众筹平台,更是一度创下历史最高的融资记录,数额超过 1.6 亿美金。该项目暴露出这种创新形式的组织者们在应对安全风险时候缺乏足够的应对经验。6 月 12 日,有技术人员报告合约执行过程中存在软件漏洞,但很遗憾并未得到组织的重视和及时修复。四天后,黑客利用漏洞转移了 360 万枚以太币,当时价值超过 5000 万美金。虽然最后采用了一些技术手段来挽回经济损失,但该事件毫无疑问给以太坊平台带来了负面影响,也给 ICO 这种新模式的流程管理敲响了警钟。

2017 年开始,传统风投基金也开始尝试用 ICO 来募集资金。Blockchain Capital 在 2017 年 发行的一支基金创新地采用了传统方式加 ICO 的混合方式进行募资,其中传统部分规模 4000 万美元,ICO 部分规模 1000 万美元。4 月 10 日,ICO 部分 1000 万美元的募集目标在启动后六小时内全部完成。

随着 ICO 的火热发展,大量欺诈性的项目出现,有的项目仅有一个粗糙的白皮书,有的项目甚至连白皮书都没有,在部分媒体和投资者的炒作下,吸引了众多资金的投入,2017 年全球有超过 40 亿美金投入到 ICO 当中。然而,下半年开始,大量 ICO 项目因为无法完成预设目标而破灭,无论欧美还是亚洲都出现了大量项目组织方跑路的情况,这被认为是第一次 ICO 泡沫的结束。

同期,各国监管部门开始介入,要么直接禁止 ICO 活动,要么纳入监管体系。2017年 8 月 28 日,美国证监会发布关于谨防 ICO 骗局的警告;9 月 4 日,中国人民银行(央行)等7部门发文定调,ICO 为“未经批准非法公开融资的行为”,各类代币发行融资活动应立即停止。

客观来看,用 ICO 方式进行众筹相对灵活。但目前 ICO 在形式还缺少明确的法律定位和监管流程,普通投资者也很难对项目的商业模式和科技含量进行准确把握,是一件风险远大于收益的事情。

Telegram 在 2018 年初通过两轮 ICO 共募集资金 17 亿美金,值得注意的是,在第二轮时已经明确限制最低投资门槛为 100 万美元。

ICO 形式要想健康发展,一方面必须强化项目自身的管理,如信息的真实公开和接受公开机构的监督审查;另一方面,投资者必须从商业场景、技术实力、团队等各方面对项目进行全面评估,而不是盲目跟从。

征信和权属管理

征信管理

征信管理是一个巨大的潜在市场,据称超过千亿规模(可参考美国富国银行报告和平安证券报告),也是目前大数据应用领域最有前途的方向之一。 目前征信相关的大量有效数据集中在少数机构手中。由于这些数据太过敏感,并且具备极高的商业价值,往往会被严密保护起来,形成很高的行业门槛。 虽然现在大量的互联网企业(包括各类社交网站)尝试从各种维度获取了海量的用户信息,但从征信角度看,这些数据仍然存在若干问题。这些问题主要包括:

  • 数据量不足:数据量越大,能获得的价值自然越高,过少的数据量无法产生有效价值;
  • 相关度较差:最核心的数据也往往是最敏感的。在隐私高度敏感的今天,用户都不希望暴露过多数据给第三方,因此企业获取到数据中有效成分往往很少;
  • 时效性不足:企业可以从明面上获取到的用户数据往往是过时的,甚至存在虚假信息,对相关分析的可信度造成严重干扰。

区块链天然存在着无法篡改、不可抵赖的特性。同时,区块链平台将可能提供前所未有规模的相关性极高的数据,这些数据可以在时空中准确定位,并严格关联到用户。因此,基于区块链提供数据进行征信管理,将大大提高信用评估的准确率,同时降低评估成本。

另外,跟传统依靠人工的审核过程不同,区块链中交易处理完全遵循约定自动化执行。基于区块链的信用机制将天然具备稳定性和中立性。

目前,包括 IDG、腾讯、安永、普华永道等都已投资或进入基于区块链的征信管理领域,特别是跟保险和互助经济相关的应用场景。

权属管理

区块链技术可以用于产权、版权等所有权的管理和追踪。其中包括汽车、房屋、艺术品等各种贵重物品的交易等,也包括数字出版物,以及可以标记的数字资源。

目前权属管理领域存在的几个难题是:

  • 物品所有权的确认和管理;
  • 交易的安全性和可靠性保障;
  • 必要的隐私保护机制。 以房屋交易为例。买卖双方往往需要依托中介机构来确保交易的进行,并通过纸质的材料证明房屋所有权。但实际上,很多时候中介机构也无法确保交易的正常进行。

征信和权属管理

而利用区块链技术,物品的所有权是写在数字链上的,谁都无法修改。并且一旦出现合同中约定情况,区块链技术将确保合同能得到准确执行。这能有效减少传统情况下纠纷仲裁环节的人工干预和执行成本。

例如,公正通(Factom)尝试使用区块链技术来革新商业社会和政府部门的数据管理和数据记录方式。包括审计系统、医疗信息记录、供应链管理、投票系统、财产契据、法律应用、金融系统等。它将待确权数据的指纹存放到基于区块链的分布式账本中,可以提供资产所有权的追踪服务。

区块链账本共享、信息可追踪溯源且不可篡改的特性同样可用于打击造假和防范欺诈。

Everledger 自 2016 年起就研究基于区块链技术实现贵重资产检测系统,将钻石或者艺术品等 的权属信息记录在区块链上。并于 2017 年宣布与 IBM 合作,实现生产商、加工商、运送方、零售商等多方之间的可信高效协作。

类似地,针对食品造假这一难题,IBM、沃尔玛、清华大学于 2016 年底共同宣布将在食品安全领域展开合作,将用区块链技术搭建透明可追溯的跨境食品供应链。这一全新的供应链将改善食品的溯源和物流环节,打造更为安全的全球食品市场。

其他项目

在人力资源和教育领域,MIT 研究员朱莉安娜·纳扎雷(Juliana Nazaré)和学术创新部主管菲利普·施密特(Philipp Schmidt)发表了文章《MIT Media Lab Uses the Bitcoin Blockchain for Digital Certificates》,介绍基于区块链的学历认证系统。基于该系统,用人单位可以确认求职者的学历信息是真实可靠的。2018 年 2 月,麻省理工学院向应届毕业生颁发了首批基于区块链的数字学位证书。

此外,还包括一些其他相关的应用项目:

  • Chronicled:基于区块链的球鞋鉴定方案,为正品球鞋添加电子标签,记录在区块链上。
  • Mediachain:通过 metadata 协议,将内容创造者与作品唯一对应。
  • Mycelia:区块链产权保护项目,为音乐人实现音乐的自由交易。
  • Tierion: 将用户数据锚定在比特币或以太坊区块链上,并生成“区块链收据”。
  • Ziggurat:基于区块链提供文字、图片、音视频版权资产的登记和管理服务。

资源共享

当前,以 Uber、Airbnb 为代表的共享经济模式正在多个垂直领域冲击传统行业。这一模式鼓励人们通过互联网的方式共享闲置资源。资源共享目前面临的问题主要包括:

  • 共享过程成本过高;
  • 用户行为评价难;
  • 共享服务管理难。 区块链技术为解决上述问题提供了更多可能。相比于依赖于中间方的资源共享模式,基于区块链的模式有潜力更直接的连接资源的供给方和需求方,其透明、不可篡改的特性有助于减小摩擦。

有人认为区块链技术会成为新一代共享经济的基石。笔者认为,区块链在资源共享领域是否存在价值,还要看能否比传统的专业供应者或中间方形式实现更高的效率和更低的成本,同时不能损害用户体验。

短租共享

大量提供短租服务的公司已经开始尝试用区块链来解决共享中的难题。

高盛在报告《Blockchain: Putting Theory into Practice》中宣称:

Airbnb 等 P2P 住宿平台已经开始通过利用私人住所打造公开市场来变革住宿行业,但是这种服务的接受程度可能会因人们对人 身安全以及财产损失的担忧而受到限制。而如果通过引入安全且无法篡改的数字化资质和信用管理系统,我们认为区块链就能有助于提升 P2P 住宿的接受度。

该报告还指出,可能采用区块链技术的企业包括 Airbnb、HomeAway 以及 OneFineStay 等,市场规模为 30~90 亿美元。

社区能源共享

在纽约布鲁克林的一个街区,已有项目尝试将家庭太阳能发的电通过社区的电力网络直接进行买卖。具体的交易不再经过电网公司,而是通过区块链执行。

与之类似,ConsenSys 和微电网开发商 LO3 提出共建光伏发电交易网络,实现点对点的能源交易。

这些方案的主要难题包括:

  • 太阳能电池管理;
  • 社区电网构建;
  • 资源共享
  • 电力储备系统搭建;
  • 低成本交易系统支持。 现在已经有大量创业团队在解决这些问题,特别是硬件部分已经有了不少解决方案。而通过区块链技术打造的平台可以解决最后一个问题,即低成本地实现社区内的可靠交易系统。

电商平台

传统情况下,电商平台起到了中介的作用。一旦买卖双方发生纠纷,电商平台会作为第三方 机构进行仲裁。这种模式存在着周期长、缺乏公证、成本高等缺点。OpenBazaar 试图在无中介的情形下,实现安全电商交易。

具体地,OpenBazaar 提供的分布式电商平台,通过多方签名机制和信誉评分机制,让众多参与者合作进行评估,实现零成本解决纠纷问题。

大数据共享

大数据时代里,价值来自于对数据的挖掘,数据维度越多,体积越大,潜在价值也就越高。

一直以来,比较让人头疼的问题是如何评估数据的价值,如何利用数据进行交换和交易,以及如何避免宝贵的数据在未经许可的情况下泄露出去。 区块链技术为解决这些问题提供了潜在的可能。

利用共同记录的共享账本,数据在多方之间的流动将得到实时的追踪和管理。通过对敏感信息的脱敏处理和访问权限的设定,区块链可以对大数据的共享授权进行精细化管控,规范和促进大数据的交易与流通。

减小共享风险

传统的资源共享平台在遇到经济纠纷时会充当调解和仲裁者的角色。对于区块链共享平台,目前还存在线下复杂交易难以数字化等问题。除了引入信誉评分、多方评估等机制,也有方案提出引入保险机制来对冲风险。

2016 年 7 月,德勤、Stratumn 和 LemonWay 共同推出一个为共享经济场景设计的“微保险”概念平台,称为 LenderBot。针对共享经济活动中临时交换资产可能产生的风险, LenderBot 允许用户在区块链上注册定制的微保险,并为共享的资产(如相机、手机、电脑)投保。区块链在其中扮演了可信第三方和条款执行者的角色。

贸易管理

跨境贸易

在国际贸易活动中,买卖双方可能互不信任。因此需要银行作为买卖双方的保证人,代为收款交单,并以银行信用代替商业信用。

区块链可以为信用证交易参与方提供共同账本,允许银行和其它参与方拥有经过确认的共同交易记录并据此履约,从而降低风险和成本。

巴克莱银行用区块链进行国际贸易结算

2016 年 9 月,英国巴克莱银行用区块链技术完成了一笔国际贸易的结算,贸易金额 10 万美 元,出口商品是爱尔兰农场出产的芝士和黄油,进口商是位于离岸群岛塞舌尔的一家贸易商。结算用时不到 4 小时,而传统采用信用证方式做此类结算需要 7 到 10 天。

在这笔贸易背后,区块链提供了记账和交易处理系统,替代了传统信用证结算过程中占用大量人力和时间的审单、制单、电报或邮寄等流程。

物流供应链

物流供应链被认为是区块链一个很有前景的应用方向。

供应链行业往往涉及到诸多实体,包括物流、资金流、信息流等,这些实体之间存在大量复杂的协作和沟通。传统模式下,不同实体各自保存各自的供应链信息,严重缺乏透明度,造成了较高的时间成本和金钱成本,而且一旦出现问题(冒领、货物假冒等),难以追查和处理。

通过区块链,各方可以获得一个透明可靠的统一信息平台,可以实时查看状态,降低物流成本,追溯物品的生产和运送全过程,从而提高供应链管理的效率。当发生纠纷时,举证和追查也变得更加清晰和容易。

例如,运送方通过扫描二维码来证明货物到达指定区域,并自动收取提前约定的费用;冷链运输过程中通过温度传感器实时检测货物的温度信息并记录在链等。

来自美国加州的 Skuchain 公司创建基于区块链的新型供应链解决方案,实现商品流与资金流的同步,同时缓解假货问题。

马士基推出基于区块链的跨境供应链解决方案

2017 年 3 月,马士基和 IBM 宣布,计划与由货运公司、货运代理商、海运承运商、港口和海关当局构成的物流网络合作构建一个新型全球贸易数字化解决方案。该方案利用区块链技术在各方之间实现信息透明性,降低贸易成本和复杂性,旨在帮助企业减少欺诈和错误,缩短产品在运输和海运过程中所花的时间,改善库存管理,最终减少浪费并降低成本。

马士基在 2014 年发现,仅仅是将冷冻货物从东非运到欧洲,就需要经过近 30 个人员和组织进行超过 200 次的沟通和交流。类似这样的问题都有望借助区块链进行解决。

一带一路

类似“一带一路”这样创新的投资建设模式,会碰到来自地域、货币、信任等各方面的挑战。

现在已经有一些参与到一带一路中的部门,对区块链技术进行探索应用。区块链技术可以让原先无法交易的双方(例如,不存在多方都认可的国际货币储备的情况下)顺利完成交易,并且降低贸易风险、减少流程管控的成本。 

物联网

曾经有人认为,物联网是大数据时代的基础。笔者认为,区块链技术是物联网时代的基础。

典型应用场景分析

一种可能的应用场景为:物联网络中每一个设备分配地址,给该地址所关联一个账户,用户通过向账户中支付费用可以租借设备,以执行相关动作,从而达到租借物联网的应用。

典型的应用包括 PM2.5 监测点的数据获取、温度检测服务、服务器租赁、网络摄像头数据调用等等。

另外,随着物联网设备的增多、边沿计算需求的增强,大量设备之间形成分布式自组织的管理模式,并且对容错性要求很高。区块链自身分布式和抗攻击的特点可以很好地融合到这一场景中。

IBM

IBM 在物联网领域已经持续投入了几十年的研发,目前正在探索使用区块链技术来降低物联网应用的成本。

2015 年初,IBM 与三星宣布合作研发“去中心化的 P2P 自动遥测系统(Autonomous Decentralized Peer-to-Peer Telemetry)”系统,使用区块链作为物联网设备的共享账本,打造去中心化的物联网。

Filament

美国的 Filament 公司以区块链为基础提出了一套去中心化的物联网软件堆栈。通过创建一个 智能设备目录,Filament 的物联网设备可以进行安全沟通、执行智能合约以及发送小额交易。

基于上述技术,Filament 能够通过远程无线网络将辽阔范围内的工业基础设备沟通起来,其应用包括追踪自动售货机的存货和机器状态、检测铁轨的损耗、基于安全帽或救生衣的应急情况监测等。

NeuroMesh

2017 年 2 月,源自 MIT 的 NeuroMesh 物联网安全平台获得了 MIT 100K Accelerate 竞赛的亚军。该平台致力于成为“物联网疫苗”,能够检测和消除物联网中的有害程序,并将攻击源打入黑名单。

所有运行 NeuroMesh 软件的物联网设备都通过访问区块链账本来识别其他节点和辨认潜在威胁。如果一个设备借助深度学习功能检测出可能的威胁,可通过发起投票的形式告知全网,由网络进一步对该威胁进行检测并做出处理。

公共网络服务

现有的互联网能正常运行,离不开很多近乎免费的网络服务,例如域名服务(DNS)。任何人都可以免费查询到域名,没有 DNS,现在的各种网站将无法访问。因此,对于网络系统来说,类似的基础服务必须要能做到安全可靠,并且低成本。

区块链技术恰好具备这些特点,基于区块链打造的分布式 DNS 系统,将减少错误的记录和查询,并且可以更加稳定可靠地提供服务。 

其它场景

区块链还有一些很有趣的应用场景,包括但不限于云存储、医疗、社交、游戏等多个方面。

云存储

Storj 项目提供了基于区块链的安全的分布式云存储服务。服务保证只有用户自己能看到自己的数据,并号称提供高速的下载速度和 99.99999% 的高可用性。用户还可以“出租”自己的额外硬盘空间来获得报酬。

协议设计上,Storj 网络中的节点可以传递数据、验证远端数据的完整性和可用性、复原数 据,以及商议合约和向其他节点付费。数据的安全性由数据分片(Data Sharding)和端到端加密提供,数据的完整性由可复原性证明(Proof of Retrievability)提供。

医疗

医院与医保医药公司,不同医院之间,甚至医院里不同部门之间的数据流动性往往很差。考虑到医疗健康数据的敏感性,笔者认为,如果能够满足数据访问权、使用权等规定的基础上促进医疗数据的提取和流动,区块链将在医疗行业获得一定的用武之地。

GemHealth 项目由区块链公司 Gem 于 2016 年 4 月提出,其目标除了用区块链存储医疗记录或数据,还包括借助区块链增强医疗健康数据在不同机构不同部门间的安全可转移性、促进全球病人身份识别、医疗设备数据安全收集与验证等。项目已与医疗行业多家公司签订了合作协议。

通信和社交

BitMessage 是一套去中心化通信系统,在点对点通信的基础上保护用户的匿名性和信息的隐私。BitMessage 协议在设计上充分参考了比特币,二者拥有相似的地址编码机制和消息传递机制。BitMessage 也用工作量证明(Proof-of-Work)机制防止通信网络受到大量垃圾信息的冲击。 类似的,Twister 是一套去中心化的“微博”系统,Dot-Bit 是一套去中心化的 DNS 系统。

投票

Follow My Vote 项目致力于提供一个安全、透明的在线投票系统。通过使用该系统进行选举投票,投票者可以随时检查自己选票的存在和正确性,看到实时记票结果,并在改变主意时修改选票。

其它场景

该项目使用区块链进行记票,并开源其软件代码供社区用户审核。项目也为投票人身份认证、防止重复投票、投票隐私等难点问题提供了解决方案。

预测

Augur 是一个运行在以太坊上的预测市场平台。使用 Augur,来自全球不同地方的任何人都可发起自己的预测话题市场,或随意加入其它市场,来预测一些事件的发展结果。预测结果和奖金结算由智能合约严格控制,使得在平台上博弈的用户不用为安全性产生担忧。

电子游戏

2017 年 3 月,来自马来西亚的电子游戏工作室 Xhai Studios 宣布将区块链技术引入其电子游戏平台。工作室旗下的一些游戏将支持与 NEM 区块链的代币 XEM 整合。通过这一平台,游戏开发者可以在游戏架构中直接调用支付功能,消除对第三方支付的依赖;玩家则可以自由地将 XEM 和游戏内货币、点数等进行双向兑换。 

本章小结

本章介绍了大量基于区块链技术的应用案例和场景,展现了区块链以及基于区块链的分布式账本技术所具有的巨大市场潜力。

当然,任何事物的发展都不是一帆风顺的。

目前来看,制约区块链技术进一步落地的因素有很多。比如如何来为区块链上的合同担保?特别在金融、法律等领域,实际执行的时候往往还需要线下机制来配合;另外就是基于区块链系统的价值交易,必须要实现物品价值的数字化,非数字化的物品很难直接放到数字世界中进行管理。

这些问题看起来都不容易很快得到解决。但笔者相信,一门新的技术能否站住脚,根本上还是看它能否最终提高生产力,而区块链技术已经证明了这一点。随着生态的进一步成熟,区块链技术必将在更多领域获得用武之地。 

分布式系统

万法皆空,因果不空。

随着摩尔定律碰到瓶颈,越来越多的系统要依靠分布式集群架构来实现海量数据处理和可扩展计算能力。

区块链首先是一个分布式系统。

中央式结构改成分布式系统,碰到的第一个问题就是一致性的保障。

很显然,如果一个分布式集群无法保证处理结果一致的话,那任何建立于其上的业务系统都无法正常工作。

本章将介绍分布式系统中一些核心问题的来源以及相关的工作。

一致性问题

在分布式系统中,一致性(Consistency,早期也叫 Agreement)是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果达成某种程度的一致。

如果分布式系统能实现“一致”,对外就可以呈现为一个功能正常的,且性能和稳定性都要好很多的“虚处理节点”。

举个例子,某影视公司旗下有西单和中关村的两个电影院,都出售某电影票,票一共就一万张。那么,顾客到达某个电影院买票的时候,售票员该怎么决策是否该卖这张票,才能避免超售呢?当电影院个数更多的时候呢?

这个问题在人类世界中,看起来似乎没那么难,你看,英国人不是刚靠 投票 达成了“某种一致”吗?

注意:一致性并不代表结果正确与否,而是系统对外呈现的状态一致与否,例如,所有节点都达成失败状态也是一种一致。

挑战

  • 在实际的计算机集群系统(看似强大的计算机系统,很多地方都比人类世界要脆弱的多)中,存在如下的问题:

  • 节点之间的网络通讯是不可靠的,包括任意延迟和内容故障;节点的处理可能是错误的,甚至节点自身随时可能宕机;同步调用会让系统变得不具备可扩展性。

要解决这些挑战,愿意动脑筋的读者可能会很快想出一些不错的思路。

为了简化理解,仍然以两个电影院一起卖票的例子。可能有如下的解决思路:

  • 每次要卖一张票前打电话给另外一家电影院,确认下当前票数并没超售;
  • 两家电影院提前约好,奇数小时内一家可以卖票,偶数小时内另外一家可以卖;成立一个第三方的存票机构,票都放到他那里,每次卖票找他询问;更多……
  • 这些思路大致都是可行的。实际上,这些方法背后的思想,将可能引发不一致的并行操作进行串行化,就是现在计算机系统里处理分布式一致性问题的基础思路和唯一秘诀。只是因为计算机系统比较傻,需要考虑得更全面一些;而人们又希望计算机系统能工作的更快更稳定,所以算法需要设计得再精巧一些。

要求

规范的说,理想的分布式系统一致性应该满足:

  • 可终止性(Termination):一致的结果在有限时间内能完成;
  • 共识性(Consensus):不同节点最终完成决策的结果应该相同;合法性(Validity):决策的结果必须是其它进程提出的提案。

第一点很容易理解,这是计算机系统可以被使用的前提。需要注意,在现实生活中这点并不是总能得到保障的,例如取款机有时候会是“服务中断”状态,电话有时候是“无法连通”的。

第二点看似容易,但是隐藏了一些潜在信息。算法考虑的是任意的情形,凡事一旦推广到任意情形,就往往有一些惊人的结果。例如现在就剩一张票了,中关村和西单的电影院也分别刚确认过这张票的存在,然后两个电影院同时来了一个顾客要买票,从各自“观察”看来,自己的顾客都是第一个到的……怎么能达成结果的共识呢?记住我们的唯一秘诀:核心在于需要把两件事情进行排序,而且这个顺序还得是大家都认可的。

第三点看似绕口,但是其实比较容易理解,即达成的结果必须是节点执行操作的结果。仍以卖票为例,如果两个影院各自卖出去一千张,那么达成的结果就是还剩八千张,决不能认为票售光了。

带约束的一致性

做过分布式系统的读者应该能意识到,绝对理想的强一致性(Strong Consistency)代价很大。除非不发生任何故障,所有节点之间的通信无需任何时间,这个时候其实就等价于一台机器了。实际上,越强的一致性要求往往意味着越弱的性能。

一般的,强一致性(Strong Consistency)主要包括下面两类:

  • 顺序一致性(Sequential Consistency):Leslie Lamport 1979 年经典论文《How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs》中提出,是一种比较强的约束,保证所有进程看到的 全局执行顺序(total order)一致,并且每个进程看自身的执行(local order)跟实际发生顺序一致。例如,某进程先执行 A,后执行 B,则实际得到的全局结果中就应该为 A 在 B 前面,而不能反过来。同时所有其它进程在全局上也应该看到这个顺序。顺序一致性实际上限制了各进程内指令的偏序关系,但不在进程间按照物理时间进行全局排序。
  • 线性一致性(Linearizability Consistency):Maurice P. Herlihy 与 Jeannette M. Wing 在 1990 年经典论文《Linearizability: A Correctness Condition for Concurrent Objects》中共同提出,在顺序一致性前提下加强了进程间的操作排序,形成唯一的全局顺序(系统等价于是顺序执行,所有进程看到的所有操作的序列顺序都一致,并且跟实际发生顺序一致),是很强的原子性保证。但是比较难实现,目前基本上要么依赖于全局的时钟或锁,要么通过一些复杂算法实现,性能往往不高。

目前,高精度的石英钟的漂移率为 ,人类目前最准确的原子震荡时钟的漂移率为 。Google 曾在其分布式数据库 Spanner 中采用基于原子时钟和 GPS 的“TrueTime”方案,能够将不同数据中心的时间偏差控制在 10ms 以内。方案简单粗暴而有效,但存在成本较高的问题。

强一致的系统往往比较难实现。很多时候,人们发现实际需求并没有那么强,可以适当放宽一致性要求,降低系统实现的难度。例如在一定约束下实现所谓最终一致性(Eventual Consistency),即总会存在一个时刻(而不是立刻),系统达到一致的状态,这对于大部分 的 Web 系统来说已经足够了。这一类弱化的一致性,被笼统称为弱一致性(Weak Consistency)。

莫非分布式领域也有一个测不准原理?这个世界为何会有这么多的约束呢?

共识算法

实际上,要保障系统满足不同程度的一致性,往往需要通过共识算法来达成。

共识算法解决的是对某个提案(Proposal),大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等,可以认为任何需要达成一致的信息都是一个提案。

注:实践中,一致性的结果往往还需要客户端的特殊支持,典型地通过访问足够多个服务节点来验证确保获取共识后结果。

问题挑战

实际上,如果分布式系统中各个节点都能保证以十分强大的性能(瞬间响应、高吞吐)无故障的运行,则实现共识过程并不复杂,简单通过多播过程投票即可。

很可惜的是,现实中这样“完美”的系统并不存在,如响应请求往往存在时延、网络会发生中断、节点会发生故障、甚至存在恶意节点故意要破坏系统。 一般地,把故障(不响应)的情况称为“非拜占庭错误”,恶意响应的情况称为“拜占庭错误”(对应节点为拜占庭节点)。

常见算法

针对非拜占庭错误的情况,一般包括 Paxos、Raft 及其变种。

对于要能容忍拜占庭错误的情况,一般包括 PBFT 系列、PoW 系列算法等。从概率角度, PBFT 系列算法是确定的,一旦达成共识就不可逆转;而 PoW 系列算法则是不确定的,随着时间推移,被推翻的概率越来越小。

理论界限

搞学术的人都喜欢对问题先确定一个界限,那么,这个问题的最坏界限在哪里呢?很不幸,一般情况下,分布式系统的共识问题无解。 当节点之间的通信网络自身不可靠情况下,很显然,无法确保实现共识。但好在,一个设计得当的网络可以在大概率上实现可靠的通信。 然而,即便在网络通信可靠情况下,一个可扩展的分布式系统的共识问题的下限是无解。 这个结论,被称为 FLP 不可能性 原理,可以看做分布式领域的“测不准原理”。

FLP 不可能性原理

FLP 不可能原理:在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。

提出该定理的论文是由 Fischer, Lynch 和 Patterson 三位作者于 1985 年发表,该论文后来获得了 Dijkstra(就是发明最短路径算法的那位)奖。

FLP 不可能原理实际上告诉人们,不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法。

理解这一原理的一个不严谨的例子是:
三个人在不同房间,进行投票(投票结果是	0	或者	1)。三个人彼此可以通过电话进行沟通,但经常会有人时不时地睡着。比如某个时候,A	投票	0,B	投票	1,C	收到了两人的投
票,然后	C	睡着了。A	和	B	则永远无法在有限时间内获知最终的结果。如果可以重新投票,则类似情形每次在取得结果前发生:(

FLP 原理实际上说明对于允许节点失效情况下,纯粹异步系统无法确保一致性在有限时间内完成。

这岂不是意味着研究一致性问题压根没有意义吗?

先别这么悲观,学术界做研究,考虑的是数学和物理意义上最极端的情形,很多时候现实生活要美好的多(感谢这个世界如此鲁棒!)。例如,上面例子中描述的最坏情形,总会发生的概率并没有那么大。工程实现上多试几次,很大可能就成功了。

科学告诉你什么是不可能的;工程则告诉你,付出一些代价,我可以把它变成可能。

这就是工程的魅力。

那么,退一步讲,在付出一些代价的情况下,我们能做到多少?回答这一问题的是另一个很出名的原理:CAP 原理。

科学上告诉你去赌场赌博从概率上总会是输钱的;工程则告诉你,如果你愿意接受最终输钱的结果,中间说不定偶尔能小赢几笔呢!?

CAP 原理

CAP 原理最早由 Eric Brewer 在 2000 年,ACM 组织的一个研讨会上提出猜想,后来 Lynch 等人进行了证明。 该原理被认为是分布式系统领域的重要原理。

定义

分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性 (Partition),设计中往往需要弱化对某个特性的保证。

  • 一致性(Consistency):任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这里指的是强一致性;
  • 可用性(Availablity):在有限时间内,任何非失败节点都能应答请求;
  • 分区容忍性(Partition):网络可能发生分区,即节点之间的通信不可保障。 比较直观地理解,当网络可能出现分区时候,系统是无法同时保证一致性和可用性的。要么,节点收到请求后因为没有得到其他人的确认就不应答,要么节点只能应答非一致的结果。

好在大部分时候网络被认为是可靠的,因此系统可以提供一致可靠的服务;当网络不可靠时,系统要么牺牲掉一致性(大部分时候都是如此),要么牺牲掉可用性。

应用场景

既然 CAP 不可同时满足,则设计系统时候必然要弱化对某个特性的支持。

弱化一致性

对结果一致性不敏感的应用,可以允许在新版本上线后过一段时间才更新成功,期间不保证一致性。

例如网站静态页面内容、实时性较弱的查询类数据库等,CouchDB、Cassandra 等为此设计。

弱化可用性

对结果一致性很敏感的应用,例如银行取款机,当系统故障时候会拒绝服务。MongoDB、 Redis 等为此设计。

Paxos、Raft 等算法,主要处理这种情况。

弱化分区容忍性

现实中,网络分区出现概率减小,但较难避免。某些关系型数据库、ZooKeeper 即为此设计。

实践中,网络通过双通道等机制增强可靠性,达到高稳定的网络通信。 

ACID 原则

即 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

ACID 原则描述了对分布式数据库的一致性需求,同时付出了可用性的代价。

  • Atomicity:每次操作是原子的,要么成功,要么不执行;
  • Consistency:数据库的状态是一致的,无中间状态;
  • Isolation:各种操作彼此互相不影响;
  • Durability:状态的改变是持久的,不会失效。 一个与之相对的原则是 BASE(Basic Availiability,Soft state,Eventually Consistency),牺牲掉对一致性的约束(最终一致性),来换取一定的可用性。

Paxos 与 Raft

Paxos 问题是指分布式的系统中存在故障(fault),但不存在恶意(corrupt)节点场景(即可能消息丢失或重复,但无错误消息)下的共识达成(Consensus)问题。因为最早是 Leslie Lamport 用 Paxon 岛的故事模型来进行描述而命名。

Paxos

1990 年由 Leslie Lamport 提出的 Paxos 共识算法,在工程角度实现了一种最大化保障分布 式系统一致性(存在极小的概率无法实现一致)的机制。Paxos 被广泛应用在 Chubby、 ZooKeeper 这样的系统中,Leslie Lamport 因此获得了 2013 年度图灵奖。 故事背景是古希腊 Paxon 岛上的多个法官在一个大厅内对一个议案进行表决,如何达成统一的结果。他们之间通过服务人员来传递纸条,但法官可能离开或进入大厅,服务人员可能偷懒去睡觉。

Paxos 是第一个被证明的共识算法,其原理基于 两阶段提交 并进行扩展。

作为现在共识算法设计的鼻祖,以最初论文的难懂(算法本身并不复杂)出名。算法中将节点分为三种类型:

  • proposer:提出一个提案,等待大家批准为结案。往往是客户端担任该角色;

  • acceptor:负责对提案进行投票。往往是服务端担任该角色;

  • learner:被告知结案结果,并与之统一,不参与投票过程。可能为客户端或服务端。 并且,算法需要满足 safety 和 liveness 两方面的约束要求(实际上这两个基础属性是大部分分布式算法都该考虑的):

  • safety:保证决议结果是对的,无歧义的,不会出现错误情况。决议(value)只有在被 proposers 提出的 proposal 才能被最终批准;在一次执行实例中,只批准(chosen)一个最终决议,意味着多数接受(accept)的结果能成为决议;

  • liveness:保证决议过程能在有限时间内完成。决议总会产生,并且 learners 能获得被批准(chosen)的决议。

基本过程包括 proposer 提出提案,先争取大多数 acceptor 的支持,超过一半支持时,则发送结案结果给所有人进行确认。一个潜在的问题是 proposer 在此过程中出现故障,可以通过超时机制来解决。极为凑巧的情况下,每次新的一轮提案的 proposer 都恰好故障,系统则永远无法达成一致(概率很小)。

Paxos 能保证在超过 的正常节点存在时,系统能达成共识。读者可以试着自己设计一套能达成共识的方案,会发现在满足各种约束情况下,算法自然就会那样设计。

单个提案者+多接收者

如果系统中限定只有某个特定节点是提案者,那么一致性肯定能达成(只有一个方案,要么达成,要么失败)。提案者只要收到了来自多数接收者的投票,即可认为通过,因为系统中不存在其他的提案。

但一旦提案者故障,则系统无法工作。

多个提案者+单个接收者

限定某个节点作为接收者。这种情况下,共识也很容易达成,接收者收到多个提案,选第一个提案作为决议,拒绝掉后续的提案即可。

缺陷也是容易发生单点故障,包括接收者故障或首个提案者节点故障。

以上两种情形其实类似主从模式,虽然不那么可靠,但因为原理简单而被广泛采用。

当提案者和接收者都推广到多个的情形,会出现一些挑战。

多个提案者+多个接收者

既然限定单提案者或单接收者都会出现故障,那么就得允许出现多个提案者和多个接收者。

问题一下子变得复杂了。

一种情况是同一时间片段(如一个提案周期)内只有一个提案者,这时可以退化到单提案者的情形。需要设计一种机制来保障提案者的正确产生,例如按照时间、序列、或者大家猜拳 (出一个数字来比较)之类。考虑到分布式系统要处理的工作量很大,这个过程要尽量高效,满足这一条件的机制非常难设计。

另一种情况是允许同一时间片段内可以出现多个提案者。那同一个节点可能收到多份提案,怎么对他们进行区分呢?这个时候采用只接受第一个提案而拒绝后续提案的方法也不适用。很自然的,提案需要带上不同的序号。节点需要根据提案序号来判断接受哪个。比如接受其中序号较大(往往意味着是接受新提出的,因为旧提案者故障概率更大)的提案。

如何为提案分配序号呢?一种可能方案是每个节点的提案数字区间彼此隔离开,互相不冲突。为了满足递增的需求可以配合用时间戳作为前缀字段。 此外,提案者即便收到了多数接收者的投票,也不敢说就一定通过。因为在此过程中系统可能还有其它的提案。两阶段的提交提案者发出提案之后,收到一些反馈。一种结果是自己的提案被大多数接受了,另一种结果是没被接受。没被接受的话好说,过会再试试。

即便收到来自大多数的接受反馈,也不能认为就最终确认了。因为这些接收者自己并不知道自己刚反馈的提案就恰好是全局的绝大多数。

很自然的,引入了新的一个阶段,即提案者在前一阶段拿到所有的反馈后,判断这个提案是可能被大多数接受的提案,需要对其进行最终确认。 Paxos 里面对这两个阶段分别命名为准备(prepare)和提交(commit)。准备阶段解决大家对哪个提案进行投票的问题,提交阶段解决确认最终值的问题。

准备阶段:

  • 提案者发送自己计划提交的提案的编号到多个接受者,试探是否可以锁定多数接受者的支持。
  • 接受者时刻保留收到过提案的最大编号和接受的最大提案。如果收到的提案号比目前保留的最大提案号还大,则返回自己已接受的提案值(如果还未接受过任何提案,则为空)给提案者,更新当前最大提案号,并说明不再接受小于最大提案号的提案。 提交阶段:
  • 提案者如果收到大多数的回复(表示大部分人听到它的请求),则可准备发出带有刚才提案号的接受消息。如果收到的回复中不带有新的提案,说明锁定成功,则使用自己的提案内容;如果返回中有提案内容,则替换提案值为返回中编号最大的提案值。如果没收到足够多的回复,则需要再次发出请求。
  • 接受者收到接受消息后,如果发现提案号不小于已接受的最大提案号,则接受该提案,并更新接受的最大提案。

一旦多数接受了共同的提案值,则形成决议,成为最终确认的提案。

Raft

Raft 算法是Paxos 算法的一种简化实现。 包括三种角色:leader、candidate 和 follower,其基本过程为:

  • Leader 选举:每个 candidate 随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为 leader;
  • 同步 log:leader 会找到系统中 log 最新的记录,并强制所有的 follower 来刷新到这个记录; 注:此处 log 并非是指日志消息,而是各种事件的发生记录。

拜占庭问题与算法

拜占庭问题更为广泛,讨论的是允许存在少数节点作恶(消息可能被伪造)场景下的一致性达成问题。拜占庭算法讨论的是最坏情况下的保障。

中国将军问题

拜占庭将军问题之前,就已经存在中国将军问题:两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致。根据 FLP 不可能原理,这个问题无解。

拜占庭问题

又叫拜占庭将军(Byzantine Generals Problem)问题,是 Leslie Lamport 1982 年提出用来解释一致性问题的一个虚构模型。拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军(系统中的多个节点)需要通过信使来传递消息,达成某些一致的决定。但由于将军中可能存在叛徒(系统中节点出错),这些叛徒将努力向不同的将军发送不同的消息,试图会干扰一致性的达成。

拜占庭问题即为在此情况下,如何让忠诚的将军们能达成行动的一致。

对于拜占庭问题来说,假如节点总数为 N,叛变将军数为 F,则当 时,问题才有解,即 Byzantine Fault Tolerant (BFT) 算法。 例如, 时。 提案人不是叛变者,提案人发送一个提案出来,叛变者可以宣称收到的是相反的命令。则对于第三个人(忠诚者)收到两个相反的消息,无法判断谁是叛变者,则系统无法达到一致。

提案人是叛变者,发送两个相反的提案分别给另外两人,另外两人都收到两个相反的消息,无法判断究竟谁是叛变者,则系统无法达到一致。 更一般的,当提案人不是叛变者,提案人提出提案信息 ,则对于合作者来看,系统中会有 份确定的信息 ,和 份不确定的信息(可能为 或 ,假设叛变者会尽量干扰一致的达成), 情况下才能达成一致。

当提案人是叛变者,会尽量发送相反的提案给 个合作者,从收到 的合作者看来,系统中会存在 个信息 ,以及 个信息 ;从收到 的合作者看来,系统中会存在 个信息 ,以及 个信息 ; 拜占庭问题与算法 另外存在 个不确定的信息。合作者要想达成一致,必须进一步的对所获得的消息进行判定,询问其他人某个被怀疑对象的消息值,并通过取多数来作为被怀疑者的信息值。这个过程可以进一步递归下去。

Leslie Lamport 证明,当叛变者不超过 时,存在有效的算法,不论叛变者如何折腾,忠诚的将军们总能达成一致的结果。如果叛变者过多,则无法保证一定能达到一致性。

多于 的叛变者时有没有可能有解决方案呢?设想 个叛变者和 个忠诚者,叛变者故意使坏,可以给出错误的结果,也可以不响应。某个时候 个叛变者都不响应,则 个忠诚者取多数既能得到正确结果。当 个叛变者都给出一个恶意的提案,并且 个忠诚者中有 个离线时,剩下的 个忠诚者此时无法分别是否混入了叛变者,仍然要确保取多数能得到正确结果,因此, ,所以系统整体规模要大于 。

能确保达成一致的拜占庭系统节点数至少为 4,允许出现 1 个坏的节点。

Byzantine Fault Tolerant 算法

面向拜占庭问题的容错算法,解决的是网络通信可靠,但节点可能故障情况下的一致性达成。

最早由 Castro 和 Liskov 在 1999 年提出的 Practical Byzantine Fault Tolerant(PBFT)是第一个得到广泛应用的 BFT 算法。只要系统中有 的节点是正常工作的,则可以保证一致性。

PBFT 算法包括三个阶段来达成共识:Pre-Prepare、Prepare 和 Commit。

新的解决思路

拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且要完成最终的一致性确认过程十分困难,容易受干扰。但是一旦确认,即为最终确认。

比特币的区块链网络在设计时提出了创新的 PoW(Proof of Work) 算法思路。一个是限制一段时间内整个网络中出现提案的个数(增加提案成本),另外一个是放宽对最终一致性确认的需求,约定好大家都确认并沿着已知最长的链进行拓宽。系统的最终确认是概率意义上的存在。这样,即便有人试图恶意破坏,也会付出很大的经济代价(付出超过系统一半的算力)。

后来的各种 PoX 系列算法,也都是沿着这个思路进行改进,采用经济上的惩罚来制约破坏者。

可靠性指标

很多领域一般都喜欢谈服务可靠性,用几个 9 来说事。这几个 9 其实是粗略代表了概率意义上系统能提供服务的可靠性指标,最初是电信领域提出的概念。下表给出不同指标下,每年允许服务出现不可用时间的参考值。

指标 概率可靠性 每年允许不可用时间 典型场景
一个九 90% 1.2 个月 不可用
二个九 99% 3.6天 普通单点
三个九 99.9% 8.6 小时 普通企业
四个九 99.99% 51.6 分钟 高可用
五个九 99.999% 5 分钟 电信级
六个九 99.9999% 31 秒 极高要求
七个九 99.99999% 3 秒 N/A
八个九 99.999999% 0.3 秒 N/A
九个九 99.9999999% 30 毫秒 N/A

一般来说,单点的服务器系统至少应能满足两个九;普通企业信息系统三个九就肯定足够了(大家可以统计下自己企业内因系统维护每年要停多少时间),系统能达到四个九已经是业界领先水平了(参考 AWS)。电信级的应用一般号称能达到五个九,这已经很厉害了,一年里面最多允许五分钟的服务停用。六个九和以上的系统,就更加少见了,要实现往往意味着极高的代价。

那么,该如何提升可靠性呢?有两个思路:一是让系统中的单点变得更可靠;二是消灭单点。

IT 从业人员大都有类似的经验,运行某软系统的机器,基本上是过几天就要重启下的;而运行 Linux 系统的服务器,则可能几年时间都不出问题。另外,普通的家用计算机,跟专用服务器相比,长时间运行更容易出现故障。这些都是单点可靠性不同的例子。可以通过替换单点的软硬件来改善可靠性。

然而,依靠单点实现的可靠性毕竟是有限的,要想进一步的提升,那就只好消灭单点,通过主从、多活等模式让多个节点集体完成原先单点的工作。这可以从概率意义上改善服务的可靠性,也是分布式系统的一个重要用途。

小结

分布式系统领域是计算机科学中十分重要的一个技术领域。

常见的分布式一致性是个古老而重要的问题,无论在学术上还是工程上都存在很高的价值。

理想化(各项指标均最优)的解决方案是不存在的。

在现实各种约束条件下,往往需要通过牺牲掉某些需求,来设计出满足特定场景的协议。

其实,工程领域中很多问题的解决思路,都在于如何合理地进行取舍(trade-off)。

Clone this wiki locally