初遇分佈式系統(一)

簡述

前期博文主要是針對一些分佈式系統資料的學習筆記.

《Distributed systems theory for the distributed systems engineer》中提到的《好玩又實在的分佈式系統理論》是一本精悍的書籍,主要針對分佈式系統中的基本問題,如時序與複製策略等方面.

首先需要說明關於分佈式中的一些認知誤區:

  • 網絡是可靠的
  • 延遲爲零
  • 帶寬無限
  • 網絡非常安全
  • 網絡拓撲不會改變
  • 只有一個管理者
  • 傳輸開銷爲零
  • 網絡同構(使用相同的配置和協議)

以上所述均爲人生錯覺

這本書中,作者提出了自己對於分佈式中所要解決的兩個終極問題

  1. 信息以光速傳輸(時序問題)
  2. 錯誤之間相互獨立(容錯問題)

分佈式系統主要爲了完成兩個任務
1. 存儲
2. 計算

關於爲了到達更好的計算能力,最直接的辦法就是上更好的機器(縱向擴展),但是在增加到一定程度後會面臨無法在單機到達可接受效率的問題.

同時,關於分佈式系統中的機器選擇.在假設均勻訪存模型(Uniform memory architecture)(處理器訪問所有內存存儲器的時間是一樣的),隨着集羣中機器數量的增加,高端機器和普通機器的性能牆逐漸接近.其原因主要在於機器間的數據複製開銷和計算的協調開銷.

目標

可擴展性

Everything starts with size - scalability

需要重點關注的三個方面(擴展性):

  • 規模擴展性:增加更多節點使得系統線性增長(不增長延遲)
  • 地理伸縮性:可以使用多個異地的數據中心以解決用戶訪問(不增長延遲)
  • 管理的伸縮性:增加更多節點不應該增加系統的管理開銷

都是需要在保證一定延遲和開銷下的擴展.

性能及延遲

性能通過系統完成一定工作所使用的時間和資源來衡量.依據所需,應該達到以下的一點或多點:

  1. 低延遲
  2. 高吞吐量
  3. 低資源使用率

這幾者之間需要進行權衡,如爲了達到更高的吞吐量,可以使用批處理的手段,但是在這種情況下,延遲就會相應地延長.

另外,延遲指的是操作發生至真正產生影響的時間.這一定義,主要解決問題:如果你發起一個計算所有數據的操作,但是同時有數據新增入系統,如果計算的速度和寫入速度一樣的話,….,延遲就是無限大.

可用性

如果一個用戶無法訪問系統,則表示該系統不可用.通常分佈式系統相較於單機系統有更高的可用性,因爲其具有更好的容錯性.

Availability=uptime/(uptime+downtime)

What prevents us from achieving good things

作者在這裏提出了兩個限制分佈式系統的物理因素.

  • 分佈式系統節點的數量
  • 節點間的距離

由此帶來的:

  • 降低可用性和提升了管理開銷
  • 隨着規模增大降低了性能(通信開銷)
  • 異地的數據中心增加了延遲,降低性能

關於分佈式系統的評價標準則是依據SLA(service level agreement)(服務的品質、水準、性能等方面所達成的雙方共同認可的協議或契約),另外一個沒有被經常提及的則是:理解度

Abstractions and models

抽象能夠將將現實中於問題無關的因素移除,幫助理解把握整個問題,模型則是能夠精確地描述分佈式系統中的關鍵部分.例如,本書後面將會提到的一些模型的例子:

  • 系統模型(異步/同步)
  • 失敗模型(拜占庭問題、分區問題)
  • 一致性模型(強一致、最終一致)

設計技巧:分區+冗餘

分區

數據分區後減少數據量能夠並行處理提高性能,保證了數據片間相互獨立

複製

複製得到的冗餘數據能夠提升系統容錯性,同時降低延遲,但是也帶來了數據的一致性問題.

知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 3.0 中國大陸許可協議進行許可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章