聊聊SWIM Protocol

本文主要研究一下SWIM Protocolhtml

SWIM Protocol

SWIM的全称是Scalable, Weakly-Consistent, Infection-Style, Processes Group Membership Protocolnode

heartbeats

传统的诸如heartbeats这种membership protocols,每一个node周期性地向网络中的全部其余节点发送heartbeat来表示本身是alive的,若是peer超过指定interval没有收到node的heartbeart则该node被认定为dead。这种方式适用于小型网络,其发送的heartbeart数量为O(n^2),当网络中有成千上万的node时则会形成巨大的网络负担;SWIM采用Infection-Style dissemination来解决这个问题git

tasks

与传统的heartbeats相比,SWIM将整个过程分为Failure Detection及Membership update Dissemination两个taskgithub

Completeness与Accuracy

对于failure detection来,有几个衡量标准:网络

  • Completeness

是否每一个failed node最终都会被检测到dom

  • Speed of failure detection

一个node从failed到被检测到failed的平均耗时异步

  • Accuracy

false positive rate,即一个node被误判为failed的几率wordpress

  • Message Load

在检测中每一个node的network load是多少,是否均匀分布ui

Unreliable Failure Detectors for Reliable Distributed Systems一文中指出对于异步的网络来讲,100%的Completeness与Accuracy没法同时保证,于是SWIM权衡之下选择了Completeness,同时尽量减小false positive rate以提高Accuracyscala

Failure Detection

SWIM的failure detection过程分为两个部分,一个是direct ping,一个是indirect ping

  • direct ping

local node从alive nodes中随机选择N个node来进行detect;若是direct ping中有的node没有在timeout时间内返回ack则会进行indirect ping

  • indirect ping

local node从alive nodes中随机选择K个node来对direct ping目标node进行indetect ping,这K个node会把结果forwards给这个local node,最后local node检查若是这个K个node没有一个返回ack,则将该目标node标记为failed,而后经过Membership update Dissemination将该node的FAILED信息传播到网络中的其余node

Membership update Dissemination

Membership update Dissemination能够将messages分为JOINED、FAILED两类:

  • JOINED

当一个node加入到该网络时,须要通知其余node更新local membership新增该node

  • FAILED

当一个node被检测为failed时,须要通知其余node更新local membership移除该node

这个过程可使用multicast来实现

改进

  • Infection-Style Dissemination multicast实现的Dissemination是不可靠的并且低效的,一个更加robust版本的SWIM采用Infection-Style的方式进行dissemination,即利用Failure Detection的ping机制,将须要dissemination的消息piggyback在ping/ack上,来实现相似gossip的消息传播,从而减小额外的单独信息传递开销

  • Suspicion Mechanism 为了更好地减小false positive rate以提高Accuracy,能够引入Suspicion Mechanism,即当local node检测到该node failed时将其标记为suspected;被标记为suspected的node在最终被确认为failed以前被当作是alive;其余node若是检测到该node是alive则对该node取消suspected,恢复alive;若是在指定时间该node没有被恢复为alive则被标记为failed

  • Time bound failure detection 随机选择node进行ping可能会形成必定的延时,可使用round robin的方式来取代随机选择,当全部node都选择过了以后再从新shuffle该node list

小结

  • SWIM的全称是Scalable, Weakly-Consistent, Infection-Style, Processes Group Membership Protocol;与传统的heartbeats相比,SWIM将整个过程分为Failure Detection及Membership update Dissemination两个task
  • SWIM的failure detection过程分为两个部分,一个是direct ping,一个是indirect ping
  • Infection-Style的方式进行dissemination,即利用Failure Detection的ping机制,将须要dissemination的消息piggyback在ping/ack上,来实现相似gossip的消息传播,从而减小额外的单独信息传递开销

doc

相关文章
相关标签/搜索