河海大學(xué)商學(xué)院的云計(jì)算課程期末復(fù)習(xí)筆記上半部分
只針對(duì)考點(diǎn)所以不太全面,留給未來(lái)需要的學(xué)弟學(xué)妹
本文主要講了Google云計(jì)算、Amazon AWS、微軟Azure這三套云計(jì)算體系的重要知識(shí)點(diǎn)
第一章 概論
云計(jì)算是一種提供計(jì)算服務(wù)的模式,包括服務(wù)器、存儲(chǔ)、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、軟件、分析等服務(wù),都通過(guò)互聯(lián)網(wǎng)(“云”)提供給全世界的用戶。根據(jù)服務(wù)類型,云計(jì)算通??梢苑譃槿悾夯A(chǔ)設(shè)施即服務(wù)(IaaS)、平臺(tái)即服務(wù)(PaaS)和軟件即服務(wù)(SaaS)。
以下是這三種服務(wù)類型的詳細(xì)介紹和典型例子:
- 基礎(chǔ)設(shè)施即服務(wù)(Infrastructure as a Service,簡(jiǎn)稱IaaS):提供計(jì)算資源,包括服務(wù)器、存儲(chǔ)和網(wǎng)絡(luò)硬件等基礎(chǔ)設(shè)施服務(wù)。用戶可以根據(jù)需求隨時(shí)購(gòu)買或釋放資源,以應(yīng)對(duì)業(yè)務(wù)的變化。這種服務(wù)允許用戶全面控制基礎(chǔ)設(shè)施的所有細(xì)節(jié),但同時(shí)也需要用戶自行負(fù)責(zé)系統(tǒng)的運(yùn)維和管理。典型的IaaS服務(wù)提供商有阿里云(Alibaba Cloud)和騰訊云(Tencent Cloud)。
- 平臺(tái)即服務(wù)(Platform as a Service,簡(jiǎn)稱PaaS):提供一套完整的開(kāi)發(fā)和部署環(huán)境,讓開(kāi)發(fā)者能夠?qū)W⒂诰帉懘a,而無(wú)需管理底層的基礎(chǔ)設(shè)施。PaaS通常包括操作系統(tǒng)、數(shù)據(jù)庫(kù)、中間件等服務(wù),用戶只需關(guān)注應(yīng)用程序的開(kāi)發(fā),不需要管理底層的基礎(chǔ)設(shè)施。華為云(Huawei Cloud)提供了一系列PaaS服務(wù),阿里云和騰訊云也提供了類似的服務(wù)。
- 軟件即服務(wù)(Software as a Service,簡(jiǎn)稱SaaS):通過(guò)網(wǎng)絡(luò)提供軟件應(yīng)用。用戶無(wú)需購(gòu)買和安裝軟件,只需要通過(guò)網(wǎng)絡(luò)即可使用。SaaS通常采用訂閱制,用戶只需要支付使用軟件的費(fèi)用,無(wú)需購(gòu)買和維護(hù)軟件和硬件。阿里巴巴的釘釘(DingTalk)和騰訊的企業(yè)微信(WeChat Work)就是典型的SaaS服務(wù)例子。
以上就是云計(jì)算的三種主要服務(wù)類型。需要注意的是,這三種服務(wù)類型并非互斥,很多云服務(wù)提供商會(huì)同時(shí)提供這三種服務(wù)。
第二章 Google 云計(jì)算
2.1 Google文件系統(tǒng)(GFS)
GFS設(shè)計(jì)初衷是滿足Google大數(shù)據(jù)存儲(chǔ)和處理的需求。系統(tǒng)由一個(gè)主服務(wù)器(Master Server)和多個(gè)分塊服務(wù)器(Chunk Server)組成,以及一系列客戶端庫(kù)(Client)。
- Client是GFS提供給應(yīng)用程序的訪問(wèn)接口
- 主服務(wù)器Master負(fù)責(zé)元數(shù)據(jù)(metadata)的管理,包括命名空間、訪問(wèn)控制信息以及文件分塊信息。主服務(wù)器并不直接參與文件的讀寫,從而避免了成為瓶頸。
- 分塊服務(wù)器Chunk Server將文件存儲(chǔ)為固定大小的塊(默認(rèn)64MB),并在主服務(wù)器的指示下進(jìn)行復(fù)制以提供容錯(cuò)能力。
GFS文件寫入流程大致為:
- 客戶端詢問(wèn)主服務(wù)器該文件哪些分塊服務(wù)器存有。
- 主服務(wù)器返回分塊服務(wù)器信息后,客戶端向分塊服務(wù)器發(fā)出寫入請(qǐng)求。
- 分塊服務(wù)器接受寫入數(shù)據(jù),并在成功后通知主服務(wù)器更新元數(shù)據(jù)。
升級(jí)原理
?
2.2 MapReduce和Hadoop
分布數(shù)據(jù)處理
MapReduce是Google設(shè)計(jì)的一種大數(shù)據(jù)處理編程模型,Apache Hadoop是該模型的一個(gè)著名開(kāi)源實(shí)現(xiàn)。
MapReduce主要包括三個(gè)階段:Map階段、Shuffle階段和Reduce階段。在Map階段,輸入數(shù)據(jù)被分割成多個(gè)塊,并在集群的各節(jié)點(diǎn)上并行處理,生成一系列的鍵值對(duì)。接下來(lái)的Shuffle階段會(huì)把這些鍵值對(duì)按照鍵進(jìn)行排序和分組,這樣就可以將具有相同鍵的值集中到一起。然后在Reduce階段,根據(jù)鍵值對(duì)的鍵來(lái)對(duì)相應(yīng)的值進(jìn)行聚合操作。
以下是這個(gè)過(guò)程的一個(gè)示例:
假設(shè)我們需要處理一個(gè)大型文本文件,目標(biāo)是計(jì)算每個(gè)單詞出現(xiàn)的次數(shù)。我們可以使用MapReduce來(lái)完成這個(gè)任務(wù)。
- Map階段:每個(gè)Map任務(wù)處理文件的一部分,它會(huì)讀取文本并將每個(gè)單詞輸出為一個(gè)鍵值對(duì),其中鍵是單詞本身,值是這個(gè)單詞的計(jì)數(shù)(初始為1)。例如,如果輸入是"apple banana apple",那么Map階段的輸出就是 [(“apple”, 1), (“banana”, 1), (“apple”, 1)]。
- Shuffle階段:在這個(gè)階段,系統(tǒng)會(huì)自動(dòng)把所有的鍵值對(duì)按照鍵進(jìn)行排序和分組,使得所有相同的鍵都會(huì)被集中到一起。在我們的例子中,Shuffle階段會(huì)把所有的(“apple”, 1)和(“banana”, 1)收集到一起。
- Reduce階段:在這個(gè)階段,每個(gè)Reduce任務(wù)會(huì)接收到Shuffle階段的結(jié)果,然后對(duì)同一個(gè)鍵的所有值進(jìn)行聚合。例如,對(duì)于"apple",Reduce階段的輸入是 [(“apple”, 1), (“apple”, 1)],它會(huì)把這些計(jì)數(shù)加起來(lái),輸出的結(jié)果就是 [(“apple”, 2)]。
這樣,通過(guò)MapReduce,我們就可以在一個(gè)大規(guī)模的集群上,高效地處理大量的數(shù)據(jù)。
- 具體執(zhí)行過(guò)程:
- MapReduce 的大致執(zhí)行過(guò)程如下圖所示:
圖中的6個(gè)步驟對(duì)應(yīng)如下:
- 先將輸入文件分成 M個(gè)數(shù)據(jù)片段,每個(gè)數(shù)據(jù)片段的大小一般從 16MB 到 64MB。然后用戶程序在集群中創(chuàng)建大量程序副本。
- 副本程序中除了一個(gè) master,其他都是 worker 程序,并由 master 分配 M個(gè) map 任務(wù)和 R個(gè) reduce 任務(wù)。master 將一個(gè) map 任務(wù)或 reduce 任務(wù)分配給一個(gè)空閑的 worker。
- 被分配了 map 任務(wù)的 worker 程序讀取對(duì)應(yīng)的輸入數(shù)據(jù)片段,解析并處理鍵值對(duì),生成并輸出中間鍵值對(duì)結(jié)果,并緩存在內(nèi)存緩沖區(qū)中。
- 周期性地,緩沖區(qū)中的中間結(jié)果會(huì)被用戶指定的切分(partition)函數(shù)(例如
hash(key) mod R
)切分為 R 個(gè)部分,并存入到本地磁盤中。任務(wù)完成時(shí),緩存在本地磁盤上的存儲(chǔ)位置將被回傳給 master,由 master 負(fù)責(zé)把這些存儲(chǔ)位置再傳送給 reduce worker。- Reduce worker 程序接收到 master 程序發(fā)來(lái)的數(shù)據(jù)存儲(chǔ)位置信息后,使用 RPC 從 map worker 所在主機(jī)的磁盤上讀取這些緩存數(shù)據(jù),然后通過(guò)對(duì) key 進(jìn)行排序后使得具有相同 key 值的數(shù)據(jù)聚合在一起。如果中間數(shù)據(jù)太大無(wú)法在內(nèi)存中完成排序,那么就要在外部進(jìn)行排序。
- Reduce worker 程序遍歷排序后的中間數(shù)據(jù),對(duì)于每一個(gè)唯一的中間 key 值,reduce worker 將這個(gè) key 值和它相關(guān)的 value 值的集合傳遞給用戶自定義的 reduce 函數(shù)進(jìn)行處理,處理輸出被追加到所屬分區(qū)的輸出文件。由于是按順序?qū)ε判蚝蟮闹虚g數(shù)據(jù)進(jìn)行處理,所以每個(gè)輸出文件分片內(nèi)部是有序的。
2.3 分布式鎖服務(wù)Chubby
Chubby是Google的分布式鎖服務(wù)。它通過(guò)提供粗粒度的鎖以及存儲(chǔ)小量數(shù)據(jù)的能力,為Google的其他系統(tǒng)提供協(xié)同服務(wù)。
- Chubby通信協(xié)議(閱讀課本P30)
-
主服務(wù)器出錯(cuò)
- 在Chubby的通信過(guò)程中,客戶端通過(guò)發(fā)送RPC請(qǐng)求與Chubby服務(wù)器進(jìn)行交互。當(dāng)主服務(wù)器出錯(cuò)時(shí),會(huì)進(jìn)行故障轉(zhuǎn)移,由備份服務(wù)器接替其角色,保證系統(tǒng)的可用性。
-
租約機(jī)制
- 租約(Lease)機(jī)制是Chubby保證服務(wù)可用性的重要手段。當(dāng)一個(gè)客戶端獲得一個(gè)鎖時(shí),它同時(shí)也會(huì)獲得一個(gè)租約,有效期通常是幾十秒。只要客戶端的租約沒(méi)有過(guò)期,它就可以認(rèn)為自己持有那個(gè)鎖。如果客戶端在租約期限內(nèi)向Chubby服務(wù)器續(xù)租,那么租約可以繼續(xù)有效。如果服務(wù)器沒(méi)有收到續(xù)租請(qǐng)求,就會(huì)認(rèn)為客戶端已經(jīng)崩潰,從而釋放鎖,允許其他客戶端獲取。
舉個(gè)例子,假設(shè)你正在用Google Docs編寫文檔,這時(shí)你的同事也想同時(shí)編輯這份文檔。Chubby鎖可以在這個(gè)過(guò)程中防止你們同時(shí)修改同一部分文檔,造成沖突。當(dāng)你編輯一個(gè)段落時(shí),你的客戶端會(huì)獲取一個(gè)Chubby鎖,保證在你編輯這個(gè)段落時(shí),其他人無(wú)法修改。如果你的租約到期沒(méi)有續(xù)租,Chubby就會(huì)認(rèn)為你已經(jīng)停止編輯,釋放鎖,允許其他人編輯這個(gè)段落。
2.4 分布式結(jié)構(gòu)化數(shù)據(jù)表Bigtable
視頻:https://www.bilibili.com/video/BV1bj41137BY/
Bigtable是Google的分布式存儲(chǔ)系統(tǒng),主要用于存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。Bigtable主要由三個(gè)部分組成:客戶端程序庫(kù)(Client Library)、一個(gè)主服務(wù)器(Master Server)和多個(gè)子表服務(wù)器(Tablet Server)。
Bigtable中的數(shù)據(jù)按照行和列進(jìn)行組織,每一行由行鍵(row key)進(jìn)行唯一標(biāo)識(shí)。
存儲(chǔ)形式
-
<行關(guān)鍵字,列關(guān)鍵字,時(shí)間戳> -> 內(nèi)容
-
行標(biāo)簽如何存儲(chǔ)
- 行鍵在Bigtable中存儲(chǔ)的方式是**按字典序排序的(應(yīng)該是字母順序的意思),這使得讀取相鄰的行鍵的操作變得非常高效。**這種特性使得Bigtable非常適合處理那些需要按照某種范圍進(jìn)行讀取的操作。
-
行標(biāo)簽的倒排的優(yōu)點(diǎn)
-
同一地址域的網(wǎng)頁(yè)會(huì)被存儲(chǔ)在表中的連續(xù)位置,有利于用戶查找和分析
-
倒排便于數(shù)據(jù)壓縮,可以大幅提高壓縮率
-
解釋一下:
-
域名:
- “www.example.com/news” 中,“example.com” 是主域名,“www” 是這個(gè)主域名下的一個(gè)子域名,而 “/news” 是這個(gè)子域名下的一個(gè)路徑或者頁(yè)面。
- “news.example.com” 中,“example.com” 仍然是主域名,但是這次 “news” 是這個(gè)主域名下的一個(gè)子域名。
子域名是主域名的一個(gè)分支,通常用來(lái)表示主域名下的不同功能或服務(wù)。比如,很多網(wǎng)站會(huì)有 “blog.example.com” 來(lái)托管他們的博客,或者 “shop.example.com” 來(lái)托管他們的在線商店。
-
Bigtable 的設(shè)計(jì)者選擇使用倒序的 URL 主要是為了更好地優(yōu)化對(duì)“域名”的查詢效率,尤其是當(dāng) URL 的子域名層級(jí)較多時(shí),例如:
- news.example.com
- sports.example.com
- finance.example2.com
如果按照正序 URL 排序,上述三個(gè) URL 中,相同主域名(example.com 或example2.com)的頁(yè)面不一定會(huì)被放在一起,而按照倒序排序則可以做到這一點(diǎn):
- com.example.news
- com.example.sports
- com.example2.finance
-
-
主服務(wù)器
-
主服務(wù)器的主要作用
子表
-
tablet
- Bigtable中的表由許多組成,這些小塊在Bigtable中被稱為“tablet”。每個(gè)tablet代表了行關(guān)鍵字的一部分范圍,這樣整個(gè)表可以分割成許多并行處理的小塊,也就是所謂的“子表”。子表(tablet)有助于實(shí)現(xiàn)表的分布式存儲(chǔ)和并行處理。
- 從概念上講子表就是一系列行的集合
-
子表服務(wù)器(tablet server)是Bigtable中負(fù)責(zé)處理一個(gè)或多個(gè)子表(tablet)的服務(wù)器。它處理子表的讀取和寫入請(qǐng)求,并在必要時(shí)將子表分割成更小的單元。
-
SSTable
- SSTable 格式的基本示意
- SSTable 是Google為Bigtable設(shè)計(jì)的內(nèi)部數(shù)據(jù)存儲(chǔ)格式。所有的SSTable文件都存儲(chǔ)在GFS上,用戶可以通過(guò)鍵來(lái)查詢相應(yīng)的值。
- 每個(gè)SSTable包含了一系列的塊(block)和一個(gè)塊索引(block index),用于高效地查找和讀取數(shù)據(jù)。
- SSTable 格式的基本示意
-
子表實(shí)際組成
- 一個(gè)子表由多個(gè)SSTable以及日志文件組成
- 不同子表的SSTable可以共享
- 每個(gè)子表服務(wù)器上僅保存一個(gè)日志文件
- Bigtable規(guī)定將日志的內(nèi)容按照鍵值進(jìn)行排序
- 每個(gè)子表服務(wù)器上保存的子表數(shù)量可以從幾十到上千不等,通常情況下是100個(gè)左右
-
子表地址組成
- 一個(gè)子表(tablet)的數(shù)據(jù)存儲(chǔ)在一個(gè)或多個(gè)SSTable中。每個(gè)SSTable存儲(chǔ)的都是已經(jīng)排序的鍵值對(duì),這種排序特性使得范圍查詢和順序讀取等操作非常高效。
- 在子表和SSTable之間有一個(gè)重要的映射關(guān)系:每個(gè)子表知道它的數(shù)據(jù)被存儲(chǔ)在哪些SSTable中。當(dāng)一個(gè)子表服務(wù)器需要讀取或?qū)懭胍粋€(gè)子表的數(shù)據(jù)時(shí),它會(huì)使用這個(gè)映射關(guān)系找到相應(yīng)的SSTable,然后在SSTable中進(jìn)行操作。
-
三種形式的數(shù)據(jù)壓縮
- 次壓縮、合并壓縮、主壓縮
子表的數(shù)據(jù)最終還是寫到GFS里的,子表在GFS里的物理形態(tài)就是若干個(gè)SSTable文件
集群包括主服務(wù)器和子服務(wù)器,主服務(wù)器負(fù)責(zé)將片分配給子服務(wù)器,而具體的數(shù)據(jù)服務(wù)則全權(quán)由子服務(wù)器負(fù)責(zé)。
但是不要誤以為子服務(wù)器真的存儲(chǔ)了數(shù)據(jù)(除了內(nèi)存中memtable的數(shù)據(jù)),數(shù)據(jù)的真實(shí)位置只有GFS才知道,主服務(wù)器將子表分配給子服務(wù)器的意思應(yīng)該是,子服務(wù)器獲取了子表的所有SSTable文件名,子服務(wù)器通過(guò)一些索引機(jī)制可以知道所需要的數(shù)據(jù)在哪個(gè)SSTable文件,然后從GFS中讀取SSTable文件的數(shù)據(jù),這個(gè)SSTable文件可能分布在好幾臺(tái)chunkserver上。
Bigtable 相關(guān)優(yōu)化技術(shù)
Bigtable 使用了一些性能優(yōu)化的技術(shù):BWT(Burrows-Wheeler Transform)和布隆過(guò)濾器。
-
BWT (Burrows-Wheeler Transform):它是一種用于數(shù)據(jù)壓縮的算法,主要用于對(duì)字符串?dāng)?shù)據(jù)進(jìn)行變換。在 BWT 中,字符串的字符會(huì)按照某種順序進(jìn)行排列,然后選擇一個(gè)新的字符串,這個(gè)新的字符串中的字符順序會(huì)提高后續(xù)壓縮算法(如 move-to-front transform, run-length encoding)的效率。換句話說(shuō),BWT 通過(guò)改變字符串中字符的順序,將原本隨機(jī)分布的字符變得更加集中,從而增加了壓縮的效率。值得注意的是,這種變換是可逆的,也就是說(shuō)經(jīng)過(guò) BWT 變換和壓縮的數(shù)據(jù),可以被完整地恢復(fù)出來(lái)。???
-
布隆過(guò)濾器 (Bloom Filter):布隆過(guò)濾器是一種空間效率極高的概率數(shù)據(jù)結(jié)構(gòu),用于檢測(cè)一個(gè)元素是不是集合中的成員。它的主要特點(diǎn)是存在一定的誤報(bào)率,但絕對(duì)不會(huì)漏報(bào)。誤報(bào)率是指查詢一個(gè)不存在于集合中的元素,布隆過(guò)濾器可能會(huì)錯(cuò)誤地認(rèn)為它在集合中;漏報(bào)則是指查詢一個(gè)存在于集合中的元素,布隆過(guò)濾器不會(huì)錯(cuò)誤地認(rèn)為它不在集合中。在 Bigtable 中,布隆過(guò)濾器用于減少不必要的磁盤讀取操作:當(dāng)我們查詢一個(gè)元素時(shí),先用布隆過(guò)濾器判斷一下,如果判斷結(jié)果為“不在”,則可以避免進(jìn)行磁盤讀取;如果判斷結(jié)果為“在”,則需要進(jìn)一步從磁盤讀取數(shù)據(jù)來(lái)確定。
-
假設(shè)我們有一份電話簿,我們需要判斷一個(gè)電話號(hào)碼是否在電話簿中。如果我們直接查詢電話簿,那么可能需要翻閱整本電話簿,這需要很長(zhǎng)的時(shí)間。而如果我們使用布隆過(guò)濾器,那么我們可以在很短的時(shí)間內(nèi)得到答案。我們首先將電話簿中的所有電話號(hào)碼添加到布隆過(guò)濾器中,這個(gè)過(guò)程會(huì)生成一個(gè)位數(shù)組。然后,當(dāng)我們需要查詢一個(gè)電話號(hào)碼是否在電話簿中時(shí),我們只需要查詢這個(gè)位數(shù)組即可。如果布隆過(guò)濾器判斷結(jié)果為“不在”,那么我們就可以確定這個(gè)電話號(hào)碼肯定不在電話簿中,從而避免了不必要的查詢。如果布隆過(guò)濾器判斷結(jié)果為“在”,那么我們還需要進(jìn)一步查詢電話簿來(lái)確定。這樣,大多數(shù)情況下,我們可以在很短的時(shí)間內(nèi)得到答案,從而大大提高了查詢效率。
-
總的來(lái)說(shuō),BWT 是用于提高數(shù)據(jù)壓縮效率的算法,而布隆過(guò)濾器是用于減少不必要的磁盤讀取,從而提高查詢效率的數(shù)據(jù)結(jié)構(gòu)。兩者在 Bigtable 中都發(fā)揮了重要的作用。
2.5 分布式存儲(chǔ)系統(tǒng)Megastore
https://www.jianshu.com/p/7c4d0ab911f6
Megastore
Megastore是Google的一個(gè)分布式存儲(chǔ)系統(tǒng),它是在Bigtable基礎(chǔ)之上構(gòu)建的,為用戶提供了包括ACID事務(wù)在內(nèi)的一些關(guān)系數(shù)據(jù)庫(kù)特性。
Megastore的基本架構(gòu)包括以下幾個(gè)部分:
-
Entity Group: Megastore將數(shù)據(jù)組織為實(shí)體組(Entity Group),每個(gè)實(shí)體組內(nèi)部都是按照Bigtable的方式存儲(chǔ)的,每個(gè)實(shí)體組都可以提供ACID語(yǔ)義的事務(wù)(就像一個(gè)小的數(shù)據(jù)庫(kù))。實(shí)體組之間則無(wú)法提供ACID事務(wù)。
-
Replicas: 為了提高數(shù)據(jù)的可用性和容錯(cuò)能力,Megastore會(huì)將每個(gè)實(shí)體組的數(shù)據(jù)復(fù)制到多個(gè)物理位置。
-
Paxos: Megastore使用Paxos算法來(lái)保證每個(gè)實(shí)體組的多個(gè)副本之間的一致性。Megastore的每個(gè)寫操作都需要經(jīng)過(guò)Paxos的多數(shù)派同意才能提交。
-
Catch-up: 為了保證不同地域之間數(shù)據(jù)的一致性,Megastore提供了Catch-up機(jī)制,即當(dāng)某個(gè)副本落后于其他副本時(shí),它可以通過(guò)Catch-up過(guò)程來(lái)獲取丟失的更新。
-
Product: Megastore被廣泛應(yīng)用在Google的許多產(chǎn)品中,例如Google App Engine的數(shù)據(jù)存儲(chǔ)就是基于Megastore實(shí)現(xiàn)的。
ACID語(yǔ)義
ACID是指數(shù)據(jù)庫(kù)事務(wù)正確執(zhí)行的四個(gè)基本特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
-
A(Atomicity)原子性:這是指整個(gè)事務(wù)是不可分割的單位,事務(wù)中的所有操作要么全部提交成功,要么全部失敗回滾,對(duì)于一個(gè)事務(wù)的操作,系統(tǒng)保證所有操作要么全部完成,要么全部不做,不可能停滯在中間環(huán)節(jié)。事務(wù)的原子性是通過(guò)Undo和Redo來(lái)實(shí)現(xiàn)的。
-
C (Consistency)一致性:事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài)。一致性與業(yè)務(wù)有關(guān),如A賬戶給B賬戶轉(zhuǎn)賬,不管轉(zhuǎn)賬是否成功,A賬戶的出賬金額與B賬戶的進(jìn)賬金額必須一致,這就是業(yè)務(wù)一致性。
-
I (lsolation)- 隔離性:當(dāng)多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶開(kāi)啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。即要達(dá)到這么一種效果:對(duì)于任意兩個(gè)并發(fā)的事務(wù)T1和T2,在事務(wù)T1看來(lái),T2要么在T1開(kāi)始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開(kāi)始,這使得每個(gè)事務(wù)都感覺(jué)不到系統(tǒng)中有其他事務(wù)并行執(zhí)行。
-
D (Durability) 持久性:一旦事務(wù)提交,則其所做的修改就會(huì)永久保存在數(shù)據(jù)庫(kù)中。即使在事務(wù)提交后,系統(tǒng)出現(xiàn)崩潰,重新啟動(dòng)后也能保證事務(wù)的持久性。
基本架構(gòu)
-
完整副本:Bigtable中存儲(chǔ)完整的日志和數(shù)據(jù)。
-
見(jiàn)證者副本:在Paxos算法執(zhí)行過(guò)程中無(wú)法產(chǎn)生一個(gè)決議時(shí)參與投票,因此對(duì)于這個(gè)副本,Bigtable只存儲(chǔ)其日志而不存儲(chǔ)具體數(shù)據(jù)。
-
只讀副本:無(wú)法參與投票,作用只是讀取到最近過(guò)去某一個(gè)時(shí)間點(diǎn)的一致性數(shù)據(jù)。如果讀操作能容忍這些過(guò)期數(shù)據(jù),只讀副本能夠在不加劇寫延遲的情況下將數(shù)據(jù)在較大的地理空間上進(jìn)行傳輸。
-
Megastore的部署需要通過(guò)一個(gè)客戶端函數(shù)庫(kù)和若干個(gè)的服務(wù)器。應(yīng)用程序連接到這個(gè)客戶端函數(shù)庫(kù),這個(gè)函數(shù)庫(kù)執(zhí)行Paxos算法,還有一個(gè)稱為協(xié)調(diào)者(Fast Reads)的服務(wù),要理解這個(gè)服務(wù)的作用,首先需要了解快速讀和快速寫機(jī)制
-
你可以把 Megastore 想象成一個(gè)超大的圖書館,這個(gè)圖書館在全球有很多分館,也就是服務(wù)器。在這些分館中,有些圖書館(完整副本)儲(chǔ)存了全部的書籍和詳細(xì)的借閱記錄。還有一些圖書館(見(jiàn)證者副本)并沒(méi)有儲(chǔ)存書籍,但他們記錄了所有的借閱行為。另外,還有一些圖書館(只讀副本)只允許讀者閱讀書籍,但并不記錄借閱信息。當(dāng)讀者想借書時(shí),就需要連接到客戶端函數(shù)庫(kù)(即借閱臺(tái)),借閱臺(tái)會(huì)執(zhí)行一套流程(類似Paxos算法)來(lái)保證借書的流程正確無(wú)誤。協(xié)調(diào)者服務(wù)就像一個(gè)快速查詢服務(wù),能快速告訴你想找的書在哪里,這就是快速讀的機(jī)制。
核心技術(shù)-復(fù)制
-
數(shù)據(jù)讀取:
-
在一次Current讀之前,**要保證至少有一個(gè)副本上的數(shù)據(jù)是最新的,也就是說(shuō)所有之前提交到日志中的更新必須到該副本上并確保在該副本上生效。**這個(gè)過(guò)程稱為追趕(Catchup)
-
把這個(gè)過(guò)程想象成你去超市購(gòu)物。你手上有一個(gè)購(gòu)物清單,這個(gè)清單在你進(jìn)超市之前需要保證是最新的,也就是說(shuō)你在家里做的所有的改動(dòng)(比如添加或刪除某個(gè)商品)都已經(jīng)更新到這個(gè)清單上,這個(gè)過(guò)程就是Catchup。然后你按照清單在超市進(jìn)行購(gòu)物,這就是數(shù)據(jù)讀取的過(guò)程。如果在購(gòu)物過(guò)程中,你突然發(fā)現(xiàn)清單上少了某個(gè)商品,那么你就需要回家再次更新清單,這就是保證清單(也就是副本)是最新的。
第三章 Amazon AWS
3.1 Dynamo
云計(jì)算 | AWS | Dynamo
-
Dynamo
- 底層存儲(chǔ)架構(gòu),只支持簡(jiǎn)單的鍵值對(duì)存儲(chǔ)
- 無(wú)中心的模式
- 中心思想:Dynamo是通過(guò)在數(shù)據(jù)中心進(jìn)行分布式存儲(chǔ)來(lái)實(shí)現(xiàn)高可用性和擴(kuò)展性。
- 架構(gòu)形式:Dynamo采用了一致性哈希算法進(jìn)行數(shù)據(jù)分布,使得系統(tǒng)可以在節(jié)點(diǎn)動(dòng)態(tài)變化時(shí),平衡負(fù)載并最小化數(shù)據(jù)遷移
-
Windows Azure是一個(gè)基于云的應(yīng)用程序執(zhí)行環(huán)境,提供了計(jì)算服務(wù)、存儲(chǔ)服務(wù)以及與應(yīng)用程序通信的各種服務(wù)。在Azure中,存儲(chǔ)層使用了多副本復(fù)制機(jī)制,通過(guò)復(fù)制數(shù)據(jù)到不同的物理節(jié)點(diǎn)來(lái)實(shí)現(xiàn)數(shù)據(jù)的持久性和可靠性。
兩者的主要區(qū)別在于其設(shè)計(jì)目標(biāo)和實(shí)現(xiàn)方法。Dynamo注重高可用性和擴(kuò)展性,適合非結(jié)構(gòu)化數(shù)據(jù),使用了最終一致性模型;而Azure是一個(gè)更通用的平臺(tái),提供了計(jì)算、存儲(chǔ)和通信等服務(wù),適合存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),并使用了強(qiáng)一致性模型。
一致性哈希算法
- 一致性哈希算法:好剛: 7分鐘視頻詳解一致性hash 算法
- 一致性哈希算法中,虛擬節(jié)點(diǎn)和物理節(jié)點(diǎn)的關(guān)系可以簡(jiǎn)單理解為:每個(gè)物理節(jié)點(diǎn)對(duì)應(yīng)多個(gè)虛擬節(jié)點(diǎn),每個(gè)虛擬節(jié)點(diǎn)存放一部分物理節(jié)點(diǎn)的數(shù)據(jù)。通過(guò)增加虛擬節(jié)點(diǎn),我們可以在物理節(jié)點(diǎn)數(shù)量變化時(shí),平均分布負(fù)載,并且最小化需要遷移的數(shù)據(jù)量。
- 使用越多的虛擬節(jié)點(diǎn)有以下幾個(gè)好處:
- 1)能夠更平均地分布數(shù)據(jù),減少數(shù)據(jù)傾斜問(wèn)題。這是因?yàn)樵诂F(xiàn)實(shí)中每一個(gè)物理節(jié)點(diǎn)的性能不一定相同,引入虛擬節(jié)點(diǎn)可以使得不同性能的節(jié)點(diǎn)承受不同的負(fù)載;
- 2)當(dāng)增加或刪除物理節(jié)點(diǎn)時(shí),只需要遷移少量的數(shù)據(jù),減少了數(shù)據(jù)遷移的開(kāi)銷;
- 3)提高了系統(tǒng)的可擴(kuò)展性和穩(wěn)定性。
- 在一致性哈希算法中,查找特定鍵(key)的復(fù)雜度通常是 O ( l o g ( n ) ) O(log(n)) O(log(n)),其中 n n n是哈希環(huán)中節(jié)點(diǎn)(服務(wù)器)的數(shù)量。
- 一致性哈希算法可以進(jìn)一步改進(jìn),例如通過(guò)引入復(fù)制和數(shù)據(jù)分片機(jī)制,可以進(jìn)一步提高系統(tǒng)的可用性和數(shù)據(jù)安全性。
冗余備份
- 參數(shù)可調(diào)的弱Quorum機(jī)制
- R + W > N R+W>N R+W>N可以保證當(dāng)存在故障的節(jié)點(diǎn)數(shù)量不超過(guò)1臺(tái)時(shí),用戶至少可以獲得一份最新的數(shù)據(jù)副本。其中 W W W表示一次成功的寫操作至少需要寫入的副本數(shù), R R R表示一次成功讀操作須由服務(wù)器返回給用戶的最小副本數(shù), N N N表示每個(gè)數(shù)據(jù)存儲(chǔ)的副本數(shù)。
- 為什么冗余備份可以提升數(shù)據(jù)安全性
- 冗余備份是一種常見(jiàn)的保護(hù)數(shù)據(jù)安全和可用性的手段。冗余備份的原理是在多個(gè)地方存儲(chǔ)數(shù)據(jù)的副本。如果某個(gè)存儲(chǔ)地方發(fā)生故障,數(shù)據(jù)丟失或損壞,那么可以從其他地方獲取該數(shù)據(jù)的副本。例如,DynamoDB通過(guò)在多個(gè)可用區(qū)中存儲(chǔ)數(shù)據(jù)副本來(lái)提供高可用性和數(shù)據(jù)持久性。
- 實(shí)際上,冗余備份不僅可以提高數(shù)據(jù)的安全性,同時(shí)也能增加數(shù)據(jù)的可用性。當(dāng)某個(gè)存儲(chǔ)節(jié)點(diǎn)故障時(shí),系統(tǒng)可以快速地從其他存儲(chǔ)節(jié)點(diǎn)中獲取數(shù)據(jù),避免因?yàn)閱吸c(diǎn)故障而導(dǎo)致的系統(tǒng)不可用。
成員資格和錯(cuò)誤檢測(cè)
P96
-
Dynamo是無(wú)中心的架構(gòu),每個(gè)成員節(jié)點(diǎn)需要保存其他節(jié)點(diǎn)的路由信息
-
在分布式系統(tǒng)中,成員資格和錯(cuò)誤檢測(cè)是非常重要的問(wèn)題。成員資格是指確定系統(tǒng)中有哪些節(jié)點(diǎn)正在參與運(yùn)行。錯(cuò)誤檢測(cè)是指確定系統(tǒng)中哪些節(jié)點(diǎn)可能發(fā)生了故障。
-
成員資格(Membership) 是指在一個(gè)分布式系統(tǒng)中,確定哪些節(jié)點(diǎn)是活躍的,也就是當(dāng)前正在參與運(yùn)行的節(jié)點(diǎn)。由于在一個(gè)分布式系統(tǒng)中,節(jié)點(diǎn)可能會(huì)因?yàn)楣收匣蛘咂渌螂x線,所以需要一個(gè)機(jī)制來(lái)跟蹤和識(shí)別出哪些節(jié)點(diǎn)是在線的。
- 假設(shè)你正在參與一個(gè)多人在線游戲,這個(gè)游戲的服務(wù)器是分布式的。每個(gè)玩家都會(huì)連接到一個(gè)服務(wù)器節(jié)點(diǎn)。這個(gè)時(shí)候,成員資格就是要識(shí)別出哪些玩家(節(jié)點(diǎn))當(dāng)前在線,參與了這個(gè)游戲。
-
錯(cuò)誤檢測(cè)(Failure Detection):是指在分布式系統(tǒng)中,識(shí)別出哪些節(jié)點(diǎn)發(fā)生了故障。這是因?yàn)樵谝粋€(gè)大規(guī)模的分布式系統(tǒng)中,故障是常態(tài)??赡苡捎谟布收?、網(wǎng)絡(luò)問(wèn)題等各種原因?qū)е履承┕?jié)點(diǎn)無(wú)法工作。
- 繼續(xù)以上面的游戲?yàn)槔僭O(shè)在你的隊(duì)伍中,有一名玩家突然離線了(可能是因?yàn)榫W(wǎng)絡(luò)故障、電腦死機(jī)等原因)。錯(cuò)誤檢測(cè)的任務(wù),就是盡快發(fā)現(xiàn)這個(gè)玩家已經(jīng)離線,以便游戲可以采取相應(yīng)的措施(例如讓AI接管,或者尋找新的玩家加入等)。
成員資格和錯(cuò)誤檢測(cè)通常是通過(guò)一種名為"Gossip(閑聊)"的協(xié)議來(lái)實(shí)現(xiàn)的。在這個(gè)機(jī)制中,每個(gè)節(jié)點(diǎn)周期性地向其他節(jié)點(diǎn)發(fā)送消息,表示它還“活著”。如果某個(gè)節(jié)點(diǎn)在一段時(shí)間內(nèi)沒(méi)有收到另一個(gè)節(jié)點(diǎn)的消息,那么它就會(huì)認(rèn)為那個(gè)節(jié)點(diǎn)已經(jīng)離線或發(fā)生了故障。
- 假如一個(gè)新節(jié)點(diǎn)加入節(jié)點(diǎn)總數(shù)為N的系統(tǒng),并以最優(yōu)的方式進(jìn)行傳播(即每次通信的兩個(gè)節(jié)點(diǎn)都是第一次交換節(jié)點(diǎn)信息),那么將新節(jié)點(diǎn)傳遍整個(gè)系統(tǒng)需要的時(shí)間復(fù)雜度為 O ( l o g n ) O(logn) O(logn)
3.2 彈性計(jì)算云EC2
-
地理區(qū)域和可用區(qū)域
-
EC2是Amazon的Elastic Compute Cloud的簡(jiǎn)稱,提供了可伸縮的計(jì)算能力。用戶可以在Amazon的計(jì)算環(huán)境中虛擬機(jī)器上啟動(dòng)應(yīng)用程序。各種各樣的服務(wù),比如提供GPU
-
AWS全球基礎(chǔ)設(shè)施是分布在世界各地的云基礎(chǔ)設(shè)施。這些基礎(chǔ)設(shè)施包括地理區(qū)域和可用區(qū)域。
- 地理區(qū)域是AWS云在全球的物理位置,每個(gè)區(qū)域都包含至少兩個(gè)可用區(qū)域。
- 可用區(qū)域是指代表在地理上分離的數(shù)據(jù)中心,但在網(wǎng)絡(luò)延遲低的同一地理區(qū)域內(nèi)。通常根據(jù)是否有獨(dú)立的供電系統(tǒng)和冷卻系統(tǒng)等進(jìn)行劃分。
- EC2包含多個(gè)地理區(qū)域,每個(gè)地理區(qū)域又包含多個(gè)可用區(qū)域。
-
在應(yīng)用架構(gòu)中融入這種思想,就可以提高應(yīng)用的可用性和容災(zāi)能力。例如,通過(guò)在多個(gè)可用區(qū)域部署應(yīng)用,即使某個(gè)可用區(qū)域出現(xiàn)問(wèn)題,應(yīng)用也可以在其他可用區(qū)域正常運(yùn)行。
3.3簡(jiǎn)單存儲(chǔ)服務(wù)S3
S3即Simple Storage Service,是Amazon提供的一種對(duì)象存儲(chǔ)服務(wù),它以對(duì)象為單位,提供了在互聯(lián)網(wǎng)上存儲(chǔ)和檢索任意數(shù)量的數(shù)據(jù)的能力。
- 桶(Bucket):桶在Amazon S3中就像是文件夾或目錄,它用來(lái)存儲(chǔ)對(duì)象(數(shù)據(jù))。每個(gè)桶在S3中都有一個(gè)全局唯一的名稱,并且所有存儲(chǔ)在S3中的對(duì)象都必須包含在某個(gè)桶中。用戶可以設(shè)置桶的訪問(wèn)權(quán)限,控制哪些用戶可以訪問(wèn)桶中的對(duì)象。桶也可以配置為在特定的地理區(qū)域存儲(chǔ)數(shù)據(jù)。
- 對(duì)象(Object):對(duì)象主要由數(shù)據(jù)和元數(shù)據(jù)組成,是桶中的基本元素,類似于文件。每個(gè)對(duì)象都包含了文件本身的數(shù)據(jù)和一些元數(shù)據(jù)(比如文件的類型,創(chuàng)建日期等)。在S3中,對(duì)象被唯一地識(shí)別通過(guò)其在桶中的鍵(key),這類似于在文件系統(tǒng)中,一個(gè)文件被其路徑和文件名唯一識(shí)別。
我們可以把桶和對(duì)象的關(guān)系,類比為現(xiàn)實(shí)生活中的一個(gè)大倉(cāng)庫(kù)(Bucket)和倉(cāng)庫(kù)里的各種商品(Object)。倉(cāng)庫(kù)是用來(lái)存放各種商品的地方,而商品則是倉(cāng)庫(kù)中的基本單位。每個(gè)商品都有自己的標(biāo)簽(例如商品的名稱,生產(chǎn)日期等等),這就像是對(duì)象的元數(shù)據(jù)。而在倉(cāng)庫(kù)中,每個(gè)商品都有其固定的位置,這就像是對(duì)象在S3桶中的鍵。
在這個(gè)例子中,如果我們想找到特定的商品,我們首先需要知道它在哪個(gè)倉(cāng)庫(kù)(桶),然后根據(jù)商品的標(biāo)簽(元數(shù)據(jù))或者位置(鍵),就可以找到這個(gè)商品(對(duì)象)。
3.4 非關(guān)系型數(shù)據(jù)庫(kù)
其與關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別
課本P108
- 關(guān)系型數(shù)據(jù)庫(kù):如MySQL, PostgreSQL等,是基于關(guān)系模型的數(shù)據(jù)庫(kù),其中數(shù)據(jù)以表格的形式存儲(chǔ)。關(guān)系型數(shù)據(jù)庫(kù)強(qiáng)調(diào)數(shù)據(jù)的一致性和事務(wù)性,并遵循ACID原則(原子性,一致性,隔離性,持久性)。這類數(shù)據(jù)庫(kù)適合有復(fù)雜查詢需求的應(yīng)用,例如聯(lián)接、分組和聚合等。
- 非關(guān)系型數(shù)據(jù)庫(kù)(如SimpleDB, DynamoDB):非關(guān)系型數(shù)據(jù)庫(kù),也稱為NoSQL數(shù)據(jù)庫(kù),它們主要設(shè)計(jì)用于處理大規(guī)模數(shù)據(jù),可以提供高吞吐量、低延遲數(shù)據(jù)訪問(wèn)和存儲(chǔ)。這類數(shù)據(jù)庫(kù)通常不支持或只提供有限的事務(wù)功能,并且可能不遵循ACID原則,而是遵循BASE原則(基本可用性,軟狀態(tài),最終一致性)。例如,DynamoDB是一個(gè)鍵值存儲(chǔ)系統(tǒng),它以其彈性伸縮性和可預(yù)測(cè)的性能著名。
3.5 關(guān)系數(shù)據(jù)庫(kù)服務(wù)RDS
AWS為MySQL提供了一種稱為Amazon RDS的托管服務(wù)。它處理數(shù)據(jù)庫(kù)的許多日常管理任務(wù),如備份、打補(bǔ)丁和故障轉(zhuǎn)移等。用戶可以選擇在單個(gè)可用區(qū)內(nèi)運(yùn)行RDS實(shí)例,或者為了更高的可用性和容錯(cuò)能力,可以在多個(gè)可用區(qū)之間進(jìn)行復(fù)制。
RDS(Relational Database Service)是Amazon Web Services (AWS) 提供的一種關(guān)系型數(shù)據(jù)庫(kù)服務(wù)。MySQL則是一種開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。因此,你可以將MySQL看作是一種"產(chǎn)品",而RDS是一個(gè)"服務(wù)"。
在RDS服務(wù)中,你可以選擇不同類型的數(shù)據(jù)庫(kù)引擎,包括MySQL、PostgreSQL、MariaDB、Oracle、SQL Server等。因此,MySQL是RDS支持的數(shù)據(jù)庫(kù)之一。使用AWS的RDS服務(wù),用戶可以很方便地部署、擴(kuò)展和管理數(shù)據(jù)庫(kù)。RDS會(huì)為用戶處理很多數(shù)據(jù)庫(kù)運(yùn)維的工作,如備份、軟件補(bǔ)丁更新、故障轉(zhuǎn)移等。
簡(jiǎn)單地說(shuō),你可以直接下載并在自己的服務(wù)器上安裝運(yùn)行MySQL,這需要你自己處理所有的維護(hù)和管理工作。而如果你選擇使用AWS的RDS服務(wù)并選擇MySQL作為數(shù)據(jù)庫(kù)引擎,那么AWS會(huì)幫你處理許多運(yùn)維任務(wù),你只需要專注于使用數(shù)據(jù)庫(kù)。
3.6 內(nèi)容推送服務(wù)CloudFront
CDN,也就是內(nèi)容分發(fā)網(wǎng)絡(luò),是一種在不同地理位置的服務(wù)器上復(fù)制內(nèi)容,以便用戶能更快地訪問(wèn)到它的服務(wù)。通過(guò)使用CDN,你可以將你的內(nèi)容更靠近你的用戶,這樣他們獲取內(nèi)容的速度就會(huì)更快。
區(qū)別:
Amazon CloudFront和Azure CDN都是這種服務(wù)的例子。他們都可以把你的內(nèi)容(例如網(wǎng)站的靜態(tài)和動(dòng)態(tài)內(nèi)容,視頻流,API調(diào)用等)緩存在全球范圍內(nèi)的邊緣位置,以便更快地將內(nèi)容提供給用戶。
???這倆的區(qū)別是啥,Azure應(yīng)該是有緩存的
舉個(gè)例子,假設(shè)你在美國(guó)東部有一個(gè)網(wǎng)站,你的用戶遍布全球。如果沒(méi)有使用CDN,來(lái)自澳大利亞的用戶需要將請(qǐng)求發(fā)送到美國(guó)東部的服務(wù)器,然后再將結(jié)果返回。這會(huì)增加延遲。但是,如果你使用了CDN,你的網(wǎng)站內(nèi)容將被復(fù)制到全球各地的服務(wù)器,包括澳大利亞。因此,來(lái)自澳大利亞的用戶現(xiàn)在可以從他們附近的服務(wù)器獲取內(nèi)容,從而顯著減少延遲。
第四章 微軟的云計(jì)算服務(wù)Azure
4.1 五個(gè)部分
- 先來(lái)一個(gè)類比
- 計(jì)算服務(wù):你可以把 Azure 中的計(jì)算服務(wù)看作是租賃的電腦。就像你在網(wǎng)吧租用一臺(tái)電腦,你可以在上面做任何你想做的事情,比如瀏覽網(wǎng)頁(yè),編寫代碼,甚至運(yùn)行服務(wù)器。Azure 提供的計(jì)算服務(wù)就是讓你租用一臺(tái)云上的電腦,你可以在上面運(yùn)行你的應(yīng)用程序
- 存儲(chǔ)服務(wù):Azure 中的存儲(chǔ)服務(wù)就像是你租用的倉(cāng)庫(kù),你可以在里面存儲(chǔ)任何你想保存的東西。Azure 提供了 Blob(類似于一個(gè)大箱子,可以放任何東西),表存儲(chǔ)(像一個(gè)巨大的Excel表格,用來(lái)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)),隊(duì)列存儲(chǔ)(就像是一個(gè)排隊(duì)系統(tǒng),用來(lái)存儲(chǔ)待處理的消息),還有磁盤存儲(chǔ)(就像你電腦的硬盤,用來(lái)存儲(chǔ)各種文件和數(shù)據(jù))。
- Fabric 控制器:Fabric 控制器就像是一個(gè)智能的建筑管理員或者是樓宇經(jīng)理。它負(fù)責(zé)協(xié)調(diào)和管理云服務(wù)中的資源,如服務(wù)器、網(wǎng)絡(luò)和存儲(chǔ)。就像樓宇經(jīng)理決定哪個(gè)公司租用哪個(gè)辦公室,電力如何分配,網(wǎng)絡(luò)連接如何配置一樣,F(xiàn)abric 控制器負(fù)責(zé)配置和管理 Azure 服務(wù)實(shí)例的生命周期,分配和管理網(wǎng)絡(luò)和存儲(chǔ)資源。
- 內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN):Azure 的 CDN 就像是全球范圍的連鎖便利店。假設(shè)你在紐約有一個(gè)面包店,你的面包非常受歡迎,全世界的人都想吃。但是,讓一個(gè)在澳大利亞的人來(lái)紐約買面包不現(xiàn)實(shí)。所以,你決定在全世界各地開(kāi)設(shè)分店,這樣每個(gè)人都可以在他們附近的店鋪買到新鮮的面包。這就是 Azure CDN 做的事情,它將你的內(nèi)容(網(wǎng)站、視頻、軟件等)緩存到全球各地的節(jié)點(diǎn)上,當(dāng)用戶請(qǐng)求這些內(nèi)容時(shí),可以從最近的節(jié)點(diǎn)獲取,提高訪問(wèn)速度。
- Windows Azure Connect:Azure Connect 就像是一座橋,它可以把你的本地網(wǎng)絡(luò)和 Azure 的虛擬網(wǎng)絡(luò)連接在一起。假設(shè)你有兩個(gè)島嶼,一個(gè)在本地(你的本地網(wǎng)絡(luò)),另一個(gè)在云端(Azure 的虛擬網(wǎng)絡(luò))。你需要一個(gè)橋梁來(lái)把兩個(gè)島嶼連接起來(lái),這樣你就可以方便地在兩個(gè)島嶼之間通行。Azure Connect 就是這座橋梁,它讓你可以在本地網(wǎng)絡(luò)和云網(wǎng)絡(luò)之間安全、方便地傳輸數(shù)據(jù)。
- 具體定義
- 計(jì)算服務(wù)(Compute): 提供用于運(yùn)行應(yīng)用程序的虛擬機(jī)(VM),支持不同的操作系統(tǒng),和多種編程語(yǔ)言,可以按需擴(kuò)展。
- 存儲(chǔ)服務(wù)(Storage): 提供大規(guī)模、高可用、持久的云存儲(chǔ),包括 Blob(對(duì)象)存儲(chǔ),文件存儲(chǔ),隊(duì)列存儲(chǔ),表存儲(chǔ)和磁盤存儲(chǔ)。
- Fabric 控制器:主要用于部署、管理和監(jiān)控應(yīng)用。
- CDN (Content Delivery Network): 提供全球性內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù),通過(guò)緩存內(nèi)容到全球范圍內(nèi)的邊緣節(jié)點(diǎn),來(lái)優(yōu)化用戶獲取數(shù)據(jù)的速度。
- 網(wǎng)絡(luò)服務(wù)(Networking): 提供虛擬網(wǎng)絡(luò),負(fù)載均衡,VPN,流量管理等網(wǎng)絡(luò)功能,幫助您在云和本地環(huán)境之間建立安全和私有的連接。
4.2 三個(gè)實(shí)例
Azure 服務(wù)平臺(tái)為應(yīng)用程序提供了三種類型的角色(Role)來(lái)運(yùn)行代碼:Web Role、Worker Role 和 VM Role。這些角色定義了運(yùn)行在 Azure 服務(wù)平臺(tái)上的應(yīng)用程序?qū)嵗倪\(yùn)行環(huán)境。
- Web Role: 提供了一個(gè)自動(dòng)管理的、托管的IIS環(huán)境。開(kāi)發(fā)者可以發(fā)布ASP.NET、WCF服務(wù)或其他IIS兼容的應(yīng)用到Web Role中,用于處理用戶的HTTP/HTTPS請(qǐng)求。
- Worker Role: 提供了一個(gè)通用的Windows環(huán)境,開(kāi)發(fā)者可以在其中運(yùn)行任何類型的程序。Worker Role常常作為后臺(tái)處理任務(wù)的角色,比如處理來(lái)自Web Role的數(shù)據(jù),運(yùn)行腳本或者其他長(zhǎng)時(shí)間運(yùn)行的任務(wù)。
- VM Role: 提供了更高自由度的虛擬機(jī)環(huán)境,用戶可以按需自定義VM Role的Windows環(huán)境,安裝所需的應(yīng)用程序,以運(yùn)行特定的任務(wù)或服務(wù)。
- Web Role: Web Role就像是一家提供餐飲服務(wù)的餐廳。它可以接受和處理客戶端(用戶)的請(qǐng)求,類似于餐廳為餓了的人提供食物。在Azure中,Web Role是一種運(yùn)行在微軟公共云環(huán)境中的服務(wù),專門處理外部HTTP或HTTPS請(qǐng)求,就像在餐廳中處理訂單一樣。
- Worker Role: Worker Role就像是餐廳后廚的廚師,負(fù)責(zé)烹飪食物。在Azure中,Worker Role則是執(zhí)行在后臺(tái)運(yùn)行的任務(wù),如處理來(lái)自Web Role的數(shù)據(jù),運(yùn)行腳本或者其他長(zhǎng)時(shí)間運(yùn)行的任務(wù)。它們就像廚師,把原材料(數(shù)據(jù))加工成美食(有用的信息)。
- VM Role: VM Role就像是租用的公寓,你可以按照自己的需求裝修,放置家具。在Azure中,VM Role提供的是一種虛擬機(jī)環(huán)境,用戶可以按照自己的需求來(lái)配置這個(gè)環(huán)境,安裝所需要的軟件。這種角色讓用戶有更大的自由度來(lái)定義他們的云服務(wù)環(huán)境,就像你可以在租用的公寓中自由布置一樣。
4.3 數(shù)據(jù)結(jié)構(gòu)
- Blob:用于存儲(chǔ)大量的非結(jié)構(gòu)化數(shù)據(jù),如圖片、音頻、視頻或日志文件等。
- Table:提供了可擴(kuò)展的非關(guān)系型結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ),適用于存儲(chǔ)大量的非關(guān)系型數(shù)據(jù)。
- Queue:提供了可擴(kuò)展的消息隊(duì)列服務(wù),用于在應(yīng)用程序之間異步傳遞消息。
4.4 輪幅備份思想
不同的SQL Azure數(shù)據(jù)庫(kù)之間的同步是使用“輪幅式(hub-and-spoke)”模型
在這個(gè)模型中,中心節(jié)點(diǎn)(Hub)負(fù)責(zé)接收和分發(fā)數(shù)據(jù),邊緣節(jié)點(diǎn)(Spokes)則負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。
這里Hub是SQL Azure數(shù)據(jù)庫(kù),其他的Hub可以是SQL Azure數(shù)據(jù)庫(kù)、也可以是SQL Server數(shù)據(jù)庫(kù)
我們可以將這個(gè)模型比喻為航空公司的路線網(wǎng)絡(luò)。在這個(gè)例子中,航空公司的大型中樞機(jī)場(chǎng)(例如亞特蘭大機(jī)場(chǎng)或者阿姆斯特丹機(jī)場(chǎng))就像是中心節(jié)點(diǎn),其他較小的機(jī)場(chǎng)就像是邊緣節(jié)點(diǎn)。所有的航班(數(shù)據(jù))都會(huì)經(jīng)過(guò)中樞機(jī)場(chǎng)(Hub)然后被分發(fā)到不同的目的地(Spokes)。
在Azure的數(shù)據(jù)中心網(wǎng)絡(luò)中,也采用了類似的模型。其中的主數(shù)據(jù)中心(Hub)負(fù)責(zé)接收所有的用戶數(shù)據(jù),并將數(shù)據(jù)同步到各個(gè)邊緣數(shù)據(jù)中心(Spokes)。這樣,無(wú)論用戶在哪里訪問(wèn)數(shù)據(jù),都可以得到最快的響應(yīng)時(shí)間,因?yàn)樗麄兛偸菑淖罱臄?shù)據(jù)中心獲取數(shù)據(jù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-500610.html
而且,如果某個(gè)邊緣數(shù)據(jù)中心發(fā)生故障,用戶的數(shù)據(jù)仍然可以從主數(shù)據(jù)中心或者其他邊緣數(shù)據(jù)中心獲取,這樣確保了數(shù)據(jù)的可用性和一致性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-500610.html
到了這里,關(guān)于HHU云計(jì)算期末復(fù)習(xí)(上)Google、Amazon AWS、Azure的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!