浅谈分布式锁服务——以Chubby为例

1,110 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

Chubby简介

Chubby是一个由Google设计的提供粗粒度锁服务的文件系统。基于松耦合分布式系统,解决了分布式一致性的问题。

  • 特点:是一种advisory lock,不是mandatory(强制) lock,系统有很大的灵活性。
  • 用途:
    • GFS(Google file system)使用其选取一个主服务器;
    • Google内部使用其进行Name Server
    • Bigtable使用其指定一个主服务器并发现、控制与其相关的子表服务器;
    • 其还可单独作为一个稳定的存储系统存储一些小数据

Chubby一致性问题解决原理————Paxos算法及原理及其实现

分布式一致性问题

简言之,即保证系统中初始状态相同的各个节点在执行相同的操作序列时,看到的指令序列完全一致,并且最终得到的结果完全一致。

(我的理解:并不是要时刻同步,但是在关键的地方要同步,最终结果也要一致)

解决思路

设置一个专门的结点,该结点接收每次进行新操作时第一个节点发送的状态信息,并以此为基准,其他结点通过查询该结点获取信息后也同样执行该操作。

问题

如果该结点崩了,整个系统就崩了,不够可靠。

解决思路

同时设置多个这样的特殊结点,由它们共同决定操作序列。这也是Paxos的基本思想。

Paxos内容

概述

Paxos是由Leslie Lamport最先提出的基于消息传递的一致性算法。

其中的结点分为三种类型:

  • proposers
  • acceptors
  • learners

proposers提出提议,acceptors批准提议,learner从acceptors获取被批准的提议并执行。

保证数据一致性的三大条件

  • 只有经proposers提出的提议才有可能被批准
  • 每次只批准一个提议
  • 只有提议被批准后learner才能获取这个提议

为了保证以上三大条件而设定的一些约束条件

  • 每次进行新操作时,每个acceptor只接受它得到的第一个决议 (类似于最初单个特殊结点那样,这次是为了保证能有少数服从多数的局面,即使最初的提议并不是最完备的,但总比卡住什么都不干好)
  • 一旦某个决议通过,之后的决议必须要与它保持一致

一个决议的阶段

  • 准备阶段
  • 批准阶段

参考文献