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個不同的版本,另一種就是保留限定時間内的所有不同版本
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5yM2QDM0MTOwUTMwETMxAjMvwVO1AzMzEzLcFTMwIzLcNXZnFWbp9CXt92YuM3ZvxmYuNmLyADMjlGcvw1LcpDc0RHaiojIsJye.jpg)
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)可擴充性