分布式系统Lease机制
最近在學(xué)習(xí)分布式,將學(xué)習(xí)筆記,總結(jié)精華分享出來(lái),歡迎大家一起學(xué)習(xí)一起討論!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
前言:Lease 機(jī)制最重要的應(yīng)用:判定節(jié)點(diǎn)狀態(tài)。
基于 lease 的分布式 cache 系統(tǒng)
一、
1、原理:中心服務(wù)器向各節(jié)點(diǎn)發(fā)送數(shù)據(jù)的同時(shí)頒發(fā)一個(gè)lease,每個(gè)lease具有一個(gè)有效期(確保中心服務(wù)器與各節(jié)點(diǎn)的時(shí)鐘時(shí)同步的),在lease的有效期內(nèi),中心服務(wù)器保證不會(huì)修改數(shù)據(jù)的值,節(jié)點(diǎn)收到數(shù)據(jù)和lease后,將數(shù)據(jù)加入本地cache,一旦對(duì)應(yīng)的lease過(guò)期,將刪除本地的cache數(shù)據(jù)。
2、基本流程:
客戶端節(jié)點(diǎn)讀取元數(shù)據(jù):
①判斷元數(shù)據(jù)是否處于本地的cache中且lease處于有效期內(nèi),是就直接返回元數(shù)據(jù)信息
②不滿足條件1的話,向中心服務(wù)器節(jié)點(diǎn)請(qǐng)求讀取元數(shù)據(jù)信息。
③服務(wù)器收到讀請(qǐng)求后返回?cái)?shù)據(jù)同時(shí)頒發(fā)一個(gè)對(duì)應(yīng)的lease
④客戶端收到服務(wù)器返回的數(shù)據(jù)記錄到本地cache,如果失敗或超時(shí),讀取失敗退出流程。
客戶端節(jié)點(diǎn)修改元數(shù)據(jù)流程
①節(jié)點(diǎn)向服務(wù)器發(fā)起請(qǐng)求修改元數(shù)據(jù)
②服務(wù)器收到請(qǐng)求,阻塞所有新的讀請(qǐng)求,接收請(qǐng)求,但是不返回?cái)?shù)據(jù)
③服務(wù)器等待所有與該元數(shù)據(jù)相關(guān)的lease超時(shí)
④服務(wù)器修改元數(shù)據(jù)并向客戶端節(jié)點(diǎn)返回修改成功
二、lease 機(jī)制可以容錯(cuò)的關(guān)鍵是:服務(wù)器一旦發(fā)出數(shù)據(jù)及 lease,無(wú)論客戶端是否收到,也無(wú)論后續(xù)客戶端是否宕機(jī),也無(wú)論后續(xù)網(wǎng)絡(luò)是否正常,服務(wù)器只要等待 lease 超時(shí),就可以保證對(duì)應(yīng)的客戶端節(jié)點(diǎn)不會(huì)再繼續(xù) cache 數(shù)據(jù),從而可以放心的修改數(shù)據(jù)而不會(huì)破壞 cache 的一致性。
三、性能及可用性的優(yōu)化:
1、服務(wù)端在修改元數(shù)據(jù)時(shí)會(huì)阻塞所有的讀請(qǐng)求,造成沒(méi)有讀服務(wù)。這種情況可以優(yōu)化為繼續(xù)返回元數(shù)據(jù),但是不頒發(fā)lease,也就是說(shuō)用戶可以讀到元數(shù)據(jù)但是不能緩存元數(shù)據(jù)。
2、服務(wù)器在修改元數(shù)據(jù)時(shí)要等待所有持有l(wèi)ease的節(jié)點(diǎn)過(guò)期才進(jìn)行修改,造成延時(shí)較大。對(duì)于這種情況,可以在元數(shù)據(jù)修改之前服務(wù)端主動(dòng)通知各個(gè)節(jié)點(diǎn)放棄lease并清除cache中的數(shù)據(jù),如果接收到客戶端確認(rèn)放棄則進(jìn)行修改,否則等待過(guò)期進(jìn)行修改。
四、lease機(jī)制與多副本機(jī)制的區(qū)別:對(duì)于 cache 的數(shù)據(jù),可以隨時(shí)刪除丟棄,并命中cache 的后果僅僅是需要訪問(wèn)數(shù)據(jù)源讀取數(shù)據(jù);然而副本機(jī)制卻不一樣,副本是不能隨意丟棄的,每失去一個(gè)副本,服務(wù)質(zhì)量都在下降,一旦副本數(shù)下降到一定程度,則往往服務(wù)將不再可用。
lease 機(jī)制的分析
1、lease的定義:Lease是由頒發(fā)者授予的在某一有效期內(nèi)的承諾。
注:這種承諾的內(nèi)容非常寬泛,可以是數(shù)據(jù)的正確性,也可以是某種權(quán)限,也可以是某種身份。如在 primary-secondary架構(gòu)中,給節(jié)點(diǎn)頒發(fā)lease,只有持有 lease 的節(jié)點(diǎn)才具有 primary 身份。
2、lease機(jī)制有很高的容錯(cuò)能力:
①lease機(jī)制的有效期可以較好的容錯(cuò)網(wǎng)絡(luò)異常。
頒發(fā)者可以不斷重復(fù)的向接收者發(fā)放相同的lease,一旦lease被接受,那么在有效期內(nèi)就不依賴于網(wǎng)絡(luò)通信(即使網(wǎng)絡(luò)完全中斷也不會(huì)有影響)。
②Lease機(jī)制能較好的容錯(cuò)節(jié)點(diǎn)宕機(jī)。
如果頒發(fā)者宕機(jī),不會(huì)影響lease的正確性,頒發(fā)者恢復(fù)后可以繼續(xù)遵守lease的承諾,如果頒發(fā)者不能恢復(fù),那么只需等待lease超時(shí)即可,并不會(huì)破壞lease機(jī)制。
③lease機(jī)制不依賴于存儲(chǔ),頒發(fā)者可以持久化頒發(fā)過(guò)的lease信息,使得宕機(jī)恢復(fù)后的lease繼續(xù)生效
3、lease機(jī)制依賴于有效期,所以要求頒發(fā)者和接收者的始終必須要同步。對(duì)于這種時(shí)鐘不同步,實(shí)踐中的通常做法是將頒發(fā)者的有效期設(shè)置得比接收者的略大,只需大過(guò)時(shí)鐘誤差就可以避免對(duì)lease的有效性的影響。
基于 lease 機(jī)制確定節(jié)點(diǎn)狀態(tài)
背景:在primary-secondary 架構(gòu)的系統(tǒng)中,有三個(gè)節(jié)點(diǎn) A、B、C 互為副本,假設(shè)最開(kāi)始時(shí)節(jié)點(diǎn) A為 primary,B、C 為 secondary。節(jié)點(diǎn) Q 如何判斷節(jié)點(diǎn) A、B、C 的狀態(tài)是否正常?
1、節(jié)點(diǎn) A、B、C 周期性的發(fā)送 heart beat 報(bào)告自身狀態(tài),節(jié)點(diǎn) Q 收到 heart beat后發(fā)送一個(gè)lease,表示節(jié)點(diǎn) Q 確認(rèn)了節(jié)點(diǎn) A、B、C 的狀態(tài),并允許節(jié)點(diǎn)在 lease 有效期內(nèi)正常工作。
2、節(jié)點(diǎn)Q給primary節(jié)點(diǎn)A一個(gè)特殊的 lease,表示A節(jié)點(diǎn)可以作為primary工作。一旦節(jié)點(diǎn)Q希望切換新的primary B,則只需等前一個(gè) primary A的lease過(guò)期,就可以安全的頒發(fā)新的lease給新的primary B節(jié)點(diǎn),并不會(huì)出現(xiàn)“雙主”問(wèn)題。
注:一個(gè)中心節(jié)點(diǎn)發(fā)送lease風(fēng)險(xiǎn)很大,實(shí)際的系統(tǒng)中使用多個(gè)中心節(jié)點(diǎn)互為副本,成為一個(gè)小的集群對(duì)外提供頒發(fā) lease 的功能。zookeeper就是基于這樣的設(shè)計(jì)。
lease 的有效期時(shí)間選擇
使用 lease 確定節(jié)點(diǎn)狀態(tài)時(shí),若 lease 時(shí)間過(guò)短,有可能造成網(wǎng)絡(luò)瞬斷時(shí)節(jié)點(diǎn)收不到lease從而引起服務(wù)不穩(wěn)定,若lease時(shí)間過(guò)長(zhǎng),則一旦某節(jié)點(diǎn)宕機(jī)異常,需要較大的時(shí)間等待lease過(guò)期才能發(fā)現(xiàn)節(jié)點(diǎn)異常。工程中,常選擇的 lease 時(shí)長(zhǎng)是 10 秒級(jí)別,這是一個(gè)經(jīng)過(guò)驗(yàn)證的經(jīng)驗(yàn)值,實(shí)踐中可以作為參考并綜合選擇合適的時(shí)長(zhǎng)。
工程實(shí)例
Zookeeper的primary節(jié)點(diǎn)也會(huì)向client頒發(fā)lease,lease 的時(shí)間正是 zookeeper 中的 session 時(shí)間。在Zookeeper中,臨時(shí)節(jié)點(diǎn)是與session的生命期綁定的,當(dāng)一個(gè) client 的 session 超時(shí),那么這個(gè) client 創(chuàng)建的臨時(shí)節(jié)點(diǎn)會(huì)被 zookeeper 自動(dòng)刪除。通過(guò)監(jiān)控臨時(shí)節(jié)點(diǎn)的狀態(tài),也可以很容易的實(shí)現(xiàn)對(duì)節(jié)點(diǎn)狀態(tài)的監(jiān)控。
?
參考資料:《分布式系統(tǒng)原理介紹》作者:劉杰
如有錯(cuò)誤歡迎指正!
總結(jié)
以上是生活随笔為你收集整理的分布式系统Lease机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分布式系统基本副本协议
- 下一篇: 分布式系统Quorum机制