體系結構複習 CH8 倉庫級計算機的並行
注:本章不做重點要求,簡略複習
8.1 倉庫級計算機
8.1.1 倉庫級計算機WSC
一般把作爲商用因特網基礎的超大型規模的集羣稱做倉庫級計算機(WSC),WSC的建設主要關心:
- 成本和性能
- 能耗效率
- 可靠性(冗餘備份)
- 網絡I/O
- 工作負載平衡
- 並⾏性
- 運⾏成本
- 規模
計算WSC的可靠性(通過軟件冗餘來屏蔽停用次數):
8.1.2 WSC和HPC對比
HPC是高性能計算機(集羣),HPC和WSC不同之處在於:
- HPC節點間網絡比WSC快的多,且程序獨立性強,通信頻繁
- HPC傾向於定製硬件,而WSC實用大衆化商用芯片降低成本
- HPC強調線程級並行或數據級並行,而WSC強調請求級並行
- HPC常常滿負載持續數週完成大規模運行作業,而WSC是面向併發請求的,通常不會滿負載
8.1.3 倉庫級計算機體系結構
機架是容納服務器、交換機等的外殼框架,一個機架上往往放置有多個服務器,服務器通過機架交換機通信;服務器陣列由多個機架排列成的二維陣列構成,陣列內部機架間通過陣列交換機通信
因此WSC訪存類型有三種:
- 本地訪問
- 機架內服務器訪問
- 陣列內服務器訪問
平均存儲器延遲是各種訪問方式(延遲)的加權平均值
8.2 雲計算
8.2.1 雲計算
雲計算是一種按使用量付費的服務模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務供應商進行很少的交互(美國國家標準與技術研究院定義)
一般把雲計算服務分成三種:
- IaaS(基礎設施即服務):以服務的形式提供虛擬硬件資源(如虛擬主機、存儲、⺴絡、數據庫管理等資源),用戶無需購買服務器、網絡設備、存儲設備,只需通過互聯網租賃即可搭建⾃己的應⽤系統,例如AWS、阿里雲VPS等
- PaaS(平臺即服務):提供應用服務引擎(如互聯⺴應用編程接口、運行平臺等),⽤戶基於該應⽤服務引擎,可以使用API構建該類應用,如GAE、SAE等
- SaaS(軟件即服務):用戶通過Internet來使用軟件,不必購買軟件,只需按需租用軟件服務即可,如Google Docs、Oracle CRM On Demand等
8.2.2 雲計算關鍵技術
- 虛擬化:硬件資源虛擬化、網絡設施虛擬化、應⽤虛擬化、桌⾯虛擬化等
- 分佈式存儲:Google GFS、Hadoop HDFS
- 並行編程:Hadoop MapReduce
- 數據管理:Google BigTable、Hadoop HBase
- 分佈式資源管理:Google Chubby
8.3 Hadoop MapReduce簡介
8.3.1 MapReduce基礎
MapReduce是Google提出的一個軟件架構,⽤於大規模數據集(⼤於1TB)的並行運算。當前的軟件實現是指定一個Map(映射)函數,⽤來把一組鍵值對映射成一組新的鍵值對;指定併發的Reduce(化簡)函數,⽤來保證所有映射的鍵值對中的每一個共享相同的鍵組
MapReduce系統主要由三個模塊組成:
- 客戶端用於將用戶撰寫的並行處理作業提交至Master節點
- 主節點(Master)自動將用戶作業分解爲Map任務和Reduce任務,並將任務調度到工作節點(Worker)
- 工作節點向master請求執⾏任務,同時多個⼯作節點組成的分佈式文件系統HDFS⽤於存儲輸入輸出數據
8.3.2 MapReduce工作流程
- MapReduce庫先把user program的輸入文件劃分爲M份(由輸入文件的大小和用戶定義的塊大小決定)
- master是負責調度的,爲空閒worker分配作業(Map作業或者Reduce作業
- 被分配了Map作業的worker,開始讀取對應分片的輸入數據,Map作業數量和split一一對應;Map作業從輸入數據中抽取出鍵值對,每一個鍵值對都作爲參數傳遞給map函數,map函數產生的中間鍵值對被緩存在內存中。
- 緩存的中間鍵值對會被定期寫入本地磁盤,而且被分爲R個區,R的大小是由用戶定義的,將來每個區會對應一個Reduce作業;這些中間鍵值對的位置會被通報給master,master負責將信息轉發給Reduce worker。
- master通知分配了Reduce作業的worker它負責的分區在什麼位置,當Reduce worker把所有它負責的中間鍵值對都讀過來後,先對它們進行排序,使得相同鍵的鍵值對聚集在一起。
- reduce worker遍歷排序後的中間鍵值對,對於每個唯一的鍵,都將鍵與關聯的值傳遞給reduce函數,reduce函數產生的輸出會添加到這個分區的輸出文件中。
- 當所有的Map和Reduce作業都完成了,master喚醒正版的user program,MapReduce函數調用返回user program的代碼。