Gossip協議-推導運算分析

lipeng08發表於2017-01-16

簡介

Gossip協議又稱傳染病協議,因為gossip(流言)以類似於病毒的方式在計算機之間傳播資訊。

Gossip協議滿足的條件

  1. 協議的核心包括週期性,成對性,內部程式互動
  2. 互動期間的資訊量大小固定
  3. 節點互動後,至少一個agent獲知另一個agent的狀態
  4. 通訊不可靠
  5. 交流的頻率遠遠低於訊息的傳輸延遲
  6. 對端選擇的隨機性,或者從全集,或者從部分集合
  7. 由於副本的存在,傳輸的資訊具有隱式冗餘

Gossip協議舉例

假設我們在一個網路中尋找一個pattern的最優匹配,機器上執行著agent 程式,這些agents實現了gossip協議

  1. 使用者首先要求local agent傳播pattern
  2. 每一個agent定期並以一定的速率(0.1秒一次)隨機選擇一個其他的節點傳播此pattern。例如節點A和B,如果A知道了pattern,那麼B也會知道,隨後A和B隨機選擇了C和D繼續傳播此訊息。因此即使發生節點故障或者訊息丟失,此訊息依然會在全網範圍內傳播。
  3. 如果agent第一次收到此pattern,則開啟本地查詢,尋找本地的最優匹配
  4. agents也傳播其最優匹配。因此,如果A和B進行互動後,A和B都會知道最優匹配。最優匹配也會通過全網範圍進行傳播。
  5. Log時間的複雜度,例如25000個節點,那麼30輪就會結束,15輪進行pattern的傳播,15輪詢問最優匹配。

有偏Gossip協議

不是從全部節點中隨機選擇一個,考慮到網路延遲,從相鄰的節點中隨機選擇,更高效。

為何是log時間

變數定義

初始11個人,全部nn個人,一個人每次感染bb個人,則感染率為p=b/(n1)p = b/(n-1)
令第ii輪有xix_i個人被感染,nxin-x_i未感染
則第i+1i+1被感染的新的人數為xip(nxi)x_i * p * (n-x_i)
xi+1=xi+xip(nxi)x_{i+1} = x_i + x_i * p * (n-x_i),且x1=1x_1 = 1

證明

xix_i個人中每一個人能夠感染的新人為: b(nxi)/(n1)b * (n-x_i)/(n-1)
則一共xix_i個人貢獻的感染人數為: xib(nxi)/(n1)=xip(nxi)x_i * b * (n-x_i) / (n-1) = x_i * p * (n-x_i)
##推導xtx_t
一種方案是解通項公式,對xi+1x_{i+1}進行轉換
xi+1=Axi2+Bxi+C=A(xiB/2A)2+CB2/(4A)A=pn,B=pn+1,C=0 x_{i+1} = A * x_i^2 + B * x_i + C \\ = A(x_i-B/2A)^2 + C - B^2/(4A)\\ 其中 A=-pn, B=pn+1, C=0
xi=ai+B/(2A)x_i = a_i + B/(2A)代入到上式中,則
ai+1=Pai2+Q滿 P=A,Q=(4ACB2+2B)a_{i+1} = P * a_i^2 + Q\\ 且滿足\ P = A, Q = (4AC - B^2 + 2B)
於是現在的問題轉換為如何解出ai+1a_{i+1},然而我並沒有想到很好的解法,不知道能否通過展開求級數?

另一種方案是採用微分方程的方式,然而並不完全可靠
一些簡單的分析:
分析1: 由xi+1=xi+1x_{i+1} = x_{i}+1,可推匯出xi+1xi=1x_{i+1}-x_i=1,即dydt=1\frac{dy}{dt} = 1,從而可以解出y=ty = t,即xt=tx_t=t
分析2: 由xi+1=2xix_{i+1} = 2*x_{i},可推匯出xi+1xi=xix_{i+1}-x_i=x_i
dydt=y\frac{dy}{dt} = y,從而可以解出lny=t\ln{y} = t,即xt=etx_t=e^t,然而實際上我們可以手動計算此通項,即xt=2tx_t = 2^t,這兩個是不一樣的,然而我們可以看出它們的指數是一樣的tt,僅僅是底數不同而已,同理,可使用其他類似的式子進行測試,它的總體指數趨勢是不變的,變的僅僅是底數而已,於是我想當然的利用這一特性(個人感覺應該可行)!

xi+1=xi+xip(nxi)x_{i+1} = x_i + x_i * p * (n-x_i),得xi+1xi=xip(nxi)x_{i+1}-x_i = x_i * p * (n-x_i),故而dydt=yp(ny)\frac{dy}{dt} = y * p * (n-y)
對上次進行積分過程如下:
dydt=yp(ny)dyy(ny)=pdtdyy+dyny=pndtlnylnny=pntlnyny=pnt \frac{dy}{dt} = y * p * (n-y)\\ \frac{dy}{y*(n-y)} = p*dt\\ \frac{dy}{y} + \frac{dy}{n-y} = p * n * dt\\ 積分可得: \ln{y}-\ln{n-y} = p*n*t \\ \ln{\frac{y}{n-y}} = p*n*t\\
nn非常大的時候,可令y=n1y=n-1,且pnb,nn1p*n \approx b, n \approx n-1,則
lnn=bt\ln{n} = b*t,即t=lnnbt = \frac{\ln{n}}{b},故而得出經過lnnb\frac{\ln{n}}{b}輪,有n1n-1個人被感染,也可認為全部被感染。
考慮到上面在轉化為積分過程中,會有底數的不一致性,因此也就是時間複雜度為clognc\log{n}級別。

相關文章