坚硬的区块链

2018 年 6 月 14 日

现在区块链的风这么大,很多猪都挤过来等着上天。那些喜欢炒作的人把区块链说的天花乱坠,比如区块链可以:

  • 解决收入不公问题
  • 保证所有数据永远都是安全的
  • 所有事情的效率都能得到极大的提升,并且不再需要建立互信关系
  • 挽救濒死的婴儿

但区块链究竟是什么?它真能解决这些问题吗?健康医疗、金融、供应链管理和音乐版权这些看起来毫不相关的行业真的都能从区块链中获益吗?

并且不挺比特币是不是意味着你更关注区块链?如果你支持比特币的话,怎么可能会说其底层技术的坏话呢?

我想用这篇文章解释一下区块链是什么,以及它不是什么(从目前的情况来看,这一点更重要),从而给出这些问题的答案。

区块链是什么?

为了检验那些神乎其神的传言,我们必须先厘清各种含糊不清的说法,给区块链一个明确的定义。很多公司用“区块链”这个词指代某种神奇的设备,以表明他们的数据永远不会出错。当然,这样的设备在现实生活中是不存在的。

那么区块链究竟是什么?从技术角度来讲,区块链是很多区块连在一起形成的链条,每个区块中都是一组有序的交易。如果你没看懂最后一句,可以把区块链当作数据库的一个子集,只是新增了一些特性。

区块链不同于普通数据库,最明显之处在于它对数据的具体约束。首先,不能跟数据库中已有的数据冲突(一致性);其次,数据只能追加(不可修改);再次,数据是锁定到数据所有者的(所有权明确);还有就是它的可复制性和可用性。最后,大家不需要通过一个中心权威来就数据库处于什么样的状态达成一致(去中心化)。

正是最后这一点让区块链熠熠生辉,卓然于世。去中心化之所以有这么大的吸引力,是因为它隐含着没有单点故障的保证。也就是说,不会出现能夺走你的资产的中心权威,“历史”也不会变成任人打扮的小姑娘。有了这种不可变的审计线索,你不再需要跟参与其中的任何人建立信任关系,想要使用区块链技术的人看重的正是这一点。但是,为了得到这种好处所需付出的代价也是巨大的。

区块链的代价

不受任何单点控制的不可变审计线索肯定是有价值的,但创建一个这样的系统也需要付出很多代价。

开发更严格,速度更慢

创建一个可证明一致性系统并不容易。一个小 bug 就可能把整个数据库搞垮,或者让某些数据库变得不同于其他数据库。当然,垮掉的数据库或出现分歧的数据库根本谈不上一致性。更进一步说,所有这样的系统从一开始就必须设计成一致的。在区块链中没有“快速前进,打破陈规”。如果常规被打破了,就失去了一致性,区块链也就没有价值了。

你可能会想,把数据库修好或者从头再来不就行了吗?在中心化系统上确实可以这样做,但对于去中心化系统而言,这非常困难。为了修改数据库,需要让系统的所有参与者达成一致。区块链必须是公共资源,不受任何单一实体的控制。还记得吗?它可是去中心化的。否则全部努力就是以昂贵的代价创建一个缓慢的中心数据库。

激励结构是个难题

确定恰当的激励结构,确保系统的所有参与者不能滥用或拖垮这个数据库同样是个大问题。区块链可以实现一致性,但如果添加数据的成本太低,导致存储的都是一些无聊的,或没什么用的数据,那这种一致性也没多大用处。反过来看,如果添加数据的成本过高,导致其中几乎没什么数据,那这种区块链也没多大用处。

是什么让数据最终确定下来的?怎么保证奖励符合网络的目标?网络中的节点为什么要保留或更新数据?发生冲突时它们怎么选择数据?这些都是与激励有关的问题,每一个都需要经过深思熟虑后认真解答,即便将来技术和公司变了,答案也要一直保持一致,否则区块链就没用。

还是那个问题,你可能在想为什么不能“修补”那些出了问题的激励机制。同样,在中心化系统上确实可以这样做,但对于去中心化系统而言,不达成共识什么也改不了。除非征得所有人的同意,否则根本没有“修补”这回事。

维护成本非常高

传统的中心数据库只需要写入一次,而区块链需要写入成千上万次。传统的中心数据库只需要检查一次数据,而区块链需要检查成千上万次。为了存储,传统的中心数据库只需要传输一次数据,而区块链需要传输成千上万次。

区块链的维护成本要比维护传统数据库高几个数量级,并且需要根据应用进行调整。对于之前提到的那些特性,比如一致性和可靠性,大多数程序都可以通过完整性检查、单据和备份等方式达成,但总体成本要比用区块链便宜得多。

用户做主

对于那些不想因为持有用户数据而承担责任的公司来说,这真的是个好消息。然而,如果用户“行为不当”,那就糟糕了。即便用户不停地往你的区块链中倾倒垃圾数据,你也不能把他踢出去;对那些损人利己的狡猾用户,你也不能把他怎么样。我们前面说过,激励结构必须设计得非常非常精良,让用户明白利用漏洞不会有什么好处,特别是在有利可图时。

你可能觉得只要拒绝那些恶意用户不就完了吗,这在中心化系统中很容易。但对于去中心化服务而言,每个实体都不能单独做出拒绝任何一个用户的决定,所以想拒绝恶意用户是很难的。区块链必须公正,要强化软件定义的规则。如果规则不足以震慑恶行,那你就等着遭殃吧。这里毫无法治精神可言,只能跟恶意或行为不当的参与者对抗,并且这可能是个长期的过程。

所有升级都是自愿的

强制升级?没门儿。网络中的其他用户没有义务改用你的软件。如果他们有这个义务,那你们应该可以用一个搭建起来更容易、更快和更便宜的中心化系统。区块链的价值在于它不受任何单一实体的控制,这跟强制升级是矛盾的。

既然如此,那么所有升级自然都必须是向后兼容的。这显然非常困难,特别是你想添加新功能时。从测试的角度来看,这就更加困难了。软件的每个版本都会往测试矩阵中添加很多东西,这也大大延后了发布的时间。

又来了,如果是中心化系统,只要不再为旧系统提供服务就可以解决这个问题。但在去中心化系统中不行,因为不能强迫任何人做任何事情。

扩展真的很难

最后,区块链的扩展难度至少要比传统的中心化系统高几个数量级。这是显而易见的。区块链必须在成百上千个节点上存储相同的数据,但中心化系统的数据只需要放在一个地方。每个数据库副本都要付出数据传输、验证和存储的开销,而在传统的中心数据库上,这些都是单点开销。

当然,可以通过削减节点数量来降低成本。那么话说回来,你究竟为什么需要一个去中心化的系统呢?如果扩展成本是要重点考虑的问题,为什么不用中心数据库呢?

中心化要容易得多

如果你留心了,就会发现去中心化系统非常难以使用,维护起来代价高昂,不好升级,并且难以扩展。跟区块链比起来,中心数据库要快得多,廉价得多,也更容易维护和升级。那为什么人们还在不断地述说着区块链的好处,好像它是包治百病的灵丹妙药?

首先,那些被兜售区块链的行业,他们的 IT 基础设施真的早就应该升级了。健康医疗行业的软件是出了名的差劲;金融业还在用着 70 年代的软件;供应链管理软件既不好用,也不好装。对于升级,这些行业的大多数公司都是抗拒的,因为升级的风险太大了。很多基础设施的升级动辄耗费数以亿计的资金,但最后却不得不退回到原来的状态。区块链是撬动这些 IT 基础设施升级的手段,足以吊起他们的胃口。

其次,满口区块链会让人觉得你站在科技最前沿。不管怎么说,“区块链”这个词已经成精了。尽管真正明白区块链究竟是什么的人很少,但为了让自己看起来更聪明,不多说几个这种流行词是不行的。就好像“云”就是别人的电脑,“AI”就是调整过的算法,“区块链”在这时候就变成了缓慢的、昂贵的数据库。

第三,有些人真的不想让政府控制某些行业,还想在效率低下的法律框架之外再找一种裁决机制。对于这些人而言,“区块链”只是逃离政府监管重压的一种途径。这真的是对区块链期望过高了,它还没神奇到能一下子解决人类冲突的地步。

结果就是很多人还没搞明白区块链的真实能力和高昂成本,就迫不及待地加入了炒作大军。更糟的是,很多风投和高管看不到被抽离的技术细节和成本,因此对区块链能做什么和不能做什么的认识是模糊的。而他们下面的人就像皇帝的新衣里那些大臣一样,没有人敢说出真相。

那区块链能做什么?

我想我们已经达成共识了,现在大家都知道区块链要比中心化数据库贵得多了吧?所以使用区块链的唯一原因就是去中心化,即排除单点故障或中心控制。

这自然意味着软件或数据库最好能保持不变,或退而求其次,尽量少变!对于这样的系统而言,升级应该没什么好处,规则的破坏或改变则极其不利。

大多数行业都不是这样的。几乎所有行业都想要新功能,想要升级,如果有必要的话,可以随意修改和扩张。既然区块链难以升级、难以修改、难以扩展,显然不符合大多数行业的需要。

不过我们找到了一个例外,钱。钱的用例跟大多数行业的用例不同,它最好能保持不变。对于钱来说,规则的不可变性和难以修改绝对是优点,这没什么不好的。所以比特币用区块链作为其底层技术是再自然不过的选择。

事实很清楚,很多公司研究区块链的使用并不是真的想要区块链,而是希望对他们那个行业的 IT 系统进行升级。这无可厚非,我们也乐见其成,但为此把“区块链”搬出来是不诚实的,也是高估了它的能力。

结论

这些日子区块链很火,并且很不幸,“要区块链不要比特币”这种说法还会存在很长时间。如果你是提供中心化服务的,那些你用便宜上千倍的中心数据库做不了的事情,区块链也做不了。如果你说自己就是做去中心化服务的,那我希望你再认真考虑一下,你的系统中有没有单点故障?我怀疑你只是在欺骗自己,因为在真正去中心化的系统中,根本没有“你”。

整篇文章中最大的笑话

区块链目前这种现状让我想起了以前。在 21 世纪之初,科技行业的很多高管都在推行 Java 和 XML。尽管这两个都只是技术,不是真正的产品,但很多高管坚持要用,根本不管这两项技术跟他们的工程师想要达成的目标多么不匹配。历史真的会重演!把注意力放在你要解决的问题上,合适的工具自然会出现。一直盯着工具,最终做出来的就是干啥啥不行的鲁布·戈德堡机

我有种感觉,目前流行的这个区块链概念要完成一件不可能的任务。他们想把去中心化系统的安全性和中心化系统的可控性糅合到一起。其初衷是想要两全其美,但估计最终会鸡飞蛋打。克服了去中心化系统的困难,付出了去中心化系统的高昂代价,结果得到的是中心化系统的失效模式。

区块链现在已经沦为街头艺人兜售大力丸的把戏了。真的希望这阵风潮快点过去,到时候我们就可以安安静静地秉承初心,砥砺前行!

感谢杜小芳对本文的策划。

2018 年 6 月 14 日 16:341143

评论

发布
暂无评论
发现更多内容

架构师训练营第十二周总结

张明森

30年技术积累,技术流RTC如何成为视频直播领域的黑马?

华为云开发者社区

云计算 AI 5G RTC 华为云

大事情!中国限制 AI 算法出口。网友:这是要阻止XX“下跪”

程序员生活志

5G边缘计算:开源架起5G MEC生态发展新通路

华为云开发者社区

开源 5G 边缘计算 公有云 EdgeGallery

一键洞察全量SQL ,远离性能异常

华为云开发者社区

数据库 sql 大数据 数据治理 华为云

一个空格引发的“救火之旅” - 记一次 SOFA RPC 的排查过程

阿里云金融线TAM SRE专家服务团队

架构师训练营第十二周作业

张明森

k8s-client-go源码剖析(二)

LanLiang

go Kubernetes 源码剖析

软件产品的创新与宇宙奇点大爆炸

常平

方法论 产品思维 架构思维

银行大数据新玩法,构建“一湖两库”金融数据湖

华为云开发者社区

大数据 数据湖 FusionInsight MRS DWS

区块链支付系统开发方案,usdt跑分系统搭建

WX13823153201

ARTS Week14

时之虫

ARTS 打卡计划

pandas ~基础pandas

南辞

Python

高并发系统三大利器之降级

java金融

ARTS打卡 第14周

引花眠

微服务 ARTS 打卡计划

Ray 分布式计算框架详解

lipi

分布式 数据湖 pandas Apache Arrow

【读书笔记一】《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 阿里 中台战略

Docker 镜像的备份恢复迁移

哈喽沃德先生

Docker 容器 微服务 镜像 容器技术

小小的分页引发的加班血案

架构师修行之路

架构

基于Apache Doris的小米增长分析平台实践

DorisDB

数据分析 用户增长 apache doris 分析型数据库 用户行为分析

雪花算法把玩

ElvinYang

oeasy教您玩转linux010109clear清屏

o

面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》

小傅哥

Java 数据结构 小傅哥 面试题 linkedlist

LeetCode 5. Longest Palindromic Substring

liu_liu

算法 LeetCode

翻转链表算法、自动化测试框架robot-framework、两款iOS 在手机端debugging 工具Flex、啄木鸟、加密技术 高可用系统的度量 高可用系统的架构 高可用系统的运维 John 易筋 ARTS 打卡 Week 15

John(易筋)

ARTS 打卡计划 高可用系统的架构 翻转链表 自动化测试Robot 手机调试工具Flex

麦叔告诉你,Linux下安装nginx都踩了那些坑

麦叔

nginx Linux

Flink检查点、保存点及状态恢复-13

小知识点

scala 大数据 flink

LeetCode题解:155. 最小栈,单个栈同时存储最小值,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

oeasy教您玩转linux010108到底哪个which

o

mPaas研发流程和线上运维介绍

阿里云金融线TAM SRE专家服务团队

ios android

JVM 内存模型、字节码、垃圾回收面试要点

escray

学习 面试 垃圾回收 字节码 面试现场

坚硬的区块链-InfoQ