The Science of the Blockchain笔记(七)

分布式存储

  如果将100万部1GB大小的的电影,储存在100万个节点上(每个节点存储空间1TB),一个简单的方法是将文件随意的存储在不同的节点上,并采用一个全局的索引记录每个电影存放位置。但这带来的问题是,如果电影和节点频繁改变,这个索引就需要频繁的进行修改,为了避免这个问题,我们开始接下来的内容。

一致性哈希(Consistent Hashing)

  以下算法可以解决这个问题:
在这里插入图片描述
定理 8.2(一致性哈希) 按照算法8.1的策略,每个节点存放的电影数的平均期望为km/n。

  做一个简单的计算,现在又 m=1M 电影(每部 1GB),n=1M 节点,这每个节点可以存储 1TB/1GB=1K 部电影。这样我们可以采用 k=1K 哈希函数。根据定理 8.2,每个节点平均存储大约 1K 部电影。根据下面的切诺夫界,并且有 u=km/n=1K,我们可以得出结论:一个节点所使用的存储空间超出平均期望 10% 的概率小于 1%。

事实8.3 根据某个版本的 *Chernoff Bound,我们有:若 x1, …, xn 是独立同分布的随机变量,且均服从下面的伯努利分布(Independent Bernoulli-Distributed Random Variables): Pr ⁡ [ x i = 1 ] = p i \operatorname { Pr } \left[ x _ { i } = 1 \right] = p _ { i } Pr[xi=1]=pi and Pr ⁡ [ x i = 0 ] = 1 − p i = q i \operatorname { Pr } \left[ x _ { i } = 0 \right] = 1 - p _ { i } = q _ { i } Pr[xi=0]=1pi=qi,则对 X : = ∑ i = 1 n x i X : = \sum _ { i = 1 } ^ { n } x _ { i } X:=i=1nxi 以及 μ : = E [ X ] = ∑ i = 1 n p i \mu : = \mathbb { E } [ X ] = \sum _ { i = 1 } ^ { n } p _ { i } μ:=E[X]=i=1npi,有如下关系:
δ &gt; 0 : Pr ⁡ [ X ⩾ ( 1 + δ ) μ ] &lt; ( e δ ( 1 + δ ) ( 1 + δ ) ) μ \delta &gt; 0 : \operatorname { Pr } [ X \geqslant ( 1 + \delta ) \mu ] &lt; \left( \frac { e ^ { \delta } } { ( 1 + \delta ) ^ { ( 1 + \delta ) } } \right) ^ { \mu } δ>0:Pr[X(1+δ)μ]<((1+δ)(1+δ)eδ)μ
  在本本章中,我们将讨论极端不可靠的情况。如果节点们在很频繁的搅动(Churn),他们不停地加入或离开这个分布式系统,那我们该怎么做?

  在如此频繁的搅动下,每秒都有成百上千个节点变动。没有一个节点可以精确地掌握当前系统中中还存在哪些节点。相反地,每个节点将只了解一个很小的“邻居”集合(通常小于 100 个节点)。用这样的方式,节点们可以抵挡高度搅动带来的影响。这样做(仅了解邻居的情况)的负面影响是,节点们将不能直接知道哪个节点存储了哪部电影。相反地,节点在搜索一部电影时,将不得不询问邻居,而邻居再递归地询问它的邻居,直到找到存放这部电影的节点为止。于是在这样的分布式系统中的所有节点就构成了一个虚拟的网络,也被称为一个覆盖网络(Overlay Network)。

超立方体网络(Hypercubic Networks)

定义 8.4(拓扑属性) 虚拟网络应该具备下面的性质:

  • 网络在某种程度上是同质的(Homogeneous),即:不存在一个节点在网络中处于支配地位,也不存在一个节点可以造成单点故障。
  • 节点都有ID,而且所有的ID值的范围在[0, 1)。这样我们才可以采用算法8.1,利用哈希编码来存储数据。
  • 每个节点的度数都比较小,均为网络节点数n的多重对数(Poly-
    logarithmic)量级。这可以使每个节点和它的邻居维持持久的连接,从而应付搅动(Churn)现象。
  • 网络应当具有较小的直径(Diameter),且易于实现在网络中的路由。如果一个节点不清楚某个数据项的信息,它应该知道去询问哪个邻居。通过少量的跳转(n 的多重对数级别),一个节点应当能找到存储正确信息的目标节点。

  树的优点在于很容易路由。从任意源节点到任意目标节点都只有一条路径。然而,每棵树的根节点都是一个瓶颈,因此树并非同质的(Homogeneous)。如果希望去掉瓶颈,可采用肥胖树(Fat Tree)。肥胖树的特点在于:假设 e 是一条边,连接了一个节点v到它的父节点 u。则 e 的容量(Capacity)与以v为顶点的子树的叶节点数量成正比。图 8.5 给出了肥胖树的一个例子。图中的边上的数字表示该边的容量。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  蝴蝶网的优点在于节点的度数为恒定的,而超立方体可以具备更好的容错性。

  下面我们将定义立方体-环-连接网(Cube-Connected-Cycles Network)。这种网络的度数为3,它实际是将超立方体的拐角替换为圆环得到的。

在这里插入图片描述
在这里插入图片描述

  图 8.11 给出了CCC的两种表现形式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  图 8.15 给出了德布鲁因网的两个例子。

  还有一些数据结构也被归入到超立方体网络中,比如跳表。跳表实际是为懒惰的程序员准备的平衡二叉搜索树(Balanced Binary Search Tree)。

定义8.16(跳表(SkipList)) 跳表(Skip List)是一个普通的有序链表,加上一些额外的前向链接。普通的链表是跳表的第 0 层。此外,链表中每个对象都以 1/2 的概率被提升到第 1 层。同样,在第 1 层中,所有对象通过一个链表连接起来。总之,每个第 i 层的对象都以 1/2 的概率被提升到下一层中。每层还有一个特殊的起始对象,它们均指向每层的第一个对象。

定理8.17 每个图,若节点数为 n,且节点的最大度数为 d>2,则其直径至少为[(log n)/(log( d - 1)) - 2。

DHT & Churn

定义8.18(分布式哈希表(Distributed Hash Table,DHT)) 一个分布式哈希表(Distributed Hash Table,DHT)是一个实现了分布式存储的分布式数据结构。一个 DHT 应该至少支持(根据键的)搜索操作;插入(键,值)对操作;删除(键)操作。

  除了存储电影之外,DHT还有很多应用,比如域名系统(DNS)本质上就是一个 DHT。DHT 可以采用超立方体覆盖网络(Hypercubic Overlay Network)来实现,只有其节点的ID取值在 [0,1) 的范围。一个超立方体(Hypercube)可以直接用作 DHT。只需要使用一个全局的哈希函数集合 hi,将电影名称映射为长度为 d 的字符串。使用其他超立方体结构(Hypercubic Structures)来作为 DHT 相对较为复杂。比如,使用蝴蝶网时,可能需要直接使用 d + 1 层来作为副本,也就是说,所有在 d + 1 层上的节点都负责同一个 ID。

  有很多工作分析 DHT 在面临攻击者时的场景,这些攻击者可以从网络中随机选择一部分节点,使它们崩溃。而在一些节点崩溃之后,系统被允许在较为充分的时间内恢复。但是,这个设定明显并不符合实际情况。而本节所讨论的场景与此显著不同,其区别主要在于以下两个方面。

  • 首先,我们假定最坏的一种“节点加入和离开网络”情况。我们考虑一个攻击者可以删除或增加有限数量的节点,该攻击者可以主动选择一部分节点崩溃,以及节点加入网络的方式。
  • 此外,攻击者不需要等待系统恢复之后才破坏另一部分节点。与之相反,攻击者可以持续地使节点崩溃,而系统始终在尝试存活。事实上,系统从未全部恢复,但却始终可用。特别地,系统可以防范这样的攻击者:它持续地攻击系统的“薄弱部位”。比如,攻击者可以在 DHT 中插入一个爬虫,学习网络的拓扑结构,然后重复破坏特定的一组节点,以达到使 DHT 分区(Partition)的企图。系统的应对措施是持续将一些未被攻击的节点移动到这些受到攻击的区域,或是将新加入的节点置于这个区域。

  显然,我们不能允许攻击者具备无限的能力。这个模型涵盖了一类常见的攻击场景:攻击者们通过分布式的拒绝服务攻击(Distributed Denialof Service Attack)持续地破坏一部分节点,但是每次能攻击的节点数为O(logn)。为实现这个模型,相应的算法要求消息及时地传输,每两个节点之间消息传输时间不能超过一个预设的常数,也就是说,同步模型。可以采用一个普通的同步装置来实现这个算法。我们只需要消息传输时间在预设的范围内,从而可以根据传世来判断攻击行为。而每轮的持续时间则与最慢消息的传输耗时成正比。
在这里插入图片描述
在这里插入图片描述
图 8.20 上图模拟了一个 2 维的超立方体,有 4 个超节点,每个超节点由多个节点构成。所有的节点位于超节点的核心或者是边缘。在同一个超节点的所有节点彼此相连,此外,所有节点都连接到邻居超节点的核心节点上。只有核心节点存储数据,而边缘节点在超节点之间移动以缓解攻击者所造成的搅动。

定理8.21(带搅动的DHT) 上述系统是一个完全可扩展的,高效率的分布式存储系统,且可以容忍最坏情况下单位时间内 O(log n) 次节点加入或删除。而在其他的存储系统中,若节点拥有 O(log n) 个覆盖邻居,常用的操作(如查找、插入)须耗时 O(log n)。

  事实上,处理搅动仅仅是对分布式存储系统最低的要求。前沿的工作已提出了更精妙的体现结构,这些结构可以处理其他安全问题,比如隐私或者是拜占庭攻击。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值