课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
关于区块链技术的探讨我们在前几期的文章中已经说过很多次了,而且也给大家介绍了使用哪些编程开发语言来实现对区块链技术的具现化,今天我们就一起来了解一下,如何从分布式的角度来分析理解区块链的构造。
区块链是源于比特币中的底层技术,用于实现一个无中心的点对点现金系统,因为没有中心机构的参与,比特币以区块链的形式来组织交易数据,防止“双花”,达成交易共识。
传统意义上的数字资产,比如游戏币,是以集中式的方式管理的,仅能在单个系统中流转,由某个中心化机构负责协调,通常以数据库的方式来存储。宏观上看,区块链和数据库一样,都是用来保存数据,只是数据存取的形式有所不同。
区块链本质上是一个异地多活的分布式数据库。异地多活的提出,原本是为了在解决系统的容灾问题,多年来也一直是分布式数据库领域在探索的方向,但鲜有成效,因为异地多活需要解决数据冲突的问题,这个问题其实不好解决。然而诞生于比特币的区块链以一种全新的方式实现了全球大的异地多活数据库,它完全开放,没有边界,支持上万节点并可随机的加入和退出。
在区块链中数据冲突问题就更加突出了,区块链里每个节点是完全对等的多活架构,上万个节点要达成一致,数据以谁为准呢?比特币采用的方式是POW,大家来算一个谜题,谁先算出来,就拥有记账权,在这个周期,就以他所记的账为准,下一个周期大家重新计算。争夺记账权的节点决定将哪些交易打包进区块,并将区块同步给其他节点,其他节点仍然需要基于本地数据对区块中的交易做验证,并不像数据库的主从节点间那样无条件接受,这就是区块链里的共识算法。POW虽然消耗大量算力,好处是在争夺记账权的过程中POW只要在自身节点中计算hash,不需要经过网络投票来选举,网络通信的代价小,适合大规模节点之间共识。POW是目前公有链里完备简单粗暴做法,经得起考验,但问题是效率太低。
所以后面发展出了PoS、DPoS,谁拥有资产多,谁就拥有记账权,或者大家投票,但这样又引入了经济学方面的问题,比如所谓的贿选的问题,这就不太好控制了。在传统分布式数据库里,不叫共识算法,而叫一致性算法,本质上也是一回事。但分布式数据库里一般节点数都很少,而且网络是可信的,通常节点都是安全可靠的,我们基本上可以相信每一个节点,即使它出现故障,不给应答,但绝对不会给出假应答。所以在传统公司分布式数据里,都用Raft或Paxos协议去做这种一致性算法。
后来产生了联盟链,若干企业组成一个联盟,加入联盟的组织或机构需要进行身份认证,基本上能够确认它们的身份是可信的。所以联盟链跟公有链的共识算法是不太一样的,联盟链主要采用PBFT或更简单的Raft。
以太坊提出了智能合约的概念,可以实现各种逻辑,而在分布式数据库中可以利用存储过程来实现类似功能。
区块链在解决横向扩展问题上,可以采取分片/跨链等方式,和分布式数据库里中的Auto-Sharding技术类似,在处理过程中,都需要保证事务的完整性。
整体从纯技术角度来看,本质上区块链跟分布式数据库没什么太大的区别。但他们的路线,或者要解决的问题是不一样的,区块链侧重于抵御审查和安全性,而分布式数据库侧重于用户体验和性能效率。
产品上来看二者的侧重点有着显著的不同。抵御审查是以比特币为代表的区块链重要的特性,也是比特币赖以生存的基础,因为比特币不属于任何人或组织,没有谁能代表比特币,比特币没有主体,所以各国政府或部门都无法关停比特币。然后是安全性,区块链账本有成千上万份副本分散在全球各地,数据几乎永不丢失,同时利用所有节点的相互制约,没人能够恶意篡改数据。这两者是区块链的重心,表现出来就是大家常说的去中心化。
用户体验和性能相对于前两个核心目标来说,不是区块链侧重的,比特币动用巨大的算力来运行秒只有几个TPS的系统,数据冗余了上万份副本,一笔交易可能需要数十分钟才能提交,提交后的交易还可能因为被判定为“双花”而取消,而这些问题在数据库上都是不能接受的。二者产品上的侧重点不同,从而导致技术实现上的差异.
作者:腾讯TEG
节选:infoq
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。