在阅读谷歌关于 chubby 的文章时,我并没有真正理解测序仪的目的
假设我们有 4 个实体:
- 胖乎乎的细胞
- 客户 1
- 客户 2
- 我们想要使用的服务以及我们将发送请求的位置(我们需要锁定)
据我了解,步骤是:
客户端 1发送
lock_request()
到Chubby 单元,Chubby 响应Sequencer
(假设SequenceNumber = 1
)客户端 1
modify_data()
使用 Sequencer (SequenceNumber = 1) 向服务发送请求- 如果 SequenceNumber 有效(=1),服务会询问Chubby 单元
- Chubby承认,设置
LeasePeriod
(锁定到期时间为(假设)60 秒)!在此期间没有人能够获得锁 - 确认后,Service将有关Client 1 (SequenceNumber = 1)的数据缓存(假设)40 秒
现在:如果客户端 2在我们设置的这 60 秒内尝试获取锁,它将被Chubby 单元拒绝
这意味着客户端 2不可能获取下一个 SequenceNumber = 2 的锁并将任何内容发送到服务
据我了解,SequenceNumber 的所有目的仅适用于当 2 个请求到达Service并且Service可以比较 2 个 SequenceNumber 并拒绝较低的情况,而无需询问Chubby 单元
但是,如果我们有缓存并且不可能在客户端 1持有这个锁的情况下获得客户端 2的锁,这种情况将如何发生?