Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
1. AWS S3等大公司能100%的保证文件不丢失吗?
/ X, H: O$ A+ i' ?& a2 \: e其实不然,他们也只能99.999999999%的保证文件不丢,11个9的保证文件不丢。存储行业称这个服务质量指标(QoS)参数为耐用率。
3 [3 R7 S5 v3 M* d( H+ P4 O8 u# v7 C# {
2. 矿工可能不稳定。* F- T: o0 G" f$ Z
P2P的技术核心,就是在多个不稳定的节点上,实现稳定的服务。回想一下我之前做过的PPTV,也就是P2P直播,正是在多个不稳定的节点上完成了稳定的服务。
( u, j. ^/ X& H, I下面我来详细解释PP.io是如何把这个耐用率做到非常高的。
9 x4 t+ i* W1 ~0 V# L1 ^( b% JPP.io 的2种冗余模式! F- a2 {8 L' q4 {3 W) c0 i
我在设计PP.io的时候,设计2种冗余模式:! u, H+ u8 {7 L9 Q4 V5 {4 Q9 ^
1.​全副本模式
. g- @( \/ E: s% L1 s3 q全副本模式就是把文件,完整地拷贝,新文件和老文件一模一样,这样做并不节约空间,但是P2P能多点下载数据,更快,同时可以保证用户下载体验。/ s, O( J, W* T4 N" o. h$ h/ D
2.​纠删副本模式/ p: b4 L5 n% W
纠删副本模式就是通过纠删技术来做冗余。简单地说就是,数据分成碎片并编码,使用可配置数量的冗余分片,且不同部件存储在不同矿工上。这样做不利于P2P多点传输,但是可以大大节约冗余空间。
/ t+ L% ^8 M. S+ dPP.io就是把这两种冗余模式结合起来实现的。不同场景侧重于运用不同的冗余方式。+ {$ r' V! m' L# P
下面简单说一下纠删技术产生的数学特征:! f/ J* W& M8 x
我们用 (k,n) 纠删码来编码数据,其中总共有n个纠删片段,k表示在n个纠删片段中,任何k个7纠删片段就能完全恢复原始数据。如果数据大小是s字节,则每个纠删片段的大小大约是s/k 字节。如果k = 1时就是相当于复制一个全副本。例如,1MB数据, 如果采用(10,16)纠删码,并且每个纠删片段大小是0.1M,则总存储数据大小就是1.6M。它实际总共用了1.6倍的数据空间大小。
7 P7 M8 X, p9 s5 w8 M- uPP.io的假设和计算
% p  h# u. s9 T; b4 M# `4 z2 ~) j做如下假设:
* K. d* V3 B( _- K0 q9 z: `2 I我们令t为单位假设时间,这里先假设t=24小时2 t# q8 J8 ~6 q6 O% {) }! J
Pt代表矿工的日掉线率,我们这里假设Pt=5%。3 j" [7 [& O* F/ R* g* Y6 ^" ~
τ为副本丢失后的修复时间,也就是如果副本丢失了,多少时间能够修复。我们假设τ=2小时。
/ w; t4 @0 [& d' E) [' l8 Q在可以修复的前提下,将以上值带入下面的公式,算得单副本丢失每天丢失的概率是:" B' g( ^7 D+ x/ H) }# \4 ]
$p = 1 – (1-Pt)^{\frac{t}{τ}} = 0.4265318778%$7 l7 `' u1 }, n3 @" p
PP.io设计的默认全副本数冗余2倍,纠删副本冗余是1.5倍。
: I# a& [$ Y" @, Y我们先看全副本模式:
; C' o9 S# M% ~3 o' ?* z  R* Y由于全副本是完全复制,所以是2倍的冗余,也就是有2个副本。我们称为N=2。
7 r4 i8 n' ?9 f% ?3 H! `* C0 @修复时间内的耐用率:
( w+ k, O$ G6 b+ v  R4 G/ ], [) K$$P_a = 1- p^2 = 99.9981807056%$$& w& N+ V" l" C* f  b9 z* p
全年耐用率:+ K4 K5 M" l) e+ H0 ~7 r
$$P_{ya} = Pa^{(365*t/τ)} = 92.3406415922%$$
+ @) Q+ y3 }3 ?0 D; A' p7 P$ _$ Q2 w5 m我们再看纠删模式:* b; G: v( a$ l9 r  ?
假设我们采用的纠删算法是 (k,n)= (6,9)。相当于6M的数据,每个纠删分片是1M,一共要存放9个纠删分片,任意6个分片就能恢复出完整的数据,这样存放在9个矿工上,另外实际占用的空间大小是9M。如果理解了,我们继续往下看。! u, l7 x2 h8 P9 O3 `: I
由于纠删算法是(k,n), 那么冗余就是 $F = n/k = 1.5$。
3 R5 G9 h0 {) u! d2 `- w在修复时间内分片丢失数就是:  S8 F3 w; U4 M- n) m
$m = n*p = 0.038387869$,这是已知发生数。7 Q/ {3 O( a3 D1 F. y& M4 U
这里讲解一下概率论中的经典公式,泊松分布拟合公式:
  O( z8 a- q! V  E+ |' F7 ]) l$$P(x) = \frac{mx}{x!}e{-m}$$1 u! J$ d6 g5 h4 R
简单理解一下,泊松分布拟合公式就是观察事物平均发生m次的条件下,实际发生x次的概率。要了解推导细节,可以看最后的附录。9 E9 V8 @& y% z
我们套用泊松分布拟合公式就可以得到:/ G+ c2 _( p; G9 H( d4 x
$$Pb=\sum_{i=0}^{n-k}P\left(i\right)$$
9 @  q% X# d; r7 ~; P' L/ P​即 $P_b = 99.9999912252%$* b  e' }3 N" }/ r5 S7 [0 D
那么全年的耐用率:
; F+ T1 g. h' b$$P_{yb} = Pb^{(365\frac{t}{τ})} = 99.9615738663%$$
6 u, t' c3 y0 H9 D可以看到,虽然更小冗余,但纠删模式对比起全副本模式的耐用率高很多。
+ ?: L& R8 A. u计算汇总:
) r1 r1 X4 L  V4 g我们把2种冗余模式结合起来,可以得到最终的耐用率:, J, M2 d" o0 N7 ~
修复时间内耐用率:) r9 @' w6 ^4 Q! Q0 `+ H
$$P = 1 – (1-Pa)(1-Pb) = 99.9999999998%$$
* o0 x% ]3 m) `9 f, u1 C* d7 x! T/ r全年耐用率:
' e6 M) w/ y6 o3 D$$P_y = P^{(365\frac{t}{τ})} = 99.9999993008%$$
  M$ e8 h  |5 g# N1 T8 {- [  k. Z看看,已经达到8个9的耐用率。也就是说假设你如果存放了1亿个文件,一年只会丢失1个文件。你说可靠不?! h3 M( m6 O% l  P- T4 A
还能提高' y* X+ q+ `' \/ |  l5 P% j, K3 V) K" T
上面的假设,是基于 (k,n)= (6,9), 冗余度为F=1.5。如果适当提高冗余度 F,或者提高k,还能提高全年的耐用率 Py。下面一个表格就是调整 k和F之后对全年耐用率产生的影响。
9 T' y" o+ _9 B% @我们这里做了一个新的假设,完全没有全副本,只有纠删分片。这样做,不追求速度,只追求价格最便宜。这时候,Py 就等于 Pyb。即:8 \% J* v* {8 ^# t: w
+ f8 y1 M3 `  E" w6 M
可以看出,冗余度F越高,耐用率越高。同时, 分片数n越多,耐用率越高。n对耐用度的影响更为敏感,但是n越大,也就意味这需要的矿工越多。  n5 Z3 T4 F8 \" b$ T" K3 K8 [
也可以看出,如果要追求12个9,即99.9999999999。采用纠删模式,在冗余度2的情况下,分成16个纠删副本就能做到。同样,在冗余度2.5的情况下,分成12个纠删副本就能做到。这样就超过 AWS S3企业级存储服务的年耐用率(11个9)。
1 D+ d) r3 ]+ }; Z, @, D) b3 Z# a: @还能再提高
& f7 d4 ]3 K+ w4 V9 i* c$ A4 _除了调整 N, (k,n), F 这些参数,可以提高耐用率之外,还可以通过自身的优化努力。其实还有很大的提升空间,前面说过,这个测算是基于2个前提假设的。而这两个假设本身还有很大的提升空间。7 P; N8 I' F/ a& [; K0 }* c# x2 N
单副本的每日丢失率Pt, 我假设是5%。这个假设本身是可以通过token经济系统的设计来降低的。更合理的经济系统可以提高矿工的稳定性和在线率。如果矿工稳定了,这个值就会下降;这个值越低,全年的耐用率就会增加。这个值有望降至1%甚至更低。7 p0 w: U6 j5 x" T# L, t
副本丢失后的修复时间 τ,我假设是2小时。这个假设也可以通过PP.io自身的算法来优化,只要能更快地发现副本丢失,能更快地增加副本数来保证副本数充足,τ值就会越低;τ值越低,全年的耐用率就会增加。如果算法做到极致的话,这个值有望降至15分钟。
4 k- i/ `7 J+ Q1 n假设做到了极限值Pt=1%,τ=0.25小时,(k,n)=(6,9)纠删副本冗余度 F=1.5。) Z* H# H4 d2 w- o: c
得到 $P_{yb} = 99.9999998852%$# @7 x* k9 N. O6 P
如果再考虑2个全副本冗余,则全年耐用率:
' N4 t) q) U4 m5 e+ f$P_y = 99.9999999999%$* C. _0 d* q) u, c+ Z4 S
PP.io将让开发者灵活设置参数4 M! H. X6 s' _" d' n  J) G
我在设计PP.io架构的时候,给予开发者足够的灵活性,可以根据自身的情况设置不同的参数,其中包括:全副本数 N, 纠删算法参数 (k,N)。
. C; l: z) ~3 s5 u开发者可以根据自身的需求,如传输速度,价格(冗余度越高,价格越高),能接受的耐用率来配置参数,从而满足自己的产品要求。% @/ X5 y2 K7 A. u
PP.io给开发者提供一个去中心化的存储和分发网络,使得更便宜,更快,更隐私。PP.io的官网是 https://pp.io
+ S* R/ N3 Y4 q- }9 {  ]3 G0 y附录:泊松分布拟合公式推导2 C2 x* _' D" l5 i" |7 j# `8 L5 O
假设 $p$ 为单个设备单位时间内的故障率,则 $n$ 个设备在单位时间内,有 k 个设备发生故障的概率 $P(k)$ 为:( u6 c& R6 u7 D' Z) `
$$P(k) = {n \choose k}p{k}(1-p){n-k}$$: o9 n$ h* F9 S7 l, @
展开组合:5 z6 D2 X1 x" Z6 Z% P
$$P(k) = \frac{n(n-1)\cdots(n-k+1)}{k!}p{k}(1-p){n-k}$$, @7 x7 f; v( n* Q) b- V  K7 Y
$$P(k) = \frac{n(n-1)\cdots(n-k+1)}{k!}\frac{p{k}(1-p){n}}{(1-p)^{k}}$$
% F' Z1 W3 T' \" t9 Q: y$$P(k) = \frac{(np)(np-p)\cdots(np-kp+p)}{k!}\frac{(1-p)^{ \frac{1}{p} {np}}}{(1-p)^{k}}$$
! U: T$ l4 b) O8 d2 p5 s* T假设 p 很小,n 很大,一般地当 n > 20, p {-{np}}}{(1){k}}$$, Z' y  S7 z( t( I
$$P(k) \approx \frac{(np)k}{k!}e{-{np}}$$' {, ~  d7 K# r! Z
' p4 a& ^7 g4 ^. R0 l/ k
$$\lambda = np$$
4 e+ V; z, F( V7 [* V最后得到泊松分布公式,即,已知单位时间内平均有 $\lambda$ 个设备故障,计算单位时间内有$k$个设备故障的概率。# c3 ^: }  A3 o
$$P(k) = \frac{\lambdak}{k!}e{-\lambda}$$
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

teawang 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1