google雲端運算原理與應用
google雲端運算服務包括:google檔案系統GFS,分散式運算編程模形MapReduce,分布式鎖服務Chubby,分布式結構化資料表Bigtable,分布式儲存系統Megastore以及分布式監控系統Dapper等。
GFS提供了海量資料的儲存和訪問能力。
GFS
系統架構:
分為三類角色,client(用戶端),Master(主伺服器)和Chunk Server(資料區塊伺服器)
1,使用的是中心伺服器模組,可以任意添加chunk server.
2,不實現緩衝,這是從必要性和可行性兩方面考慮。
必要性:用戶端大部分是流式讀寫,不存在大量的重複讀寫。
可行性:如何維護緩衝與實際資料之間一致性是一個極其複雜的問題。加之網路等不確定因素,一致性問題尤為複雜。而且資料量非常大,以當前的記憶體容量根本無法緩衝。
而對於儲存在GFS的Master中的資料實現了緩衝。
3,在使用者狀態下實現,正常的檔案系統是作業系統的重要組成部分,在核心態實現檔案系統可以更好的和作業系統本身結合。
但GFS卻選擇在使用者態下實現,主要基於以下考慮:
1)在使用者態下直接利用作業系統提供的POSIX編程介面就可以擴充存取資料,無需瞭解內部的實現介面。
2)POSIX介面提供的功能更為豐富不受核心編程的限制
3)在使用者態下有多種調試工具
4)使用者態下,Master和Chunk Server都以進程的方式運行,單個進程不會影響整個作業系統
5)在使用者態下,GFS和作業系統運行在不同的空間,兩者的耦合性降低,方便GFS自身的擴充和升級
4,只提供專有的介面
容錯機制:
1,Master容錯
1)命名空間也就是整個檔案系統的目錄結構
2)Chunk與檔案名稱的映射表
3)Chunk副本的位置資訊,每一個Chunk預設有三個副本
2,Chunk Server容錯
GFS採用副本的方式實現Chunk Server的容錯,預設每個副本儲存3個
GFS劃分的每一個Chunk的預設大小是64MB
系統管理技術:
1)大規模的叢集安裝
2)故障檢測
3)節點動態加入
4)節能
分存式資料處理MapReduce
MapReduce就是“映射”和“化簡”的概念和主要思想。
比如查詢一個大型文本中各個單詞出現的次數,經過Map處理後,形成一批中間結果<單詞,出現次數>,而Reduce函數處理中間結果,將相同單詞出現的次數累加,得到每個單詞出現的次數。
分存式鎖服務
Chubby是Google設計的提供粗粒度服務的一個檔案系統,它是基於松耦合的分布式系統。
通過使用Chubby的鎖服務,使用者可以確保資料操作過程中的一致性。
1,Paxos演算法
paxos是一種基於訊息傳送的一致性演算法,用於解決分布式中的一致性問題
如何解決分布式中的一致性問題呢,最簡單的就是設定一個結點,所有操作都經過這個結點,這樣就能保證唯一性的問題。
但是這樣缺點也是顯而易見的,就是如果結點失效就會出現混亂,所以需要在系統中設定多個這樣的結點。
Paxos演算法分成三個類型:proposers、acceptors和learners,其中Proposers提出決議,acceptors批准決議,learners擷取並使用已經通過的決議。
2,Chubby系統設計
Chubby的設計目標主要有以下幾個:
1)高可用性和高可靠性
2)高擴充性
3)支援粗粒度的建議性鎖服務
4)服務資訊的直接儲存
5)支援通報機制
6)支援緩衝機制
分存式結構化資料表Bigtable
Bigtable是Google基於GFS和Chubby的分布式儲存系統。
Bigtable在很多方面跟資料庫類似。
資料模型:
Bigtable是一個分布式的多維映射表,表中資料通過一個行關鍵字,一個列關鍵字以及一個時間戳記進行索引。Bigtable對儲存在其中的資料不做任何解析,一律看成是字串。
1)行
可以是任意的字串,但是大小不能超過64K,排序是根據行關鍵字進行排序的,推薦使用的是字典序
2)列
有列族的概念,族名:限定詞(family:qualifier),族名必須有意義,限定詞可以任意選定,同族被壓縮儲存在一起
族同時也是Bigtable中存取控制的基本單元,也就是說存取權限是在族這一層級上進行的
3)時間戳記
預設是64位整數
目前提供兩種設定,一種是保留最近N個不同的版本,另一種就是保留限定時間內的所有不同版本
系統架構:
Bigtable主要由三部分組成:用戶端程式庫(Client Library)、一個主伺服器(Master Server)和多個子表格服務器(Table Server)
用戶端訪問Bigtable服務時,首先利用函數庫執行open操作開啟一個鎖,鎖開啟後用戶端就可以跟子表格服務器進行通訊了。
主伺服器的作用:
1)新子表分配
2)子表格服務器狀態監控
3)子伺服器之間的負載平衡
子表格服務器:
1)SSTable中的資料被劃分成一個個的塊(Block),每個塊的大小是可以設定的,一般為64KB,在SSTable的結尾有一個索引(Index),在SSTable開啟時這個索引會被載入進記憶體,所以尋找的速度會非常快。
每個子表都是由多個SSTable和日誌組成
2)子表地址,在Bigtable系統的內部採用的是一種類似B+樹的三層查詢體系
先查根子表,然後找到中繼資料子表,最後找到對應的使用者表
3)子表的資料存放區及讀寫操作
效能最佳化
1)局部性群組
2)壓縮
3)布隆過濾器
分存式儲存系統Megastore
Megastore:關係型資料庫和NoSQL的完美結合
設計目標:
1)針對可用性:引入了Paxos演算法
2)針對擴充性:採用資料分區將每個分區存放在NoSQL中
megastore的資料模型
通過類似SQL的方式進行查詢,有一套對應的查詢語言。
Megastore的核心技術-複製
1)複製的日誌
2)資料讀取 (1)本地查詢 (2)發現位置 (3)追趕 (4)驗證 (5)查詢資料
3)資料寫入 (1)接受leader (2)準備 (3)接受 (4)失效 (5)生效
分存式系統的監控基礎架構Dapper
分布式監控系統
基本設計目標:
1)低開銷
2)對應用程式層透明
3)可擴充性