初遇分散式系統(一)
簡述
前期博文主要是針對一些分散式系統資料的學習筆記.
首先需要說明關於分散式中的一些認知誤區:
- 網路是可靠的
- 延遲為零
- 頻寬無限
- 網路非常安全
- 網路拓撲不會改變
- 只有一個管理者
- 傳輸開銷為零
- 網路同構(使用相同的配置和協議)
以上所述均為人生錯覺
這本書中,作者提出了自己對於分散式中所要解決的兩個終極問題
- 資訊以光速傳輸(時序問題)
- 錯誤之間相互獨立(容錯問題)
分散式系統主要為了完成兩個任務
1. 儲存
2. 計算
關於為了到達更好的計算能力,最直接的辦法就是上更好的機器(縱向擴充套件),但是在增加到一定程度後會面臨無法在單機到達可接受效率的問題.
同時,關於分散式系統中的機器選擇.在假設均勻訪存模型(Uniform memory architecture)(處理器訪問所有記憶體儲存器的時間是一樣的),隨著叢集中機器數量的增加,高階機器和普通機器的效能牆逐漸接近.其原因主要在於機器間的資料複製開銷和計算的協調開銷.
目標
可擴充套件性
Everything starts with size - scalability
需要重點關注的三個方面(擴充套件性):
- 規模擴充套件性:增加更多節點使得系統線性增長(不增長延遲)
- 地理伸縮性:可以使用多個異地的資料中心以解決使用者訪問(不增長延遲)
- 管理的伸縮性:增加更多節點不應該增加系統的管理開銷
都是需要在保證一定延遲和開銷下的擴充套件.
效能及延遲
效能通過系統完成一定工作所使用的時間和資源來衡量.依據所需,應該達到以下的一點或多點:
- 低延遲
- 高吞吐量
- 低資源使用率
這幾者之間需要進行權衡,如為了達到更高的吞吐量,可以使用批處理的手段,但是在這種情況下,延遲就會相應地延長.
另外,延遲指的是操作發生至真正產生影響的時間.這一定義,主要解決問題:如果你發起一個計算所有資料的操作,但是同時有資料新增入系統,如果計算的速度和寫入速度一樣的話,….,延遲就是無限大.
可用性
如果一個使用者無法訪問系統,則表示該系統不可用.通常分散式系統相較於單機系統有更高的可用性,因為其具有更好的容錯性.
What prevents us from achieving good things
作者在這裡提出了兩個限制分散式系統的物理因素.
- 分散式系統節點的數量
- 節點間的距離
由此帶來的:
- 降低可用性和提升了管理開銷
- 隨著規模增大降低了效能(通訊開銷)
- 異地的資料中心增加了延遲,降低效能
關於分散式系統的評價標準則是依據SLA(service level agreement)(服務的品質、水準、效能等方面所達成的雙方共同認可的協議或契約),另外一個沒有被經常提及的則是:理解度
Abstractions and models
抽象能夠將將現實中於問題無關的因素移除,幫助理解把握整個問題,模型則是能夠精確地描述分散式系統中的關鍵部分.例如,本書後面將會提到的一些模型的例子:
- 系統模型(非同步/同步)
- 失敗模型(拜占庭問題、分割槽問題)
- 一致性模型(強一致、最終一致)
設計技巧:分割槽+冗餘
分割槽
資料分割槽後減少資料量能夠並行處理提高效能,保證了資料片間相互獨立
複製
複製得到的冗餘資料能夠提升系統容錯性,同時降低延遲,但是也帶來了資料的一致性問題.