分布式儲存系統可靠性系列二 系統估算示例

2021-09-08 20:22:29 字數 4032 閱讀 5667

1 估算示例

上文分布式儲存系統可靠性-如何估算中,我們提供了一些基本的估算的方法。接下來我們提供乙個具體的估算的示例子。

系統示例: n = 7200塊磁碟的儲存系統中,r=3副本,單盤容量 disksize = 8t,磁碟年平均故障率 afr = 4%,系統採用大多數儲存系統採用的小檔案合併成大檔案分片的方式儲存,分片大小為partsize = 10gb,系統整體空間利用率percent =70%(系統總體承載資料量大約在13pb),分片採用隨機放置方式,隨機放置情況下 s = min(c(r,n), (n*disksize*percent/r)/t) 。

以下為計算恢復時間 1 小時情況下的概率的過程

s =  min( c(7200,3), 7200 * 8 * 1024 * 70% / 3 / 10) = 1376256

pa(t,k) = p(1,k) = ( x / c(7200,k) ) * p( n(1) = k)

λ = 4% * 7200 /365/24 = 0.03 (按照4%的壞盤率計算999塊盤的系統中平均每小時的壞盤數量)

p( n(1) = k) = (λ**k) *  (e ** -λn)/k!    pb(t) = σ p(1,k) ; k∈[3, 7200] 

pc = 1 - (1-pb(t))**(365*24/1)

可以看到其中 選k個節點情況下,命中copyset的概率為 x/ c(k, 7200)。 這個x的計算我們暫時還沒有確定,我們看下這個如何計算

k = 3 的情況下,即pa(1,3)= s/c(7200,3) * p( n(1) = 3) 比較簡單,但是在k∈[4, 7200]點情況下,情況就比較複雜了,貌似沒有一種比較好的統一的組合概率計算這個概率。如果非要計算基本可以使用 蒙特卡羅 方法case by case 進行計算,該方法詳見附錄。如果我們在分析概率的基礎上進行進一步簡化估算。

通過計算p(n(1),k)  可以計算得到1小時內壞k個的概率

kp(n(1), k)

p(1,k)

35.73e-6

1.26e-10

44.71e-8?5

3.09e-10?6

1.69e-12?7

7.97e-15?8

3.27e-17?9

1.19e-19

? 從上面我們可以看到,在k >= 6情況下,假設選中copyset的概率為1,對結果的影響也是比k=3小2個數量級以上。所以基本只需要統計考慮k = 4,k=5 情況下的即可。k=4,5 情況下的選中copyset的概率 基本為 c(s,1) * c(n-3, k-3) / c(n,k)。

kp(n(1), k)

p(1,k)

35.73e-6

1.26e-10

44.71e-8

4.17e-12

53.09e-10

6.85e-14

p(t) ~=  σ p(1,k) ; k∈[3, 5] = 1.31e-10 (即t=1 小時內 丟資料的概率為1.31e-1)

p = p = 1 - (1-p(t))**(365*24/t) = 1.1e-06, 即6個9的可靠性。

2 附錄

2.1 估算**

#!/usr/bin/python

# -*- coding: utf-8 -*-

import decimal    import math    import time    # 隨機分布情況下系統的copyset組合數

def randomcopysets(n, disksize, repnum, percent, partsize):

setnum = (n * disksize * percent / (repnum *  partsize))

maxcopysetnum = c(n, repnum)

copysetnum = 0

if setnum > maxcopysetnum:

copysetnum = maxcopysetnum        else:

copysetnum =  setnum        return int(copysetnum)    # n 個磁碟儲存系統中t時間同時損壞k塊盤的概率,年故障率arf

def  kdiskfailrate(n, t, arf, k):

# λ 每小時的換盤數量

lambda1 = decimal.decimal(str(n*afr/24/365))        return poisson(lambda1, t, k)    # 副本數r的n 個磁碟儲存系統中t時間內造成資料丟失的概率, 只統計r -> 2r-1個副本情況下的丟失資料概率(大於r個情況下,在一遍情況下對結果影響比較小)

def lossdataint(s, n, repnum, t, arf):

loosrate = decimal.decimal(str(0.0))        for k in range(repnum, repnum*2):

kdrate = kdiskfailrate(n,t,arf,k)

singlerate = s * c(n-3, k-3)/c(n,k)

kdlossrate = kdrate * singlerate            print "k = " + str(k)  + ", " +str(kdrate) + ", " + str(kdlossrate)

loosrate += kdlossrate        print loosrate        return loosrate    # define loserate in one year

def loserate(s, n, repnum, t, afr):

return 1 - (1 - lossdataint(s, n, repnum, t, afr))**(365*24/t)    #組合運算

def c(n, m):

return factorial(n) / (factorial(m)*factorial(n-m))    #泊松分布

def poisson(lam, t, r):

e=decimal.decimal(str(math.e))        return ((lam * t) ** r) * (e**(-lam*t)) / factorial(r)    #t時間內損壞r塊磁碟的概率

def probability(t, r):

return poisson(t, r)    #級數

def factorial(n):

s = decimal.decimal("1")      for i in range(1, n+1):

n = decimal.decimal(str(i))

s = s*n      return s    # case 1

n = 7200

disksize = 8*1024

percent = 0.7

partsize = 10

repnum = 3

t = 1

afr = 0.04

s  =  randomcopysets(n, disksize, repnum, percent, partsize)    print loserate(s, n, repnum, t, afr)

2.2 蒙特卡羅

蒙特卡羅方法(monte carlo method)。是一種計算方法。原理是通過大量隨機樣本,去了解乙個系統,進而得到所要計算的值。 它非常強大和靈活,又相當簡單易懂,很容易實現。對於許多問題來說,它往往是最簡單的計算方法,有時甚至是唯一可行的方法。 簡單介紹可參見蒙特卡羅方法入門。

在解這裡的 x / c(7200, k) 的計算基本可以轉換為不直接求x,而使用足夠多的計算機隨機試驗來直接計算概率。 首先構建乙個含s個隨機的copyset 組合,然後從7200個節點中隨機選擇k個節點,記錄每一次是否命中copyset,實驗次數越多,概率越準確。

雲硬碟是網易雲提供的資料持久化服務,為雲伺服器和容器服務提供彈性塊儲存裝置。

網易雲免費體驗館,0成本體驗20+款雲產品!

【推薦】 如何有效的杜絕「羊毛黨「的薅羊毛行為?

【推薦】 乙個只有十行的精簡mvvm框架(下篇)

分布式儲存系統可靠性系列三 設計模式

從上文分布式儲存系統可靠性 系統估算示例 中詳細分析了系統可靠性量化的估算手段,並且給出了示例 的主要輸入引數為如下所示。loserate s,n,repnum,t,afr n 系統中磁碟的數量 包括磁碟的容量資訊 s 系統copyset的數量 repnum 儲存的備份數量 t 壞盤情況下的恢復時間...

分布式儲存系統可靠性系列三 設計模式

從上文分布式儲存系統可靠性 系統估算示例 中詳細分析了系統可靠性量化的估算手段,並且給出了示例 的主要輸入引數為如下所示。loserate s,n,repnum,t,afr n 系統中磁碟的數量 包括磁碟的容量資訊 s 系統copyset的數量 repnum 儲存的備份數量 t 壞盤情況下的恢復時間...

分布式儲存系統可靠性系列三 設計模式

從上文分布式儲存系統可靠性 系統估算示例 中詳細分析了系統可靠性量化的估算手段,並且給出了示例 的主要輸入引數為如下所示。loserate s,n,repnum,t,afr n 系統中磁碟的數量 包括磁碟的容量資訊 s 系統copyset的數量 repnum 儲存的備份數量 t 壞盤情況下的恢復時間...