天天看點

雲計算讀書筆記(二)

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)可擴充性

繼續閱讀