美文网首页
分布式协议

分布式协议

作者: modou1618 | 来源:发表于2019-02-19 22:26 被阅读0次

    《从paxos到zookeeper分布式一致性原理与实践》笔记

    • 事务的acid:原子性,一致性,隔离性,持久性
    • cap理论:一致性,可用性,分区容错性
    • base理论:基本可用,弱状态,最终一致

    一 2pc

    • 2pc,两阶段提交。协调者负责向各节点发送请求
      阶段一 发送事务请求
      阶段二 根据各节点响应结果, 发送事务提交或回滚
    • 缺点
      请求处理过程中所有节点处于同步阻塞
      发送事务请求的协调者存在单点问题,可能导致执行节点数据不一致
      协调者需要等待所有节点响应结果或请求超时

    二 3pc

    • 3pc,三阶段提交
      阶段一 事务是否可执行询问
      阶段二 发送事务预提交请求或中断事务
      阶段三 事务正式提交
    • 协调者异常
      无影响: 阶段一 事务不提交,阶段三 超时后会提交事务
      有影响:阶段二 导致收到预提交请求的节点提交事务,未收到的则未执行事务

    三 paxos

    • 基于消息传递,高度容错的一致性算法

    • 拜占庭将军问题
      多点通信,通信可能被串改

    • 兼职议会
      多点通信,通信可能丢失,但不会被串改,节点可能下线

    • 角色proposer,acceptor,learner

    • proposer提交提案,包含序号和提案信息。两阶段,第一阶段prepare,第二阶段提交。

    • acceptor在prepare节点不会接受比之前提案序号更低的提案, 高序号prepare,则返回之前接受的最高序号。

    • 过半acceptor响应prepare,则表示过半acceptor接受的提案序号中自己的提案序号最大。则发送acceptor请求

    • accpetor若又接到更高序号的prepare,则不响应acceptor请求。

    • 过半accpetor响应acceptor请求,则提案协商成功

    • acceptor选中提案后,发送给一组主learner,主learner再同步给其他learner。

    四 chubby

    • paxos的工程实现,面向松耦合的分布式系统的锁实现
      小文件读写,事件通知

    • 架构,服务端+客户端

    • 服务端通过paxos算法选举一个master,有效期成为master租期,可以续租。

    • master故障后则重新选举

    • 服务端都存储一份数据副本,只有master可以修改,其他节点从master同步

    • 修改时,master向所有节点发送请求,过半同意后才可修改

    • 使用锁延迟机制,避免获取锁的客户端网络抖动导致服务端认为锁释放,但客户端仍认为在锁的内部进行操作导致并发问题。

    • 锁序列器机制,包含锁名字,类型,序号。锁内操作时同时传递锁序列器信息进行检查。

    五 zookeeper

    • 分布式一致性

    • 简单数据模型,文件目录格式,

    • 集群模式

    • 顺序访问,客户端请求分配全局唯一递增序号

    • 高性能,数据内存存储

    • 角色
      leader, follower, observer

    • znode数据节点
      数据信息+属性信息
      持久节点+临时节点
      顺序节点,非顺序节点

    • stat结构保存版本信息,节点版本,子节点版本,acl版本

    • 时间监听watcher

    • acl节点管理权限控制

    5.1 zab协议

    5.1.1 消息广播

    • 两阶段提交
    • 没有回滚,半数响应就第二阶段提交
    • 每个事务分配一个全局单调递增唯一id,zxid
    • 按zxid递增顺序处理,保证事务顺序性
      leader给每个follower分配一个fifo的队列,按zxid顺序存储事务
      follower收到事务请求后,记录事务日志,返回ack
      leader收到过半数ack后,发送commit
      follower收到commit后,提交事务。

    5.1.2 崩溃恢复,leader选举

    • 保证选举出的leader,有最高zxid的提交事务

    • 选举完成后,数据同步
      收到过半ack,发送commit过程中失败,收到commit的会被选为leader。

    • 需要丢弃的事务请求
      收到请求,未发送prepare时失败,

    • 丢弃还是提交???
      prepare阶段失败。
      收到过半ack,未发送commit时失败.

    • zxid低32位表示事务唯一递增id,高32位表示本轮leader id。重新选举后leader id加1

    5.2 使用

    5.3 应用场景

    • 配置管理
      配置获取,配置变更推拉结合获取

    • 负载均衡
      动态dns,节点为域名,值为ip
      服务调用者从域名节点获取服务ip
      服务提供者向域名节点注册本机ip

    • 命令服务
      uuid 长度过长,含义不明
      zookeeper通过创建顺序节点+节点前缀,即可获得唯一id

    • 分布式协调和通知
      通过节点变更事件监听watcher,协调不同机器
      热备份:多个机器在同一zk节点下创建临时顺序子节点,小序号的机器则获取任务执行权限。大序号的机器则监听变更,若小序号机器当机则触发热备
      冷备份:机器周期扫描zk节点,创建顺序临时子节点,获取到最小序号的机器执行任务,其他机器删除子节点继续扫描其他zk任务节点。

    • 分布式系统机器通信方式
      心跳检测: 注册临时子节点,检查其他机器创建的临时节点是否存在判断存活。不用互相之间发送心跳报文
      工作进度汇报:在zk任务节点下创建临时子节点,内容写入工作进度
      系统调度:机器监听zk节点事件,控制台变更zk节点,触发客户端机器调度。

    • 集群管理
      创建临时子节点

    • 分布式日志收集系统
      收集器注册,收集任务注册

    • master选举
      临时顺序子节点

    • 分布式锁
      排他锁,临时顺序子节点,最小序号获取锁。否则监听变更,等待锁释放。
      共享锁,临时顺序子节点,写锁,最小序号则获取成功,否则监听变更等待锁释放。 读锁,检查序号更小的节点,若都为读锁则获取成功可读。否则监听变更,等待锁释放

    • 分布式队列
      fifo队列,入队创建临时顺序子节点,按序号出队
      barrier屏障,监听子节点数量达到目标数量后,所有机器开始执行。

    5.4 运维

    相关文章

      网友评论

          本文标题:分布式协议

          本文链接:https://www.haomeiwen.com/subject/fqjqyqtx.html