栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

分布式一致性——Paxos

分布式一致性——Paxos

Paxos

文章目录
  • Paxos
    • 前言
    • 复制策略对比
    • Basic-Paxos
      • 是什么
      • 角色
      • case
        • case-1 无冲突
        • case-2 XY冲突,X失败Y成功
        • case-3 在case-2基础上,X发出round=3
      • 步骤
    • refer

前言

一致性:

  1. CAP
  2. base

一致性模型及算法:

  1. 弱一致性

    1. 最终一致性

      DNS

      Gossip

  2. 强一致性

    主从同步

    Paxos:basic-paxos、multi-paxos、fast-paxos

    Raft(multi-paxos)

    ZAB(multi-paxos)

说明:

  1. 数据不能存在单点上
  2. 多副本状态机
复制策略对比
  1. 主从异步复制

    1、master收到写请求

    2、master写入

    3、master应答ok

    4、master复制数据到slave

    数据丢失:3完成,4未完成之间,master宕机

  2. 主从同步复制

    12、…

    3、master复制数据给所有slave

    4、所有slave完成,master应答ok

    可用性降低:某个slave宕机,无法写入,整个系统不可用

  3. 主从半同步复制

    12、…

    3、master复制数据给所有slave

    4、x个slave完成,master应答ok

    x:足够多的机器,但不需要全部机器

    可靠性:较高的可靠性

    一致性:存在某种不一致(可能每个slave都缺失数据,比起master)——>不完整

  4. 多数派写(读)

    写:写入半数以上机器

    读:从半数以上机器读

    场景:node1和2写入x=y1;node2和3写入x=y2;读取node1和3,结果为y1和y2,如何选择?最新

    避免歧义,需要一个全局递增时间戳/版本号,最后一次写入覆盖之前写入

    又一个场景:node2和3写入y2时,node2失败,读取12返回y1,读取23返回y2,整个系统对外提供的数据仍不一致

    又一个场景:请求顺序

Basic-Paxos 是什么

在分布式系统中保证多副本数据强一致的算法

作用:协同,实现一致性

角色
角色说明
client请求者,请求
proposer提议者,提议
acceptor/voter接受者,投票
learner学习者,备份
case case-1 无冲突

  1. Phase-1

    Proposer:发出提案,编号为1,请求[1]

    Acceptors:Quorum设置last_round=1,响应[-,-]

  2. Phase-2

    Proposer:收到Quorum,选择值(自定义),请求[round=1, v=‘x’]

    Acceptor:Quorum比对round和last_round,设置v=‘v’,存储[last_round=1, v=‘x’, round=1],响应’Accepted’

case-2 XY冲突,X失败Y成功

  1. X-1:X完成写前读取,Quorum记录last_round=1

  2. Y-1:Y完成写前读取,Quorum记录last_round=2

  3. X-2:X以round=1发出写,失败

    原因:不满足Quorum,只有Acceptor-1 Accepted,Acceptor-2 Fail

  4. Y-2:Y以round=2发出写,成功

    原因:满足Quorum

case-3 在case-2基础上,X发出round=3

  1. X-1:写前读取,round=3,Quorum记录last_round=3,并响应y2和x1

    不同响应,则选取round最大的v,即选取y2,并作为选择的值进行phase-2

  2. X-2:写,round=3且v=y2,成功

步骤
  1. Phase-1 写前读取

    1. Prepare req{ round=n1 }

    2. Promise rsp

      n1小于等于last_round,拒绝

      n1大于last_round,响应{ v, round}

  2. Phase-2 提交介绍(前提 Quorum)

    1. Accept req{ round=n1, v}

      v的取值:Promise响应携带值,则使用round最大的值,否则自定义值

    2. Accepted rsp

      n1等于last_round,接受

      n1不等于last_round,拒绝

refer

可靠分布式系统-paxos的直观解释——张炎泼(xp)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604544.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号