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