GeekBand 系統設計與實踐 Thrid Week
搭建大規模可擴展的系統
分布式系統
數據庫系統
經典結構
設計原則:CAP 理論
一致性介紹
ACID vs BASE
Sharding 分片
NoSQL 數據庫
Cassandra
實時系統:Kafka, Storm
分布式系統設計模式
1.系統失敗是很平常的事情:每年有1-5%的硬盤會報廢,服務器每年會平均宕機兩次,報廢率在2-4%。
2.將 多個 復雜系統切分為多個服務: 且服務之間依賴盡可能的少,這樣有助于測試,部署和 團 隊獨 開發。例 : 個google的搜索會依賴100多個服務。ike:需要 套機制來確保服務的fault- tolerant,不能讓 個服務的成敗影響全局。
3.需要有Protocol Description Language: 如protocol buffers。ike:這樣能降低通信 的代碼量。
4.有能 在開發之前,根據系統的設計來預測性能:在最下 有 些重要的數字。
5.在設計系統 ,不要想做的很全 , 是需要抓住重點。
6.為了增量做設計,但不為 限做設計: 如:要為5-50倍的增量做設計,但超過1000倍了,就需要重 寫和重新設計了。
7.使 備份請求來降低延遲: 如 個處理需要涉及1000臺機器,通過備份請求這個機制來避免這個處 理被 臺慢機器延誤。ike:這個機制 常適合MapReduce。
8.使 范圍來分布數據, 不是Hash:因為這樣在語義上 較簡單,并且容易控制。ike:在 多數情
況下語義 性能更重要,不要為了20%的情況hardcode。 9.靈活的系統,根據需求來伸縮:并且當需求上來的時候,關閉部分特性, 如:關閉拼寫檢查。 10. 個接 ,多個實現。
11.加足夠的觀察和調式鉤 (hook)。
12.1000臺服務器只需單 Master:通過Master節點來統 指揮全部的 動,但客戶端和Master節點的 交互很少,以免Master節點Crash,優點是,在語義上 常清晰,但伸縮性不是 常強, 般最多只 能 持上千個節點。
13.在 臺機器上運 多個單位的服務:當 臺機器宕機時,能縮短相應的恢復時間,并且 持細粒度 的負載均衡, 如在BigTable中, 個Tablet服務器會運 多個Tablet。
大數據系統
大數據基礎 hadoop
hadoop Idea from Google 三輛馬車: MapReduce, Google File System , Big Table
MapReduce, BigTable, GFS
Spark 入門
海量數據處理技巧
Hash , Bit-Map, Bloom Filter, Heap, 雙層桶劃分, 數據庫索引, 倒排索引, B+ tree, Trie tree, MapReduce
Webtrack
我們需要在網站上跟著用戶的活動信息。例如當跟蹤搜索時,我們可能需要知道哪些用戶進行了搜索,搜索時發生的時間,他們搜索了什么,顯示的結果和各種排名信息.
記錄用戶的搜索記錄,存儲“動作+時間戳”
查詢的需求是一個異步的需求,存儲的動作可以通過異步來完成,如消息隊列。
考慮到搜索頁面的實時變化,因此需要建立本地有效的short URL解析方法
緩存最新的一頁的搜索記錄
建立有效檢索結構
提供多種查詢接口。
Design Automated Air Traffic Control System
Please design an automated Air Traffic Control system where all the planes talk to a master ATC server which gives them commands that tell them where to fly and when to take off or land.
- 航空交通控制系統 是一個 CS 模型的系統
- 飛機與控制系統建立連接,發送請求,管控系統根據請求返回相應的響應,給飛機相應的命令。
- 為保證航空控制系統的高可用性,簡單的設計可以設計一層代理做負載均衡,代理到后端的多臺服務的機器。