分布式算法復(fù)習(xí)
CAP理論:
Consistency一致性:訪問(wèn)每個(gè)節(jié)點(diǎn)都返回一致的數(shù)據(jù)
Availability可用性:每個(gè)訪問(wèn)一定會(huì)響應(yīng)
Partition Tolerance分區(qū)容忍性:集群被分區(qū)仍能正常提供服務(wù)
二階段提交:
一階段通知各事務(wù)節(jié)點(diǎn)預(yù)留資源
二級(jí)段通知各事務(wù)節(jié)點(diǎn)執(zhí)行事務(wù)
XA:mysql表直接上鎖
AT:自定義全局鎖
TCC:預(yù)留+確認(rèn)+撤銷(xiāo)【可用于非關(guān)系型數(shù)據(jù)庫(kù)+且必須是可預(yù)留資源】
SATA:補(bǔ)償業(yè)務(wù)
流量過(guò)大的處理:
流量削峰,延遲響應(yīng),體驗(yàn)降級(jí),過(guò)載保護(hù)
Poxos:
準(zhǔn)備階段:提議者向所有接受者提出準(zhǔn)備請(qǐng)求(攜帶提案編號(hào)x),接受者響應(yīng)則表達(dá)承諾以后不再響應(yīng)提案編號(hào)小于或等于x的做準(zhǔn)備請(qǐng)求,也不會(huì)通過(guò)編號(hào)小于x的提案,不響應(yīng)則表示已經(jīng)響應(yīng)了提案編號(hào)比x大的提案
接受階段:提議者收到過(guò)半接受者對(duì)準(zhǔn)備請(qǐng)求的響應(yīng)后,將發(fā)出接受請(qǐng)求,接受者接收到接受請(qǐng)求后,如果不違背已作出的承諾就會(huì)響應(yīng)并執(zhí)行(記錄日志),反之不響應(yīng)
【問(wèn)題:當(dāng)有三個(gè)提議者時(shí),可能三個(gè)提議各占三分之一的接受者,此時(shí)全部提議無(wú)效】
【問(wèn)題:編號(hào)本質(zhì)是優(yōu)先級(jí),沒(méi)有順序性(其實(shí)應(yīng)該改用時(shí)間戳)】
Multi-Paxos:
只有領(lǐng)導(dǎo)者一個(gè)提議點(diǎn)時(shí),不會(huì)有提案沖突
當(dāng)領(lǐng)導(dǎo)者處于穩(wěn)定狀態(tài)時(shí),省掉準(zhǔn)備階段,直接進(jìn)入接受階段
Chubby還為了實(shí)現(xiàn)強(qiáng)一致性,讀操作也只在主節(jié)點(diǎn)上進(jìn)行
Raft:
跟隨者:隨機(jī)超時(shí)(剛開(kāi)始啟動(dòng)時(shí)或已有領(lǐng)導(dǎo)者斷線時(shí))——參與競(jìng)爭(zhēng)(任期+1)——投票
候選人:發(fā)起投票——收到過(guò)半選票——發(fā)表宣言
領(lǐng)導(dǎo)者:定時(shí)心跳(含最大日志序號(hào)+任期)+日志復(fù)制(日志是連續(xù)的且順序提交的,寫(xiě)操作時(shí)過(guò)半成功持久化時(shí)響應(yīng),剩下的即合沒(méi)有成功也能用日志慢慢補(bǔ),心跳時(shí)有最大日志序號(hào))
如果接收到任期比自己任期大,且其日志序號(hào)大于自己的領(lǐng)導(dǎo)者心跳或新領(lǐng)導(dǎo)者投票,則自己變成跟隨者
【成員變更時(shí):?jiǎn)喂?jié)點(diǎn)變更,即如果要加兩個(gè)節(jié)點(diǎn),則領(lǐng)導(dǎo)者要在先知道第一個(gè)新節(jié)點(diǎn)后,才能再加第二個(gè)節(jié)點(diǎn)】
讀操作時(shí),有三種方法:
一是AC:只允許讀主節(jié)點(diǎn)(相當(dāng)于沒(méi)有P,肯定AC)
二是AP:模式任意節(jié)點(diǎn)只要存在這個(gè)信息就返回
三是CP:模板要得到過(guò)半節(jié)點(diǎn)的相同信息才返回(例如有2k+1個(gè)節(jié)點(diǎn),讀取時(shí)要有k+1個(gè)相同的信息才返回,或者取K+1個(gè)信息中最新者)
BASE理論:
Basically Available基本可用
Eventually Consistent最終一致性
Soft State軟狀態(tài)
一致性哈希算法:
對(duì)2^32進(jìn)行取模,對(duì)三個(gè)節(jié)點(diǎn)映射到哈希環(huán)上(可以有虛擬節(jié)點(diǎn)),每次增刪節(jié)點(diǎn)都,只有小部分KV要遷移
Gossip:
直接郵寄:傳送失敗時(shí)記在緩存隊(duì)列中,當(dāng)OOM時(shí)會(huì)丟失數(shù)據(jù)
反熵:推,拉,推拉三種方法,即每個(gè)節(jié)點(diǎn)都隨機(jī)往另一個(gè)節(jié)點(diǎn)進(jìn)行推,拉或推拉
謠言傳播:對(duì)所有節(jié)點(diǎn)設(shè)計(jì)一個(gè)閉環(huán)的過(guò)程(例如編號(hào)1,2,3,到n,再回到1這樣,一次修改所有節(jié)點(diǎn)的副本數(shù)據(jù)不一致的問(wèn)題)
Quorum NWR:
N表示集群中同一份數(shù)據(jù)有多少個(gè)副本
W表示W(wǎng)個(gè)副本更新成功才完成寫(xiě)操作
R表示讀取一數(shù)據(jù)對(duì)象時(shí)需要讀取R個(gè)副本并取最新的那個(gè)
當(dāng)N<W+R時(shí),有強(qiáng)一致性