分布式技术-Lease(租约) 机制

一. 概述

在 GFS 中使用租约(Lease)机制来保持多个副本间变更顺序的一致性.接下来我们以 GFS 为例介绍Lease 租约,首先介绍 GFS 中的一些概念:

  • Client: 使用 GFS 进行存储服务
  • Master: 元数据服务器, 同时管理读写与 Chunk 的分配
  • Chunk: 文件的分片,固定的 64MB 大小,直接存储在 Chunk Server 上,每个 Chunk 有 3 个副本
  • Chunk Server: 用于存储 Chunk Server

二. GFS 中的 Lease 机制

Master 节点为 Chunk 的一个副本建立一个 Lease,这个副本叫做主 Chunk,主 Chunk 对 Chunk 的所有更改操作进行序列化,所有的副本都遵从这个序列进行修改操作.

1. GFS 中写入流程

下面以 GFS 写入操作为例介绍 Lease 机制:

  1. Client 向 Master 节点询问哪一个 Chunk Server持有指定 Chunk的 Lease以及其他副本的位置,如果没有就选择其中一个副本建一个 Lease
  2. Master 节点将主 Chunk 的标识符以及其他副本的位置返回给 Client,Client 缓存这些数据.
    • 只有主 Chunk 不可用或主 Chunk 表明其不持有 Lease,Client 才需要重新跟 Master 节点联系.
  3. Client 把数据推送到所有副本上.
    • Client可以以任意的顺序推送数据
    • Chunk Server 收到数据并保存在它的内部 LRU 缓存中
  4. 当所有的副本都确认接收到了数据,客户机发送写请求到主 Chunk 服务器
    • 这个写请求标识了早前所有推送到副本上的数据
    • 主 Chunk 为接收到的所有操作分配连续的序列号,并顺序执行这些操作,来更新自己(这个 Chunk)
  5. 主 Chunk 把写请传递到所有的二级副本上.每个二级副本依照主 Chunk 分配的序列号以相同的顺序执行这些操作.
  6. 所有的二级副本回复主 Chunk.
  7. 主 Chunk 服务器回复客户机.
    • 任何副本产生的任何错误都会返回给 Client
    • 客户端通过重复执行失败的操作来处理错误
  • 如果数据包括了多个 Chunk,GFS Client 代码会把它们分成多个写操作

Lease 机制

Lease 机制在分布式中一般描述如下:

  • Lease 是由授权者授予的在一段时间内的承诺
  • 授权这一旦发出 Lease,无论接收方是否收到,也无论后续接收方处于何种状态,只要 Lease 不过期,授权这一定遵守承诺,按承诺的时间和内容执行
  • 接收方在有效期内可以使用颁发者的承诺,只要 Lease 过期,接收方就放弃授权,继而重新申请 Lease
  • 可以通过版本号,时间周期或者到某个固定时间点认为 Lease 证书失效

总结

Lease 租约是一种带期限的契约, 再次期间拥有 Lease 的节点以所有人的期望执行一些预期内的操作.更直接的,Lease 租约就是一个带过期时间的全局锁,每个当要操作一个资源时就获取该资源的锁,以此来保证分布式系统中一致性,并且通过过期时间来保证没有死锁.

引用

xybaby: 带着问题学习分布式系统之数据分片
google: The Google File System
阿涵-_-: 分布式系统技术系列--租约(lease)

posted @ 2022-03-20 16:20  哪吒young  阅读(800)  评论(0编辑  收藏  举报