分佈式系統必須掌握的技術

分佈式有幾十年的歷史了,但從來沒有想今天這麼火過。從分佈式存儲到微服務架構,從區塊鏈到邊緣計算,無所不在,無人不知。下面我們就分佈式所涉及的基本內容列一個大綱,以供大家學習,瞭解。

分佈式系統必須掌握的技術

本大綱旨在向軟件工程師介紹現實中分佈式系統的基礎知識,以便讓大家獲得對分佈式系統中關鍵術語的直觀理解,並探討生產中問題。

分佈式系統的定義

什麼是分佈式系統?Lamport在1987給出了分佈式的定義

A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.

一個分佈式系統是那種發生問題後,你都不知道發生在哪裡,最終導致你的計算機變得無法訪問和使用。

上面其實是對分佈式的一個簡單描述,可以說不是嚴格的定義。分佈式是將業務分散在多個處理單元(節點)上,通過單元(單元)間的協作完成一個共同的任務。

分佈式的節點

節點是分佈式的基本單元,英文名為Node。在分佈式系統中節點也是要認真考慮的問題,包含性能和容錯等內容。

  • 硬件設備
  • 雙網卡冗餘,單網卡的故障會導致節點的不可用,因此需要考慮雙網卡冗餘
  • CPU綁定,CPU的緩存對提升性能有很大的幫助,綁定CPU避免進程跨CPU切換導致緩存失效。
  • RDMA,高性能的設備對性能的提升非常明顯
  • 操作系統
  • 內存拷貝對性能的影響
  • 零拷貝技術
  • 緩存與文件系統
  • 編程語言與編譯器
  • 程序寫法對性能的影響
  • 編譯器優化

分佈式的網絡

網絡是分佈式的基石,分佈式系統只有通過網絡才能將多個節點連接成為一個整體。一般分佈式系統都是基於TCP協議進行的,另外,在TCP的基礎上回封裝自己的私有協議。

分佈式系統必須掌握的技術

  • 網絡是節點溝通的通道
  • 人類交流通過講話
  • 計算機交互通過協議(TCP、UDP、RPC)
  • 計算機的協議其實類似人類的語言
  • 消息隨時間廣播
  • 這是分佈式系統的緩慢部分
  • 我們稱這為“延遲latency"
  • 網絡會存在各種異常
  • 重複Duplicate
  • 延誤Delay
  • 丟失Drop
  • 重新排序Reorder

分佈式協議

由於分佈式系統的複雜性和網絡的不可靠性,因此科學家發明了很多算法來解決這些問題。分佈式領域核心的算法有3類,分佈式解決分佈式一致性的算法,進行負載均衡選路的算法和信息高效分發的協議。

分佈式系統必須掌握的技術

  • 分佈式一致性協議
  • 二階段提交
  • 三階段提交
  • Paxos協議
  • Raft協議
  • ZAB協議
  • 選路算法
  • DHT一致性哈希算法
  • 數據分發算法
  • Gossip

分佈式應用

分佈式系統在實際生產中涉及的內容很多,但從應用方面就包括分佈式計算和分佈式存儲。而分佈式存儲又分為IaaS的存儲、KV存儲、表格存儲和緩存等等,內容之多,數不勝數。

分佈式系統必須掌握的技術

分佈式任務處理服務:負責具體的業務邏輯處理

分佈式節點註冊和查詢:負責管理所有分佈式節點的命名和物理信息的註冊與查詢,是節點之間聯繫的橋樑

分佈式DB:分佈式結構化數據存取

分佈式Cache:分佈式緩存數據(非持久化)存取

分佈式文件:分佈式文件存取

網絡通信:節點之間的網絡數據通信

監控管理:蒐集、監控和診斷所有節點運行狀態

分佈式編程語言:用於分佈式環境下的專有編程語言,比如Elang、Scala

分佈式算法:為解決分佈式環境下一些特有問題的算法,比如解決一致性問題的Paxos算法

開源項目:Redis,ZooKeeper,Dubbo,Etcd,Ceph,K8S

上述內容都是進行分佈式開發和設計必須的內容,希望對大家有所幫助。

相關推薦

推薦中...