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