4月22日,在掘金技术社区主办的沙龙上,王涛以《区块链技术VS数据库技术:颠覆还是融合》为题做了分享。王涛曾就职于 IBM DB2 数据库北美实验室,作为 IBM DB2 全球***技术专家小组的成员,参与了 IBM 下一代大数据平台的架构规划,精通数据库内核及体系结构,是数据库领域国际***的专家。在 IBM 多伦多实验室工作了八年后,王涛选择了回国创业。在这次演讲中,他从技术角度介绍了区块链和传统数据库的异同,以及未来技术融合的方向。
以下为王涛的演讲精编,由巴比特整理。
现在区块链所说的“3.0阶段”,实际上更多的是偏向于业务,从数据库角度来看,现在区块链底层技术有很多可以提升的余地。刚开始大家只是做一个数字货币,随着合规的加入,大家可以在上面跑一些业务。
但区块链底层链,包括性能、处理能力、通用功能,离商业化还有很大的距离。如果把区块链技术未来畅想成一个10分的东西,我们认为现在区块链功能只是在1分到2分的级别,还有非常长的路要走。
从技术角度理解,其实区块链技术就是一个特殊的分布式多活数据库。
区块链技术具体有什么样的演进方向?
方向1:从专业化向通用化演进。
现在玩以太坊和比特币,都是为了专门目的设计的一套软件,比特币是专门为转账设计的,以太坊是转账+智能合约,通用方面,可以使用JAVA、C++程序,写任何逻辑。现在区块链基本是为专有系统定制的一套软件,而不是一个通用的软件。
方向2:各自为政向标准化演进。
搞区块链最重要的是协议,而不是软件,大家只要知道比特币之间交互协议,可以使用专为比特币设计的矿机,也可以自己写一套东西,只要有协议就行。现在很多人做公链,每个公链都是独立的通信协议,这就会造成链与链中间通信受到影响,可以用跨链机制、侧链机制打破这些壁垒。相信未来在整个协议层可能会有更多通用化、标准化东西。
方向3:产品化与模块化不断加强。
现在基本上大部分数据库模块化做的非常好,比如希望用一种特殊的加密算法,就把这个加密的库替换原来库就可以,这是未来区块链需要提升的地方,就是框架能够做到更好的模块化。
方向4,性能与可扩展性。
针对分片、内存计算、磁盘结构等进行优化,从单点磁盘结构到多分片对等多活架构,从而使得性能发挥到***。这一块需要技术上继续突破才能实现性能的提升。
区块链技术行业现状:
1.区块链体系结构没有被统一。
2.区块链开发语言极其混乱。
3.需求多种多样,无标准使用范式。
大家在学习区块链技术时,成本很高,搞一个链要学一套新的开发语言,这个东西可能不流行了就要换新的语言,这会有很大的问题。做传统大数据库的,大家用的都是SQL,比较标准化。
另外,现在区块链基本还没有一个真正的杀手项目,没有出现哪一个业务必须用区块链来完成,这样大家都想尝试,用区块链在这块玩一玩,在那块玩一玩,试试医疗、试试物流、试试IoT,哪个行业真正能用区块链颠覆,核心价值在哪,怎么用区块链做这个事情,这些问题是未来一段时间行业里需要去回答的,这几点暂时是薄弱环节。
一、区块链与数据库相同点
特性:共识机制、存储机制、智能合约、分片、应用开发接口、安全。这些实际上都是区块链底层老生常谈的一些模块,对应到数据库,有没有一些对应的点?
共识机制。在过去数据库架构里,所谓一致性控制都是有一个主节点,所有写操作会被复制到另外一个存节点做高可用配置。区块链上,可以把这个体系扩展,假设主节点并不是固定的,而是每10分钟换一次,在主节点MySQL,10分钟换一次主节点,某种程度上是相通的。不管是POW、POS所谓共识机制,真正本质是到底在一段时间之内以谁的信息为准,这个数据库里是以主节点为主,当它挂了以后,怎么选出一个新的节点,这些都不重要,只是实现问题。
存储机制。在区块链里,存储说的都是链本身这个事,大家有兴趣看一下比特币、以太坊,除了链本身,还有类似于状态存储,比如链很长,可能有100GB,涉及到某个账户多次修改,链本身实际上是交易日志,记录每一条记录修改方式,展现形式要归到一个数据库里,都是要内嵌一个小型数据库,把最终结果放到里面。这一套体系对应到数据库里,无外乎就是数据库的存储+事务日志。
智能合约。是用户自定义的托管程序,在数据库里托管程序叫存储过程,在区块链里,本质是一样的,***不同点在于安全性方面。在数据库里调存储过程,记录最终结果,但是在区块链里,因为不可信任,记录调用。
分片。大部分区块链项目里做得还不太成熟、不稳定,数据库分片是非常成熟的东西,区块链行业,由于分片之间交易很难保障,大部分区块链公链项目很难做好的分片。
应用开发接口。在MySQL或Oracle用SQL,无外乎写一段应用程序,扔到系统里,别人调用。而区块链技术也需要一个统一的访问方式,才能更好实现通用化应用。
安全机制。在数据库里,一个表单,到底谁能读、谁能写,有一套定义,但在区块链里,安全是行级的安全,比如在比特币里,相当于全局可读,只有输入可写的安全配置。
从这几块来看,区块链和数据库的世界有很多相通之处。
数据库共识方式。所有读写操作都是主节点,主节点会把信息传给两个从节点。在区块链里,它的主节点是随时会变化的,比如比特币每10分钟做一次出块,这是POW自我验证,谁先算出那个数,大家广播一把,我算出数,大家跟我看齐。这是大家竞争主节点的过程。在区块链的世界,主节点是随时跳跃的,当每一个节点自己认为自己变成主节点以后,会把一段时间之内接收到新的信息,通过区块方式传送给其他节点,这个传输过程和我们之前从主节点发送到从节点的方式基本也是很类似的,涉及到P2P的东西,核心本质都是一样的。
事务日志。数据库里事务日志和区块链的链本身就是一个事情,在区块链里,每一个区块对应到数据库,可以认为对应的就是一个日志文件。最本质的区别是在于区块链同步标准以区块为单位,每一次主节点要把交易信息打包成区块,这个区块作为交易日志。当有任何信息以后,立刻就可以把数据同步给其他节点。
共识机制。
POW本质是一种自我证明的方法,就是每一个节点大家都想让别人跟自己同步,自己想成为主节点,怎么成为主节点?POW方式是给大家很难的题自己去算,算完了以后,告诉大家算出来了,让大家来验证,如果验证是对的,跟我看齐。好处是大家会把大部分时间花在计算过程当中,而对于网络没什么太大压力。
POS正好相反,POS没有过多自我计算的过程,相当于一大屋子人都想成为主节点,大家通过某种方式进行投票,这种机制不需要自己去搞,但对网络压力很大,因为每一次投票都要设计上万个节点竞选,网络压力很大,所以为什么POS也不能够完全真正解决高性能问题,因为当节点数太多,POS效率非常低。
DPOS,就是一屋子人选几个代表,大家跟几个代表看齐,从某种程度上是减少了网络压力。但怎么信这个代表,这个代表是不是代表广大人民的利益,是不是靠谱,这又是一个问题。
DAG,这跟我们一直说了POW、POS是本质的区别,不管是POS还是POW,做得都是跟我看齐的事,本质是当某一个人在一段时间之内成为一个基准,大家跟基准点看齐。但DAG的思路是一帮菜市场大妈去传播谣言,没有一个基准点,当在DAG网络里,所有传输都是异步的,好处是不需要任何人成为这个基准出块的节点,坏处是没有办法做时序控制,因为每个人讨论东西顺序不一样。DAG唯一能做的事情就是转账,后面涉及到操作无外乎是加和减,如果菜市场大妈互相传播方式,做一些高阶操作,A和B两个人先做加法再做乘法,C和D两个人先做乘法再做加法,两个结果不一样。DAG算法里暂时很难突破排序的问题。传统区块链链式结构没有这个问题,这个节点先做加做做乘,没关系,只要说好了,他说先加就是先加,他说先乘就是先乘,这块是DAG网络和传统区块链方式***的区别。
区块链链式结构和数据库日志结构是什么样的?
数据库日志结构。在一个事务里先做一个加法操作,再做乘法操作,两个操作之间同样有一套指针或链接,在数据库的日志结构和区块链结构有很多共同之处。
区块链用UTXO的形式,这个并不是最关键的点,UTXO只是一种协议的表示,在底层完全可以使用数据库把它表示出来。对于一个数据库里面的结构体和区块链的结构体,两者之间有很多相通的地方,完全可以有互换的关系。
典型区块链账本结构。区块链涉及到交易活动日志、数据状态库,在状态库基础上增加索引。对应到数据库里也是一模一样的,包括数据库Ctransaction、数据管理部分、索引,从结构来看,看待区块链底层结构和上层数据库结构都是非常相通的。
区块链与数据库功能模块对应关系。
区块链是数据库交易日志,区块链State Store对应数据库的数据存储,区块链共识算法对应的是数据库一致性算法,区块链智能合约对应的是数据库存储过程等等。
二、区块链与数据库的不同
***的不同是一致性。
对于数据库来讲,一般都是强一致,比如Oracle,写入一条记录以后,确保数据一定是存在的,并且这条数据在数据库日志里确保不能被更改。在分布式数据库里则是最终一致性,当写一条记录以后,不一定能够立刻看到这个东西,但是能够确保在未来一段时间之内这个记录一定存在。不管强一致还是最终一致,本身要求是写入成功的数据一定会存在在数据库里某一时刻。
但区块链不一定,区块链可能会出现分叉,分叉完了还要做合并。比如某一个人账户里有10个比特币,在同一个时刻,在中国和美国两个不同账户里做交易,因为在中国和美国服务器不一样,一个服务器接收我给A做交易是成功的,在第二个美国服务器接收同样消息,转给B的也是成功的,但这两个人不能同时成功。在区块链一定有交易成功确认过程,这在数据库里是没有交易确认,只要在数据库里写的东西一定可以成功。如果在中国向A转10个比特币,在美国向B转10个比特币,假设由于中美开战了,中美之间网络突然断掉了,可能断了三天,三天之内,中国大陆所有比特币交易没有办法通畅,这样就会超过比特币6块的问题,当两个网络合并时就会产生分叉,如果未来去做合并时,在中国做交易,给10个比特币,把一堆东西卖给我,在美国也一样,这样在线下收到20个比特币,***当做比特币合并时,其中一方肯定会被损失。在极端情况下,在比特币体系里没有办法真正保证强一致,去中心化存储里和中心化存储***的区别,就是在于一致性。
为了确保一致性,在数据库里用锁,因为所有操作在主节点执行,几个并行操作里,结构没有提交时会锁住,其他操作过来以后,一定要保证这套交易成功才能释放这个锁,保证继续。
区块链没有锁的机制,比如在中国做一笔交易以后,不可能在毫秒级或微秒级之内就把交易信息传到美国去,如果美国对同样记录做操作时,就会面临这样问题,两者有冲突,在去中心化或多活、多主节点写入里,无法保证全局锁,这个时候怎么确保这个东西,Oracle最终确认时,谁先提交谁成功,后面发现记录变了,重新做一个。相对于区块链,以太坊使用NAS,确保每一个账户更有顺序化,这时候从某种策略选出其中一个正确的。如果顺序错了,会把错误继续。
从安全级别来讲,区块链有很多机制确保安全性。对于数据库大家的想法是这个东西是跑在数据中心里的,区块链基本上有一个笔记本就可以了,所以除了确保本地安全以外,更重要的是协议层面确保其他对等节点、相邻节点有没有作恶的坏人。在三个层面上确保安全,对于记录级安全,属于交易数字签名、智能合约数字签名,就是当做一笔交易时,一定要通过数字签名来验证帐号是否有权利修改这套记录,通过加密,从记录级确保修改这条记录的人一定是本人。区块级的安全机制,当收到块以后怎么确保这个块是正确的,这个块包括默克尔树、挖矿校验,这是对于区块安全的保障。对于链级安全机制,怎么确保这个链是靠谱的,利用前一个区块生成校验码、分叉解决方案。
分片机制。传统数据库分片很容易,都在一个数据中心之内,如果做两个分片之间的操作,先问所有参与交易的人是不是都准备好了,可以提交了,确保大家都在同一个状态下。但有一个问题,没有办法在多个分片之间做控制。在区块链里除非有某种机制确保不会分叉,不可能确保其中某个操作在在另一个链里未来会不会被退掉,没有技术确保,因为链不具备这个功能。不是技术上操作不了,是理论上行不通。如果这么做也会有一些方法,找到第三方中介做这个事,他来背锅是有可能的,或者用侧链机制、跨链机制。
三、区块链技术和数据库技术融合的形式
而在底层技术上,我认为通过两者的技术融合,可能会出现“去中心化数据库”这么一种产品形态。
对于去中心化数据库,其主要的技术点有一下几个:
1.***去中心化,是一个区块链的数据库。
2.没有全局锁。
3.非固定节点生成日志,每个节点都有可能成为出块的节点。
4.异步事务确认。
5.一次性策略调整。
6.行级安全性与触发器。
应用场景,包括电商、金融、信用、物联网,这些都有可能,这个形式非常好。现在的商业模式是中间商把所有人资源整合,利用整个资源提供便利性,赚中间差价,如果是区块链机制,或者叫做去中心化的数据库的机制,被普遍应用的话,从整个商业模式上来讲,不太需要资源密集型中间商,可能会把这些行业现有的商业模式解耦。
对于未来区块链商业模式来说,区块链未来绝不仅仅被局限于交易这么一个简单的操作,我们认为未来会是一个去中心化的协作组织。
例如,携程是中心化的旅游网站,有各种各样的资源,包括酒店、机票、旅游景点资源,会把这些资源打包卖给要出行的各位。未来会不会有一个区块链携程或携程区块链,它的做法是统一一套体系,可以让希尔顿和长城饭店直接连到链里,另外可以找某一个人或某一个组织,专门是做网站的,专门把这个链里所有资源整合起来,做成网站挂出去,相当于去中介化,不需要用携程这样的组织把所有的资源统一起来卖差价,而是让所有的人都自发参与到去中心化组织里,来达到商业目的。
我们认为区块链未来是去中心化协作,而不仅仅只是交易这么一套东西。
基本就是这些,谢谢!