
在节点之间交换信息的过程中,如果节点失效,则会产生无效的传送信息,加重系统的传输负担,因此引入错误检测机制是很有必要的。Dynamo采用的错误检测机制非常简单、实用。一旦发现对方没有回应,就认为该节点失效,立刻选择别的节点进行通信。同时定期向失效节点发出消息,如果对方有回应则可以重新建立通信。假如一新节点加入节点总数为N的系统,并以最优的方式进行传播(即每次通信的两个节点都是第一次交换新节点信息),那么将新节点信息传遍整个系统需要的时间复杂度为logn,如图3-10所示。每一层代表一次随机通信,第一层节点1将信息交换给节点2;第二层节点1和2同时开始随机选择其他节点交换信息,比如节点1向节点3发送信息,节点2向节点4发送信息;依此类推直到全部W个节点全部传遍,整个过程形成一个倒的二叉树,树高为logn。很明显当N很大时,时间复杂度会变得很大,所以Dynamo的节点数不能太多。根据Amazon的实际经验,当节点数在数千时,Dynamo的效率是非常高的,但当节点数增加到数万后,效率就会急剧下降。如何解决这个问题呢,Amazon给出了分层Dynamo结构,有兴趣的读者可以进一步关注我们的内容。
