(2022最新版)分布式面試必會!一定要看!
? ? 分布式主要是為了提供可擴展性以及高可用性,業(yè)務中使用分布式的場景主要有分布式數(shù)據(jù)庫以及分布式計算。本文是我針對分布式面試做了一些簡單的整理,希望可以幫助到你們。
1 概念
?1.1 模型?
? ?節(jié)點?
在具體的工程項目中,一個節(jié)點往往是一個操作系統(tǒng)上的進程。在本文的模型中,認 為節(jié)點是一個完整的、不可分的整體,如果某個程序進程實際上由若干相對獨立部分 構成,則在模型中可以將一個進程劃分為多個節(jié)點。?
異常?
1. 機器宕機:機器宕機是最常見的異常之一。在大型集群中每日宕機發(fā)生的概 率為千分之一左右,在實踐中,一臺宕機的機器恢復的時間通常認為是24 小 時,一般需要人工介入重啟機器。
2. 網(wǎng)絡異常:消息丟失,兩片節(jié)點之間彼此完全無法通信,即出現(xiàn)了“網(wǎng)絡分 化”;消息亂序,有一定的概率不是按照發(fā)送時的順序依次到達目的節(jié)點,考 慮使用序列號等機制處理網(wǎng)絡消息的亂序問題,使得無效的、過期的網(wǎng)絡消息 不影響系統(tǒng)的正確性;數(shù)據(jù)錯誤;不可靠的TCP,TCP 協(xié)議為應用層提供了可 靠的、面向連接的傳輸服務,但在分布式系統(tǒng)的協(xié)議設計中不能認為所有網(wǎng)絡 通信都基于TCP 協(xié)議則通信就是可靠的。TCP協(xié)議只能保證同一個TCP 鏈接內 的網(wǎng)絡消息不亂序,TCP 鏈接之間的網(wǎng)絡消息順序則無法保證。?
3. 分布式三態(tài):如果某個節(jié)點向另一個節(jié)點發(fā)起RPC(Remote procedure call) 調用,即某個節(jié)點A 向另一個節(jié)點B 發(fā)送一個消息,節(jié)點B 根據(jù)收到的消息內 容完成某些操作,并將操作的結果通過另一個消息返回給節(jié)點A,那么這個RPC 執(zhí)行的結果有三種狀態(tài):“成功”、“失敗”、“超時(未知)”,稱之為分 布式系統(tǒng)的三態(tài)。
4. 存儲數(shù)據(jù)丟失:對于有狀態(tài)節(jié)點來說,數(shù)據(jù)丟失意味著狀態(tài)丟失,通常只能從 其他節(jié)點讀取、恢復存儲的狀態(tài)。
5. 異常處理原則:被大量工程實踐所檢驗過的異常處理黃金原則是:任何在設 計階段考慮到的異常情況一定會在系統(tǒng)實際運行中發(fā)生,但在系統(tǒng)實際運行遇 到的異常卻很有可能在設計時未能考慮,所以,除非需求指標允許,在系統(tǒng)設 計時不能放過任何異常情況。
1.2 副本
?副本(replica/copy)指在分布式系統(tǒng)中為數(shù)據(jù)或服務提供的冗余。對于數(shù)據(jù)副本指 在不同的節(jié)點上持久化同一份數(shù)據(jù),當出現(xiàn)某一個節(jié)點的存儲的數(shù)據(jù)丟失時,可以從 副本上讀到數(shù)據(jù)。數(shù)據(jù)副本是分布式系統(tǒng)解決數(shù)據(jù)丟失異常的唯一手段。另一類副本 是服務副本,指數(shù)個節(jié)點提供某種相同的服務,這種服務一般并不依賴于節(jié)點的本地 存儲,其所需數(shù)據(jù)一般來自其他節(jié)點。
副本協(xié)議是貫穿整個分布式系統(tǒng)的理論核心。
副本一致性?
分布式系統(tǒng)通過副本控制協(xié)議,使得從系統(tǒng)外部讀取系統(tǒng)內部各個副本的數(shù)據(jù)在一定 的約束條件下相同,稱之為副本一致性(consistency)。副本一致性是針對分布式系統(tǒng) 而言的,不是針對某一個副本而言。?
1. 強一致性(strong consistency):任何時刻任何用戶或節(jié)點都可以讀到最近 一次成功更新的副本數(shù)據(jù)。強一致性是程度最高的一致性要求,也是實踐中最 難以實現(xiàn)的一致性。?
2. 單調一致性(monotonic consistency):任何時刻,任何用戶一旦讀到某個 數(shù)據(jù)在某次更新后的值,這個用戶不會再讀到比這個值更舊的值。單調一致性 是弱于強一致性卻非常實用的一種一致性級別。因為通常來說,用戶只關心從 己方視角觀察到的一致性,而不會關注其他用戶的一致性情況。?
3. 會話一致性(session consistency):任何用戶在某一次會話內一旦讀到某 個數(shù)據(jù)在某次更新后的值,這個用戶在這次會話過程中不會再讀到比這個值更 舊的值。會話一致性通過引入會話的概念,在單調一致性的基礎上進一步放松 約束,會話一致性只保證單個用戶單次會話內數(shù)據(jù)的單調修改,對于不同用戶 間的一致性和同一用戶不同會話間的一致性沒有保障。實踐中有許多機制正好 對應會話的概念,例如php 中的session 概念。?
4. 最終一致性(eventual consistency):最終一致性要求一旦更新成功,各個 副本上的數(shù)據(jù)最終將達 到完全一致的狀態(tài),但達到完全一致狀態(tài)所需要的時間 不能保障。對于最終一致性系統(tǒng)而言,一個用戶只要始終讀取某一個副本的數(shù) 據(jù),則可以實現(xiàn)類似單調一致性的效果,但一旦用戶更換讀取的副本,則無法 保障任何一致性。
5. 弱一致性(week consistency):一旦某個更新成功,用戶無法在一個確定 時間內讀到這次更新的值,且即使在某個副本上讀到了新的值,也不能保證在 其他副本上可以讀到新的值。弱一致性系統(tǒng)一般很難在實際中使用,使用弱一 致性系統(tǒng)需要應用方做更多的工作從而使得系統(tǒng)可用。
1.3 衡量分布式系統(tǒng)的指標
?1. 性能:系統(tǒng)的吞吐能力,指系統(tǒng)在某一時間可以處理的數(shù)據(jù)總量,通常可以 用系統(tǒng)每秒處理的總的數(shù)據(jù)量來衡量;系統(tǒng)的響應延遲,指系統(tǒng)完成某一功能 需要使用的時間;系統(tǒng)的并發(fā)能力,指系統(tǒng)可以同時完成某一功能的能力,通 常也用QPS(query per second)來衡量。上述三個性能指標往往會相互制約, 追求高吞吐的系統(tǒng),往往很難做到低延遲;系統(tǒng)平均響應時間較長時,也很難 提高QPS。
2. 可用性:系統(tǒng)的可用性(availability)指系統(tǒng)在面對各種異常時可以正確提供 服務的能力。系統(tǒng)的可用性可以用系統(tǒng)停服務的時間與正常服務的時間的比例 來衡量,也可以用某功能的失敗次數(shù)與成功次數(shù)的比例來衡量。可用性是分布 式的重要指標,衡量了系統(tǒng)的魯棒性,是系統(tǒng)容錯能力的體現(xiàn)。
3. 可擴展性:系統(tǒng)的可擴展性(scalability)指分布式系統(tǒng)通過擴展集群機器規(guī)模 提高系統(tǒng)性能(吞吐、延遲、并發(fā))、存儲容量、計算能力的特性。好的分布 式系統(tǒng)總在追求“線性擴展性”,也就是使得系統(tǒng)的某一指標可以隨著集群中 的機器數(shù)量線性增長。
4. 一致性:分布式系統(tǒng)為了提高可用性,總是不可避免的使用副本的機制,從 而引發(fā)副本一致性的問題。越是強的一致的性模型,對于用戶使用來說使用起 來越簡單。
本文就先寫到這里,面試中常問的一些題目我都有整理的,后面會持續(xù)更新,感謝支持
↓↓↓↓↓↓↓↓
-------【完整版】-------
