Zookeeper之Zab协议介绍(二)

系统模型

一个Zab系统由一组进程组成II = {p1, p2, ..., pn},每个进程都配有一个稳定的存储设备。进程以一个不停的循环方式进行处理,并通过交换消息方式进行相互通信。分布式情况下,进程可能不断地崩溃,恢复。只要不崩溃,我们认为进程处于up状态,否则就处于down状态。我们假定,最终会有足够多的进程处于up状态,并持续足够长的时间。事实上,只要超过多数的进程处于up状态足够长时间,并且能相互传递消息以进行通信,那么系统就能开始工作了。对于基于II的法定人数系统,其定义如下:



进程之间通过双向的信道来交换消息。更准确地说,位于进程Pi和Pj之间信道Cij,对于Pi和Pj中任何一个都有一对缓存,即输入缓存和输出缓存。事件send(m,Pj),表示将消息m发送给进程Pj。消息m会被插入到Pi的信道Cij的输出缓存。消息以被发送的次序传送,并被插入到Pj的输入缓存。事件recv(m,Pi),表示进程Pi从它的输入缓存读取下一个消息m。

为了描述信道的特性,我们采用词汇-循环(iterations),因为其算法是采用循环来进行处理。每个循环都有三个阶段(phases)。让S(i,j,k,k')表示进程Pi在第k循环发时,发送给处于第k'循环的进程Pj的所有消息的系列。我们假定,Pi和Pj之间的信道满足一下特性:


完整性(Integrity):
仅当进程Pi发送了消息m,进程Pj才会从与Pi通信的信道接收到消息m。

前缀性(Prefix):
如果进程Pj接收到了消息m,并且存在消息m',也同属于消息序列S(i,j,k,k'),且m'的序列号小于m,那么消息m'必定先于消息m被Pj接收。

单次循环性(Single iteration):
对于信道Cij,进程Pj的输入缓存只包含一次循环处理的消息。


信道的实现


为了实现以上的特性,我们为信道定义其状态,保证其活性(liveness)。实际上,我们采用TCP连接。在一个新的循环开始,我们会建立Pi和Pj之间的连接。这么做,我们就保证只有被Pi发送的消息才会被Pj接收(完整性);消息序列的前缀一定会被接收;每次创建新的TCP连接,以保证一个消息序列只在一个循环里被处理。







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值