深度学习
区块链就是一个P2P网络,也就是点到点网络。在区块链网络中没有中心服务器,也没有中心路由器。如果任何一个或多个节点从区块链网络中丢失,则数据也不会丢失。
P2P技术解析
区块链的底层技术之一就是P2P技术。下面首先来看一下P2P技术究竟是怎样的。
这里的P2P指的是点对点的技术,而不是P2P贷款。P2P技术是一种网络技术,是与客户端/服务器(CS)模式相对应的一种网络信息交换方式。
在第1章中,我们讨论过区块链系统的三大特点:
去中心化
不需要一个管理机构
不需要第三方仲裁
碰巧的是,这三个特点同时也是以P2P技术为基础的系统所具有的特点。
由于P2P方式能够缓解传统CS架构中服务器端压力过大的问题,也不会有一点失效全局崩溃的问题,同时又能充分利用网络上闲散的计算和存储资源,所以P2P技术能被广泛应用于互联网的各个领域。
我们这里提到的P2P所利用的闲散资源主要有两类:
(1)计算资源
(2)存储资源
对于前者,用P2P来充分利用计算资源的代表当然非SETI@home项目莫属。
SETI@home是由美国伯克利大学发起的一项利用全球联网的计算机共同搜寻地外文明(SETI)的科学实验 计划。你可以通过运行一个免费程序下载并分析从射电望远镜传来的数据来加入这个项目。从1999年开始,这个项目正式启动,面向全世界招募计算资源来加入 外星探索,到2005年这个项目中止的时候,共吸引了543万名用户来参与,他们分析的积压数据数量是伯克利大学凭一己之力绝对无法完成的。
可能读者对存储资源的共享会了解得多一些。在P2P下载出现之前,大文件的下载和共享是一件非常令人头疼的事情。当700MB的文件传输到99%时突然断网或者Windows重启,你还得从头再来。BitTorrent,或者简称BT,就是一项P2P存储和传输技术。
BT的操作是这样的:
(1)将文件切成分块,并将分块信息保存在一个流(Torrent)文件中。
(2)当你需要下载文件时,首先下载这个流文件,而这个文件也被称作“种子”。
(3)每个用户根据流文件中提供的信息,将文件的分块下载下来。
(4)用户在下载该文件的其他分块时,向其他用户共享自己已经下载的分块。
(5)当一个文件的每个分块都被下载到本地电脑中之后,这些分块就可以拼装成一个完整的文件了。
BT是无中心的,上述步骤(1)的发起者可以是P2P网络中的任何一个用户。当文件被多个用户下载之后,文件在P2P网络上就会有多个备份。需要这个文件的用户能就近获取文件的各个部分。
P2P技术和区块链技术是密切相关的。另外一个虚拟货币XRP(瑞波币)的发明者,Ripple Labs的创始人——Jed McCaleb,其本人就是P2P网络eDonkey(电驴)的发明者。
在最早的P2P系统中,系统上的每一个节点同时作为客户端和服务器端。在系统中没有中心服务器,也没有中心路由器。如果某一个资源从系统上的每一个节点中都消失了,那么这个资源也就再也无法被找到了。
很多网络视频公司是最早实践P2P算法的公司,因而也是最早对区块链技术感兴趣的公司。
中心化区块链的实现方式
当我们要通过分布式区块链系统进行转账时,假设Alice要发送10个比特币给Bob,简化的流程是这样的:
(1)Alice在系统上发布一条转账10个比特币给Bob的消息。
(2)这条消息被一个“矿工”Camen加到他的区块中。
(3)“矿工”Camen“挖矿”成功,把区块发布给区块链网络做验证。
(4)验证成功,区块被加到区块链中。
(5)Bob接收到Alice转账的10个比特币。
按照我们在前文的说法,这个过程平均需要10分钟,也就是一个区块被“矿工”挖出来的时间。基于区块链的比特币系统是完全去中心化,没有监管,没有仲裁方的;而传统的金融机构IT系统是有中心,有监管,有仲裁方的。
其实,我们并不需要在这二者之间做选择,不需要从一个极端走到另外一个极端。对于不同的使用场景,我们可以采用这两种方案的中间状态。在第7章会介绍半开放式分布式账本的概念,它就是基于两者之间的方案。
下 图展示的是伦敦大学学院(University College London)的George Danezis和Sarah Meiklejohn两位学者在2015年提出的一种方案:在中心服务器上部署区块链系统,而用分布式系统来接受交易。银行的中心服务器上布置了区块链, 其中的交易区块都是比较大的,终端用户看到的数据都是由中心服务器提供的。采集数据来源于很多被称为“miniette”的小节点,这些小节点互相沟通, 构建小的区块并传送给银行系统的中心服务器。
RSCoin中心化区块链的系统示意图
(来源:参考文献Centrally Banked Cryptocurrencies)
区块链是分布式存储
我们可以认为,区块链其实就是基于P2P的一种分布式存储的方式。其核心思想在于让网络上存在完全相同数据的N个拷贝,当其中某一个拷贝的数据发生改变的时候,信息能够快速同步到其他的节点。
在比特币网络中,交易是对全网广播的,区块链存储的是比特币的完整交易记录表,网络上的每一个节点都有这个交易记录表的完整拷贝。这个交易记录表是对网络上所有人公开的,任何一个人都可以查看记录表的细节。
例如你可以查看https://blockexplorer.com/,如下图所示。
下图展示的是在比特币区块链上最新的交易,而每一个交易都被包含在某一个区块中。
区块链作为分布式存储的独特点之一在于其可以对存储的数据记录设置规则。在一般的数据库中,这样的规则设定可以在数据库层面,而很难设定在记录层面。
正因为区块链算法本身最大的核心点之一就是区块链,所以用区块链来实现数据的分布式存储是一个不错的想法。不过因为完整的数据备份是以文本的方式分散在系统的各个部分,所以完本数据的数据量是一个问题。
区块链存储做的是全冗余,也就是说核心账本数据在每个节点之上都有一个拷贝。这样的系统可读性是最好的,不过写入过程就会麻烦很多。
在撰写本书的时候,区块链每秒只能处理约两笔交易,而这个数字对很多实时系统来说是远远不够的。对此,以太坊的联合创始人Vitalik Buterin是这么说的:
“区 块链处理能力低下的主要原因是网络中的每个节点必须处理每一笔交易。因此,与其他节点越多越强大的去中心化系统(例如BitTorrent)不同,区块链 节点越多反而性能越弱,至少交易处理能力越弱(因为网络扩张以后,延迟以指数速度增长,每个节点的处理能力却一点没增长)。”
在普通的分布式存储系统中存储的是数据,通常我们很难验证数据的来源和真实性。而在基于区块链的系统中,数据的状态和来源可以一并保存,我们可以验证某一条数据最后一次是由谁添加的(可能是匿名的)以及被添加的时间,还可以验证这条数据是否被动过手脚。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=863
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区