本文是【 李先生带你玩CITA】系列技术文章开篇。作者 leeyr 来自于杭州溪塔科技的一名底层区块链工程师,他从自身角度出发分享了对区块链的理解,希望能与大家一起讨论。关注公众号:溪塔科技,回复“交流群”,加入到区块链开源社区 CITAHub 大家庭中。
分享正文:
非常有幸,今天参加了溪塔科技的产品分享会。会上有朋友问到:“我们现在的区块链技术与传统的云计算,或大厂的 BAAS 核心差异是什么?”那今天我借此机会就在这里聊聊我眼中的区块链技术。先声名一下,文件中所有技术观点均仅代表我个人观点,也不具备权威性。供大家一起讨论。
系统抽象
首先,我认为区链是一个分布式计算机系统。为了方便后文的描述,我先对分布式计算要系统个简单的抽象。
我先将每台计算机抽象成计算、存储、网络三个部分,我的定义如下:
- 存储:对数据进行执久化存储的硬件及软件。
- 计算:对原始输入数据进行处理,输出新数据的硬件及软件。
- 网络:将单个计算单元进行互连互通的硬件及软件。
基于此,我就将分布式计算机系统定义为:各个独立的计算机单元通过网络连接在一起,共同组成特定的功能形态,从而形成分布式计算机系统。
那接下我将从以上三方面,分别谈一下我对区块链技术的理解。
存储
讲到存储,我先从大家熟悉的单计算机单元存储说起。
单计算机存储,上面有一块磁盘(即使有些有两块及上磁盘,但也不做冗余存储)。存储数据(如一张照片)的操作,就是将数据存到这块磁盘上;在需要查看时,可以随时打开这台计算机,将数据从磁盘读取出来。
在这样的存储场景下会发现:
- 数据会因单个磁盘损坏而丢失;
- 单个磁盘容量有限,数据量大时,无法再存储。
在个人使用上,一般不会有太大的问题,但在企业级应用场景下,以上两个缺点往往就变得不可接受。其选择可以是专用的存储服务器(如 EMC 的存储设备)。
存储服务器采用很多磁盘组成磁盘阵列, 当存储为数据时,会首先将数据分片,每个分片存在不同的磁盘下,并且使用数据分片计算校验片,将校验分片也存于不同的磁盘中,形成冗余存储(如RAID5)。
当单块磁盘损坏时,可自动恢复数据;也可以从一定程度上解决了存储容量问题。存储服务器有很多好处,比如性能非常高。数据隐私好。但它也存在一些问题,如:
- 存储服务器整体损坏会导致数据丢失。
- 单台存储服务器下电(停电),存储服务不可用。
- 磁盘容量仍有上限。
当然了,专用的存储服务器是非常昂贵的。为了解决以上问题,现在大家可能更倾向于使用分布式存储。
分布式存储将数据冗余存储在不同的物理位置多台计算机单元上。可解决:
- 因单个存储节点损坏而导致数据丢失;因单个存储节点不在线而导致存储服务不可用;
- 存储容量在理论上没有上限。
现在大家好像对分布式存储用得都挺好的。那么,有没有想过分布式存储的以下问题呢?
- 当前分布式存储解决方案均在一个企业内部,即所有的存储节点对企业内部均可信。存储并不能跨企业的不可信边界。
- 对于最终的存储消费都而言,数据可能因企业倒闭而丢失。
- 数据受控于某家企业,可能存在隐私及数据泄漏风险。
那么针对以上问题,区块链技术是一个可行的方案。(也许它不是一个唯一的方案)
采用区块链技术的存储(如存证)是将数据冗余正确存储到很多不同物理位置且相互不可信的存储节点上。
要做到以上几点是不容易的,需要使用一些技术手段来保证。
1.首先面临的问题是:
数据正确存储:任何时间从任一存储节点均可以读取到一致的数据,且与存储时相同。
要做到这一点就要引入共识机制 (做过区块链的朋友也许就会知道,要在一个不可信的分布式场景下做出一致性的共识不是一件容易的事,需要有诸多难点需要解决,在此不展开。),要求所有节点写入的数据都是一致的。而 CITA 当前采用的是类 PBFT 共识,大概思路是一次只选择一个存储节点可以写数据;其它节点同步并验证数据。
2.接下来,面临的第二个难点是:
存储节点相互不可信,保证数据不被单个存储节点更改。其中包括已经正在写入的数据及已经写入的数据。简单地说,你可以看到数据,但不是你想改就能任性地改。
区块链解决的技术是:
- 数据根据时间线形成链结构 (区块链),其中任何数据变改,都会使数据验证不通过。
- 所有存储写点验证所写入的数据。
最后,区块链上的数据还有一个问题,就是数据的归属权确认,也就是怎么知道谁拥有哪些数据。
现在大家也许都知道了,是通过非对称加密 & 数字签名来达成的。拥有数据对应的私钥即拥有对应数据的操控能力。
计算
区块链上的计算我简单定义是:将区块链中的数据作为输入(可选),经过计算,输出新的数据,重新写回区块链中。
从技术角度看,其中有两种可行方案:
- 计算程序放到链外(不属于链的数据),区块链对程序输出的新数据进行验证。比特币的 UTXO 模型采用的是这种方案;
- 将计算程序放到链上(计算程序属于链的数据),以太坊的智能合约属于这种方案。
简单理解为链外计算与链上计算。链外计算其实就是把计算好的结果放到链上,让区块链去验证计算结果。而链上计算指的是计算的程序本身也在链上,其有以下几个特征:
- 无差别地被安装到所有区块链节点;
- 一旦部署,不可更改;
- 当智能合约被调用时,所有区块链节点都会执行,其安全性要求非常高;
- 要求智能合约在沙盒 (VM)执行,防止由于智能合约执行出问题而导致整个区块链网络宕机。
- 要求智能合约能够停机。
网络
区块链上每个节点都是平等的,采用的是点对点网络。意味着所有符合该区块链网络协议的节点,都可以自由接入这个网络。这是一般的公链设计方案。
但在联盟链设计中,往往需要受限接入。而受限又可分为节点接入受限与用户接入受限。
节点受限接入,采用的方案可以有:
- 数字证书 (CA) 接入;
- 节点黑白名单;
- 节点防火墙;
而用户受限接入,往往可以采用 KYC 方案。
总结
通过以上的分析说明,我认为:
区块链技术是一组在不可信的分布式系统中解决可信存储及计算的技术集合。通过区块链技术,可以实现跨信任主体(包括但不限于个人和企业)的可信协作。
那么回答一开始提出的问题:“我们现在的区块链技术与传统的云计算,或大厂的 BAAS 核心差异是什么?”
传统的云计算或大厂,其信任边界是其服务商自己。你使用它的服务,你就无条件信任它,此时,它的作恶成本,在技术上是很低的。
而在区块链开源社区 CITAHub 中,其信任边界是整个联盟所有成员,甚是你自己(如果你是联盟成员的话,而且在你需要的时候,你随时选择加入)。而对于使用我们服务的用户来说,他信任的是联盟集体,而联盟中单个个体的作恶成本,在技术上是不可行的。
那我今天就分享到这里,欢迎留下你不同的观点。谢谢阅读!
关于溪塔科技
溪塔科技(Rivtower Co.,Ltd.)致力于为广大中小企业提供安全可靠的区块链网络服务,以保障其商业生态发展的可持续性和稳健性。
企业级区块链内核 CITA:国内首先实现独立研发且以开源社区为基础的企业级区块链内核CITA
开源社区生态 CITAHub:连接场景方与技术开发团队的开发平台。CITAHub 能够联合各方资源,为开发价值网络提供场景,开发工具及最佳实践
保塔网:链上 AppStore,一站式满足产业方各场景应用需求