在節(jié)點(diǎn)之間交換信息的過程中,如果節(jié)點(diǎn)失效,則會(huì)產(chǎn)生無效的傳送信息,加重系統(tǒng)的傳輸負(fù)擔(dān),因此引入錯(cuò)誤檢測機(jī)制是很有必要的。Dynamo采用的錯(cuò)誤檢測機(jī)制非常簡單、實(shí)用。一旦發(fā)現(xiàn)對方?jīng)]有回應(yīng),就認(rèn)為該節(jié)點(diǎn)失效,立刻選擇別的節(jié)點(diǎn)進(jìn)行通信。同時(shí)定期向失效節(jié)點(diǎn)發(fā)出消息,如果對方有回應(yīng)則可以重新建立通信。假如一新節(jié)點(diǎn)加入節(jié)點(diǎn)總數(shù)為N的系統(tǒng),并以最優(yōu)的方式進(jìn)行傳播(即每次通信的兩個(gè)節(jié)點(diǎn)都是第一次交換新節(jié)點(diǎn)信息),那么將新節(jié)點(diǎn)信息傳遍整個(gè)系統(tǒng)需要的時(shí)間復(fù)雜度為logn,如圖3-10所示。每一層代表一次隨機(jī)通信,第一層節(jié)點(diǎn)1將信息交換給節(jié)點(diǎn)2;第二層節(jié)點(diǎn)1和2同時(shí)開始隨機(jī)選擇其他節(jié)點(diǎn)交換信息,比如節(jié)點(diǎn)1向節(jié)點(diǎn)3發(fā)送信息,節(jié)點(diǎn)2向節(jié)點(diǎn)4發(fā)送信息;依此類推直到全部W個(gè)節(jié)點(diǎn)全部傳遍,整個(gè)過程形成一個(gè)倒的二叉樹,樹高為logn。很明顯當(dāng)N很大時(shí),時(shí)間復(fù)雜度會(huì)變得很大,所以Dynamo的節(jié)點(diǎn)數(shù)不能太多。根據(jù)Amazon的實(shí)際經(jīng)驗(yàn),當(dāng)節(jié)點(diǎn)數(shù)在數(shù)千時(shí),Dynamo的效率是非常高的,但當(dāng)節(jié)點(diǎn)數(shù)增加到數(shù)萬后,效率就會(huì)急劇下降。如何解決這個(gè)問題呢,Amazon給出了分層Dynamo結(jié)構(gòu),有興趣的讀者可以進(jìn)一步關(guān)注我們的內(nèi)容。