分散式系統學習思路

東邊的小山發表於2017-11-15

分散式系統一般分為分散式K/V系統、分散式檔案系統和分散式資料庫等幾個大類,在學習這幾類系統的時候,需要掌握的知識或技能應該包括計算機基礎知識、分散式演算法和協議相關論文、分散式系統設計範型相關論文、開源的分散式系統案例以及造相關的輪子。

基礎知識

根據博主目前經驗來看,學習分散式系統首先要掌握以下基礎知識:

  • OS相關
  • 體系結構相關
  • Unix系統程式設計
  • Unix網路程式設計
  • 併發程式設計
  • 常用資料結構和演算法

論文

分散式系統的論文主要分為兩大方面,一方面是演算法或者協議相關的論文,另一方面是系統設計相關的。

演算法或者協議相關

  • Byzantine General

  • paxos

paxos made simple 和 paxos made live

  • raft
  • cap base
  • 2pc 3pc
  • leases
  • acid
  • time and ordering

Time Clocks and the ordering of Events in a Distributed System

Virtual Time and Global States of Distributed System

Distributed Snapshots: Determining Global States of a Distributed System

  • mvcc
  • gossip
  • consensus
  • load balancing algorithms

系統設計範型相關

  • google file system
  • bigtable
  • mapreduce
  • chubby
  • spanner
  • dynamo
  • megastore
  • dremel
  • pregel
  • percolator
  • Sinfonia: A New Paradigm for Building Scalable Distributed Systems
  • google f1
  • Windows Azure Storage: A high available cloud storage service with strong consistency
  • facebook haystack

開源系統範例

主要分為分散式K/V,分散式檔案系統和分散式資料庫三個方面。

分散式K/V系統

  • redis cluster
  • tair

分散式檔案系統

  • hdfs
  • ceph
  • swift
  • lustre
  • taobao filesystem

分散式資料庫

  • clustrix
  • VoltDB
  • MemSQL

造輪子

可以自己造分散式K/V系統、分散式檔案系統、分散式資料庫系統的輪子,簡單的,可以從分散式K/V系統開始。

整個思路

  • 對於基礎知識部分,有盲點就補
  • 對於論文模組,常見的分散式演算法、協議論文,經典的系統範型相關論文需要精讀
  • 對於開源系統模組,在學習完論文之後,每個部分精讀一個系統的程式碼,其他的系統瞭解實現原理
  • 對於造輪子,可以儘早開始,先按照自己思路來造,後面通過讀論文、讀開源系統來發現自己系統的缺陷,不斷完善即可 
    最後,本文只是一個思路,很多東西還沒有細化,需要不斷完善。

相關文章