去中心化网络,不止区块链(一)
基于工作的原因,近期开始对去中心化网络进行研究。
谈到去中心化网络,恐怕大多数人的第一反应是区块链。这一方面是因为比特币、区块链概念的名声在外,确实有名气,另一方面,比特币、区块链自诞生之日起便与匿名、自由、去中心化等特点绑定至深,世人对仍然摸不清模样的中本聪在2008年发表《比特币:一种点对点的电子现金系统》这一故事的印象太过深刻,因此对于第一次接触到这些概念的大多数人,会自然地认为区块链网络就是去中心网络,去中心网络就是区块链网络。
其实去中心网络(即分布式网络)的概念在2000年之前就已经产生,DHT网络(分布式哈希表)才是去中心化网络的鼻祖,区块链技术不过是这一概念在金融领域的一个实现,区块链用到的数据结构都可以看到Kad协议(DHT网络的一种实现)的影子。
所以第一章我们就先来讲一下DHT网络。
一、去中心化网络诞生的动机
为什么会出现去中心化网络,是因为中心化网络不香吗?(请熟练掌握“为什么会出现xxxx,难道^XXX 不香吗”这个句式,实乃搞清来龙去脉的必备良药)
没错,就是因为中心化网络有缺陷。
我们回到2000年之前,网络满足的主要需求,仍然停留在浏览网页和传输文件上,但受限于网络带宽,网页和文件都不能太大。网页的大小可以通过设计变小,但文件呢?虽然有压缩技术,但电影、音乐、文档越来越大是不可逆转的现实。
1.1 中心化网络
传统思路,中心化服务的方式,所有客户端都需要首先连接到某一个或一组中心服务器再获取文件。具体实现方式有两种,1是直接由中心服务提供文件下载的服务,客户端连上来即开始下载,2是每个客户端都从中心服务器上下载一部分的文件,由中心服务器记录这些客户端的地址,供新加入的客户端根据地址获取其他部分的文件,我们经常看到的包含一组 BT Tracker 服务器地址的种子文件,就是第二种方式。
优点:实现起来很简单;对于第二种方式而言,加入的客户端越多,下载越快。
缺点:1、星型拓扑,中心服务器成为整个网络的单点,出现单点故障时一毁全毁,代价太大;2、对于第一种方式而言,随着客户端数量的增加,在中心服务器提供的总带宽、服务能力不变的前提下,每个客户端享有的带宽变小,同时,中心服务器存储的文件却越来越大,获取这个文件的时间变得越来越长。
1.2 全连接(full-mesh)网络
中心化网络的缺陷已经越来越明显,甚至制约了信息传播的速度,亟需一种打破中心化的模式满足更快更健壮的网络需求。这时候出现了全连接网络,在全连接网络中,客户端采用广播的模式向自己相连的客户端发起请求,被询问的客户端如果不知道文件在哪里,就再次进行广播。如此往复,直至找到所需文件。全连接模式已经开始体现出去中心的理念。
优点:没有中心服务器,客户端与其他节点都存在连接的路径,不会出现单点故障;
缺点:1、网状拓扑,仅适合于小型网络使用,否则会引发“广播风暴”并严重占用网络带宽,也会严重消耗节点的系统资源;2、即使在协议层面通过设置 TTL(time to live),限制查询过程只递归 N 轮,但依然无法彻底解决这一问题。
1.3 部分连接(partial-mesh)网络
部分连接网络则希望利用中心化网络与全连接网络的优点,规避其缺点,用更少的广播和资源消耗,带来同样快速、健壮的网络。部分连接网络的一个实现就是DHT,其基本理念是,每一个客户端都是一个小型的“中心服务器”,维护自己的地址表,这些按照特定规则制作的局部地址表分布到系统中的所有参与客户端上,形成一个庞大的分布式网络。这样,客户端在查询文件、获取文件时,只要把查询报文一层层路由到相应的节点即可。
优点:去中心化、分布式,同时不会产生广播风暴,占用大量网络带宽;
缺点:算法复杂,设计上、实现上容易出现安全问题,导致DHT网络的主流应用场景仍局限在文件传输、文件系统、聊天、博客、社交网络等。想要推广到更广泛的应用场景里面去还需要更完善的安全机制提供保护。这个后面会开一个专题讲DHT网络面临的安全风险。
1.4 应用场景
应用场景方面,上面这三种方式都可以组建p2p网络,前两种现在已经不太常用,BT、emule等如今广泛使用的p2p软件背后都是DHT技术,如下图这种磁力链接也都是DHT技术的体现。
二、DHT网络的概念及其特点
DHT(分布式哈希表,distributed hash table)是一种分布式网络模型,也是partial-mesh网络。在不需要服务器的情况下,每个客户端负责存储一小部分数据,并负责一个小范围的路由,最终实现整个DHT网络的存储和寻址。
DHT是非常重要的P2P网络技术之一,其基本实现原理是,每个客户端对所存储的“每一个业务数据”计算散列值,然后用散列值作为 key,业务数据作为 value,客户端通过“距离”算法形成局部路由表,通过局部路由表一次次转发,把想要另外部分的数据请求转送到唯一一个持有该key值的客户端上(Peers)。
“分布式”:分布式与集中式相反,每个客户端都是资源的组成部分,这个比较好理解。分布式哈希表区别于“传统哈希表”的主要差异在于,后者运行在某一个客户端的某个软件中,而分布式哈希表用于分布式系统,运行在网络中每一个客户端上。
“哈希”:一种算法,不能长度的输入(包括数据、文件,都可以当作输入)经过同一种哈希算法处理后,可以得到等长的输出,且哪怕输入只改动一个字符,输出就会发生变化;此外,哈希算法是不可逆的,即能够通过输入值计算出输出值,但却无法从输出值计算出输入值。哈希算法所具备的这些特点,使得它经常被用于数据完整性保护,文件完整性校验,归一化处理之后存储。通常会把客户密码经过哈希处理后存放到数据库中,一来不直接使用密码明文提高了安全性,二来归一化处理后长度是一样的,且只包含数字+字母,简化了数据库设计。
“哈希表”:哈希表用来存储键值对。键值对(key/value pairs,简称kv)是一种数据结构,可以方便快速地通过 查找key 来获得 value。举个例子:有些度假村的温泉,会要求你在进门之前把鞋子存放到指定的存鞋处,穿着拖鞋才能进。一般存鞋处还会有一个工作人员,你给他鞋子,他把你的鞋子存放到某一个柜子里,然后给你一双拖鞋,并把这个柜子对应的号牌给你,我们假设工作人员把所有号牌及对应的鞋子都记录在了一个表中。等你出来想要换鞋的时候,你的名字根本不重要了,重要的是你手里拿着的统一由温泉配发的号牌,你给他号牌,他通过表查找对应关系,找到你的鞋。“号牌”相当于“键值对”中的 key,鞋子相当于 value,工作人员可以通过表方便地查找出你鞋子的位置。
得益于分布式、哈希算法及哈希表的特性,分布式哈希表具备以下特点:
对等性:构成系统的节点并没有任何中央式的协调机制,节点与节点之间完全对等;
伸缩性:即使有成千上万个节点,系统仍然应该十分有效率;
容错性:即使节点不断地加入、离开或是停止工作,系统仍然必须达到一定的可靠度。
三、DHT技术原理
按照认知逻辑,我会根据从单一到复合的方式,由浅入深、由简单情况到复杂情况拆解去讲,这些原理都是信息系统不断提升效率的体现,抽象出来看,甚至对于工作、生活都是有意义的。总之,这些技术原理能够实现DHT分布式网络,产生DHT应该具备的特性。
3.1 基础知识
基础知识包括哈希、哈希表、模运算、拓扑与路由。其中哈希、哈希表已经在上面提到了一些,下面我们会提到具体算法层面。
版权声明: 本文为 InfoQ 作者【石君】的原创文章。
原文链接:【http://xie.infoq.cn/article/de81e1cd4d0ab3cee05f86731】。文章转载请联系作者。
评论