分布式數據處理MapReduce
MapReduce是Google提出的一個軟件架構,是一種處理海量數據的并行編程模式条舔,用于大規(guī)模數據集(通常大于1TB)的并行計算。MapReduce有函數式和矢量編程語言的共性乏矾,是的這種編程模式特別適合于非結構化和結構化的海量數據的搜索孟抗、挖掘、分析和機器智能學習钻心。
MapReduce把對數據集的大規(guī)模操作凄硼,分發(fā)給一個主節(jié)點管理下的各分節(jié)點共同完成,通過這種方式實現任務的可靠執(zhí)行與容錯機制捷沸。在每個時間周期摊沉,主節(jié)點都會對分節(jié)點的工作狀態(tài)進行標記。一旦分節(jié)點狀態(tài)標記為死亡狀態(tài)痒给,則這個節(jié)點的所以任務都將分配給其他分節(jié)點重新執(zhí)行说墨。
分布式鎖服務Chubby
Chubby是Google設計的提供粗粒度鎖服務的一個文件系統(tǒng),它基于松耦合分布式系統(tǒng)苍柏,解決了分布的一致性問題尼斧。
Paxos算法
Paxos算法是Leslie Lamport最先提出的一種基于消息傳遞的一致性算法,用于解決分布式系統(tǒng)中的一致性問題试吁。Paxos算法中節(jié)點被分成了三種類型:proposers棺棵、acceptors、learners潘悼。其中proposers提出決議(value律秃,實際上就是告訴系統(tǒng)接下來該執(zhí)行哪個指令),acceptors批準決議治唤,learners獲取并使用已經通過的決議棒动。
滿足三個條件可以保證數據的一致性:1.決議只有在被proposers提出后才能批準;2.每次只批準一個決議宾添;3.只有決議確定被批準后learners才能獲取這個決議船惨。
在這些約束條件的基礎上,可以將一個決議的通過分成以下兩個階段缕陕。1.準備階段:proposers選擇一個提案并將它的編號設置為n粱锐,然后將它發(fā)送給acceptors中的一個“多數派”,acceptors收到后扛邑,如果提案的編號大于它已經回復的所以消息怜浅,則acceptors將自己上次的批準回復給proposers,并不再批準小于n的提案;2.批準階段:當proposers接收到acceptors中的這個“多數派”的回復后恶座,就向回復請求的acceptors發(fā)送accept請求搀暑,在符合acceptors一方約束條件下,acceptors收到accept請求后即批準這個請求跨琳。
Chubby系統(tǒng)設計
Chubby的設計目標有以下幾點:1.高可用性和高可靠性自点;2.高拓展性;3.支持粗粒度的建議性鎖服務脉让;4.服務信息的直接存儲桂敛;5.支持通報機制;6.支持緩存機制溅潜。
Chubby中的Paxos
單個副本主要由以下三層次組成:1术唬、最底層是一個容錯的日志,該日志對于數據庫的正確性提供了重要的支持滚澜。2碴开、最底層之上是一個容錯的數據庫,這個數據庫主要包括一個快照和一個記錄數據可操作的重播日志博秫,每一次的數據庫操作最終都將提交至日志中。3眶掌、Chubby構建在這個容錯的數據庫之上挡育,Chubby利用這個數據庫存儲所有的數據。
Chubby系統(tǒng)本質上就是一個分布式的朴爬、存儲大量小文件的文件系統(tǒng)即寒,它所有的操作都是在文件的基礎上完成的。