mit6.824-(lab2 partA)

github地址:
https://github.com/canezk/MIT-6.824/tree/master/src/viewservice

Part A: The Viewservice

mit-6.824 lab2 文檔
這個(gè)版本實(shí)現(xiàn)的是View Service
(僅供學(xué)習(xí)使用)

系統(tǒng)角色

  1. View Server (管理集群的節(jié)點(diǎn),控制primary的切換,保證集群只有一個(gè)primary,提升idle為backup,提升backup為primary)
  2. Primary (store server的集群主節(jié)點(diǎn))
  3. BackUp (可以理解為slave,需要sync -> Primary,最有一個(gè))
  4. Idle server (只是和VS ping,合適的時(shí)候提升為backup)

關(guān)于角色切換的說(shuō)明

vs的存在是為了切換primary,保證primary 掛機(jī)之后選擇新的primary,有以下情況

1. primary crash然后reboot,ping VS
    > (1) primary為當(dāng)前view的情況,已經(jīng)被ack了(就是primary在down之前,已

經(jīng)知道自己就是當(dāng)前view的primary)
> 這個(gè)時(shí)候,假如有backup,就promote為新的primary,返回給server;同
時(shí),選擇idle隊(duì)列的一個(gè)server為新的backup
> 沒(méi)有backup,那么集群就掛機(jī),由于idle不為空的話一定為保證有backup,所有假如沒(méi)有backup,說(shuō)明集群只有一個(gè)節(jié)點(diǎn),不正常服務(wù)也是對(duì)的
> (2) primary還沒(méi)有ack當(dāng)前的view,那么集群必須等到這個(gè)primary reboot之后才會(huì)正常服務(wù)

2. primary ping
  > 更新ttl
3. 非backup ping
> 放到idle隊(duì)列,更新ttl(VS后臺(tái)需要提供任務(wù),定時(shí)清理down掉的idle server)    
4. backup ping
  > 更新ttl

系統(tǒng)功能

  > *內(nèi)存*kv數(shù)據(jù)存儲(chǔ)

view

> view是集群的當(dāng)前視圖,表明集群哪個(gè)節(jié)點(diǎn)是Primary,哪個(gè)是BackUp

節(jié)點(diǎn)狀態(tài)

  1. active
  2. recovering
  3. down

    如果down -> active,需要給primary匯報(bào)這個(gè)信息(方法使用過(guò)特殊的ping參數(shù))

tips

> 1. 集群每個(gè)節(jié)點(diǎn)需要在固定時(shí)間間隔之內(nèi)ping VS(View Server的簡(jiǎn)稱)    
> 2. 只有三種情況可以更新view,也就是view的number遞增(詳細(xì)參考上面的鏈接)   
 > 3. 如果primary不能返回ping acknowledges給VS,集群將無(wú)法自動(dòng)恢復(fù)    ### 測(cè)試    
> cd到viewsercice目錄,執(zhí)行*go test*
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容