分布式系统-4-同步网络一致性算法

引言

上一篇文章讲了分布式同步网络算法中的BFS、最短路径、MST和MIS算法,这一篇文章将会将分布式系统中一个非常重要的问题-一致性。在单节点的环境中,一致性问题是比较容易解决的,像单节点的数据库,因为只有一个节点,也就不存在数据不一致的说法。

因为机器总会有概率出故障,如果仅仅是单节点应用,一旦机器发生故障,那么服务将不可用。为了提供高可用的应用,多节点部署应用成为一种解决方案,但是多节点部署应用也引发了一些问题,比如节点故障依然存在;并且因为多节点,导致节点间需要通信,因此系统存在通信故障,如果机器不是在自己机房内,可能要有Byzantine故障,这些问题都可能导致数据一致性问题。比如,在分布式数据库事务中,假设两个进程a,b需要通信来达成是一致(提交或者回滚),因为通信故障,a收到b的提交请求,但是b没有收到a的请求,此时a可能会提交,而b可能回滚,那么就出现数据不一致。

接下来的文章的结构是,第一部分是介绍在分布式同步网络中,如何在通信故障下解决一致性问题;第二部分介绍,如何在节点停止故障下解决一致性问题;第三部分介绍,如何在节点出现Byzantine故障下解决一致性问题。

####通信故障下一致性

协同攻击问题
  • 定义:几个将军协同攻击问题,所有将军通过信使互相传递消息,经过图的直径轮后,消息会传递给各个将军,最后决议是否发起攻击,但是如果有消息丢失,那么将军无法达成一致。在计算机中,比如分布式数据库事务
  • 决议满足的条件
    1. 一致性:没有两个进程决议不同的值
    2. 有效性:如果所有进程初始值为0,那么决议值只能是唯一的0;如果所有进程的初始值为1,那么决议值只能是唯一的1
    3. 终止性:所有进程最终为做出决议
协同攻击问题-随机化版
  • 定义:对消息丢失做一定概率性假设,然后必须允许一定概率违反一致性和有效性

  • 前提假设

    1. 每个进程有确定的起始状态
    2. 知协议在固定的 r ≥ 1 r \ge 1 r1轮终止,在 r r r轮后,每个进程节点需要输出它的决议
    3. 消息的丢失不是随机发生,而是由“对手”决定的
  • 通信模式

    • ( i , j , k ) (i,j,k) (i,j,k) ( i , j ) (i,j) (i,j)是图的一条边, k ≥ 1 k \ge 1 k1,代表在k轮的从i发给j的消息
    • 定义通信模式 γ \gamma γ是good,一系列的 ( i , j , k ) (i,j,k) (i,j,k)消息投递成功的
    • 对于任意的对手B不一致的概率为, P r B { s o m e   p r o c e s s   d e c i d e s   0   a n d   s o m e   p r o c e s s   d e c i d e s   1 } ≤ ϵ Pr^B\{some \ process\ decides\ 0\ and\ some\ process\ decides\ 1\} \le \epsilon PrB{ some process decides 0 and some process decides 1}ϵ
  • "对手"的作用

    • 为图中每个节点分配input值
    • 定义一个good的通信模式
  • RandomAttack算法

    • 前提假设:为简单起见,假设图是n节点的完全图(完全图是指图中任意两个节点都有直接边连接)

    • 定义通信模式

      • 通信模式 γ \gamma γ这里指的是消息的偏序关系, ( i , k ) (i,k) (i,k)代表i节点的k时刻,有如下关系

        1. 对于所有的 1 ≤ i ≤ n 1 \le i \le n 1in和所有的 0 ≤ k ≤ k ′ 0 \le k \le k^{\prime} 0kk满足 ( i , k ) ≤ γ ( i , k ′ ) (i,k) \le_{\gamma} (i,k^{\prime}) (i,k)γ(i,k)
        2. 如果 ( i , j , k ) ∈ γ (i, j, k) \in \gamma (i,j,k)γ,则有 ( i , k − 1 ) ≤ γ ( j , k ) (i, k-1) \le_{\gamma} (j, k) (i,k1)γ(j,k)
        3. 传递性,如果 ( i , k ) ≤ γ ( i ′ , k ′ ) (i, k) \le_{\gamma} (i^{\prime}, k^{\prime}) (i,k)γ(i,k)并且 ( i ′ , k ′ ) ≤ γ ( i ′ ′ , k ′ ′ ) (i^{\prime}, k^{\prime}) \le_{\gamma} (i^{\prime \prime}, k^{\prime \prime}) (i,k)γ(i,k)则有 ( i , k ) ≤ γ ( i ′ ′ , k ′ ′ ) (i,k) \le_{\gamma} (i^{\prime \prime}, k^{\prime \prime}) (i,k)γ(i,k)
      • 定义 l e v e l level level,用 l e v e l γ ( i , k ) level_{\gamma}(i,k) levelγ(i,k)表示进程 i i i 1 ≤ k ≤ r 1 \le k \le r 1kr的值,值的规则如下

        1. 如果 k = 0 k = 0 k=0,那么 l e v e l γ ( i , k ) = 0 level_{\gamma}(i,k) = 0 levelγ(i,k)=0
        2. 如果 k > 0 k>0 k>0并且有 j ≠ i j \neq i j=i使得 ( j , 0 ) > γ ( i , k ) (j,0) >_{\gamma} (i, k) (
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值