每日八股:分布式
介紹一下cap理論
CAP原則又稱CAP理論,指的是在一個分布式系統(tǒng)中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分區(qū)容錯性),三者不可得兼。
一致性:在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是同樣的值(等同于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)。
可用性:在集群中一部分節(jié)點故障后,集群整體還能響應客戶端的讀寫請求(對數(shù)據(jù)更新具備高可用性)。
分區(qū)容錯性:以實際效果而言,分區(qū)相當于對通信的時限要求,系統(tǒng)如果不能在時限內(nèi)達成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況,必須就當前操作在C和A之間做出選擇。
分布式鎖
分布式鎖是用于分布式環(huán)境下并發(fā)控制的一種機制,用于控制某個資源在同一時刻只能被一個應用所使用。
RPC的概念是什么?
RPC即遠程過程調(diào)用,允許程序調(diào)用運行在另一臺計算機上的程序中的過程或函數(shù),就像調(diào)用本地程序中的過程和函數(shù)一樣,而不用了解底層網(wǎng)絡細節(jié)。
一個典型的RPC調(diào)用過程通常包含以下幾個步驟:
1.客戶端調(diào)用:客戶端程序調(diào)用本地的一個偽函數(shù)(也成為存根,Stub),并傳入所需的參數(shù)。這個偽函數(shù)看起來跟普通的本地函數(shù)一樣,但實際上它會負責處理遠程調(diào)用的相關(guān)事宜。
2.請求發(fā)送:客戶端存根將調(diào)用信息(包括函數(shù)名、參數(shù)等)進行序列化,通過網(wǎng)絡將請求發(fā)送給服務器。
3.服務器接收與處理:服務器端收到請求后,將請求信息進行反序列化,然后找到對應的函數(shù)并執(zhí)行。
4.結(jié)果返回:服務器端將函數(shù)的執(zhí)行結(jié)果進行序列化,通過網(wǎng)絡發(fā)送回客戶端。
5.客戶端接受結(jié)果:客戶端接收服務器端發(fā)來的結(jié)果后,將其進行反序列化,并將結(jié)果返回給調(diào)用者。
常見的限流算法你知道哪些?
1.固定窗口限流算法:就是對一段固定時間窗口內(nèi)的請求進行計數(shù),如果請求數(shù)超過了閾值,則舍棄該請求,如果沒有達到閾值,則接受該請求,且計數(shù)加1。當時間窗口結(jié)束時,重置計數(shù)器為0。固定窗口算法限流的優(yōu)點是實現(xiàn)簡單,但可能會出現(xiàn)流量吐刺的問題。
2.滑動窗口限流算法:改進固定窗口缺陷的方法是采用滑動窗口限流算法,滑動窗口就是將限流窗口內(nèi)部切分為一些更小的時間片,然后在時間軸上進行滑動,每次滑動,滑過一個小時間片,就形成了一個新的限流窗口,即滑動窗口。然后在這個滑動窗口內(nèi)執(zhí)行固定窗口算法即可。
滑動窗口可以避免固定窗口出現(xiàn)的超過閾值兩倍請求的問題,因為一個短時間內(nèi)出現(xiàn)的所有請求必然在一個滑動窗口內(nèi),所以一定會被滑動窗口限流。
3.漏桶限流算法:模擬水流過一個有漏洞的桶進而限流的思路。從系統(tǒng)的角度來看,我們不知道什么時候會有請求來,也不知道請求會以多大的速率來,這就給系統(tǒng)的安全性埋下了隱患,但是如果加了一層漏斗算法限流后,就能夠保證請求以恒定的速率流出。在系統(tǒng)看來,請求永遠是以平滑的傳輸速率過來,從而起到了保護系統(tǒng)的作用。
缺點:
1.即使系統(tǒng)資源很空閑,當多個請求同時到達時,漏桶也是慢慢的一個一個的去處理請求,會浪費計算資源。
2.不能解決流量突發(fā)問題。
4.令牌桶限流算法:令牌桶是另一種桶限流算法,它模擬一個特定大小的桶,然后向桶中以特定的速度放入令牌,請求到達后,必須從桶中取出一個令牌后才能繼續(xù)處理。如果桶中沒用令牌了,那么當前請求就會被限流。如果桶中的令牌放滿了,令牌桶也會溢出。放令牌的動作是持續(xù)不斷進行的,如果桶中的令牌數(shù)達到上限,則丟棄令牌,因此桶中可能一直持有大量可用令牌,此時請求進來可以直接拿到令牌執(zhí)行。
#分布式##八股##Java選手#