天天看點

虛拟化與雲計算期末複習

1.什麼是雲計算?

雲=海量存儲+規模計算。

雲計算是一種按使用量付費的模式,提供可用的,便捷的,按需的網絡通路,進入可配置的資源池(包括伺服器,存儲,網絡,應用程式,服務),這些資源能夠快速提供,隻需要投入少量的管理工作,或與服務商進行很少的互動。

2.雲計算的基本特征

(1)按需,自服務:根基自己的實際需求請求雲服務時間和容量,無需與雲服務商進行互動。

(2)泛在網絡通路:雲端服務通過網際網路向客戶提供。

(3)資源池:大規模資料中心的計算,存儲和網絡資源。

(4)快速彈性服務:雲端服務内容可自動,快速滿足客戶的彈性請求增加或減少。

(5)服務可計量:雲服務提供商優化管理利用效率,并向客戶按照一定的标準收費

3.雲計算的三種模式

(1)軟體即服務:使用者直接使用雲服務商提供的基于雲基礎設施上的應用程式。如Gmail

(2)平台即服務:使用者使用雲服務商提供的工具和庫建立開發雲應用程式,如goole app

(3)基礎架構即服務:直接提供計算、存儲、網絡等基礎計算資源,如阿裡雲

4.雲計算部署模型

(1)公有雲:雲資源由雲服務商所擁有,并允許公衆使用。

(2)私有雲:雲資源僅供單個組織内部成員使用,資源管理者可以是組織本身也可以是第三方。

(3)社群雲:通過對區域内部各種計算能力進行統一服務形式的整合,結合社群内的使用者需求共性,實作面向區域使用者需求的雲計算服務模式。

(4)混合雲:融合了公有雲和私有雲,由于安全性和控制原因,并非所有企業資訊都能放在公有雲上,這樣大部分應用雲計算的企業将會使用混合雲模式。

5.SDN(software define networking)軟體定義網絡:

SDN是Emulex網絡一種新型網絡創新架構,是網絡虛拟化的一種實作方式,其核心技術OpenFlow通過将網絡裝置控制面與資料面分離開來,進而實作了網絡流量的靈活控制,使網絡作為管道變得更加智能。

SDN(Software Defined Network)即軟體定義網絡,是一種網絡設計理念,或者一種推倒重來的設計思想。隻要網絡硬體可以集中式軟體管理,可程式設計化,控制轉發層面分開,則可以認為這個網絡是一個SDN網絡。

(1)實作了資料平面和控制平面的分離

(2)提供了可控制資料平面的可程式設計接口

(3)實作中心式控制和更進階的抽象能力,使得網絡系統控制變得簡單。

6.多點傳播排序

先入先出排序:從同一發送方發出的多點傳播消息以發送順序被接收,不考慮不同發送方發出的多點傳播消息的順序,

因果排序:存在因果關系的多點傳播消息必須因果順序被接收方傳遞,因果排序一定是先入先出排序。

全序排序:所有節點按照相同順序接收消息。

7異步系統一緻性問題

異步系統的一緻性問題是不可解的問題,因為異步系統中無法區分一個節點是發生了故障還是隻是非常慢而已。

(1)n個節點

(2)每個節點p:

輸入變量Xp:初始化為0或者1

輸出變量Yp :僅被指派一次,0或者1.

(3)一緻性問題,是否能設計分布式協定,最終使得:

要麼所有節點都設定其輸出變量為0。

要麼所有節點都設定其輸出變量為1.

8.為什麼基于“推”的Gossip傳播比基于”拉”的慢?

在第r輪,K個臨近節點

P(r):第r輪未被感染的機率。

基于拉的:P(r+1)=p(r)*p(r)^k=p^k+1(r+1)

基于推的:P(r+1)=p(r)*(1-k/n)^n(1-p(r))

很明顯基于推的比基于了拉的收斂的慢,基于“推”的Gossip傳播比基于”拉”的慢。

9時間戳:

Lamport時間戳:目的:為每個事件配置設定邏輯時間戳,時間戳滿足先後順序。(不能識别并發事件)

Vector時間戳:每個處理節點使用整型向量時間戳。(遵循發生順序,能識别并發事件)

10.Paxos協定

(1)多輪->每輪三階段

(2)廣泛使用于異步系統

(3)提供安全性和最終活性:

安全:任何了倆個節點不會做出不同的決定,壞事不會發生

最終活性:如果一切順利一段時間後,很可能使各個節點最終達成一緻。(不做保證,好事可能會最終發生)

  1. 每一輪都有計數id
  2. 不要求時間嚴格的同步

    如果你正處在第J輪,卻收到第J+1輪的消息,那麼放棄一切操作,直接進入第j+1輪,使用逾時機制。

  3. 每輪被分為三個階段(同樣是異步)

    階段一:選舉:選取一個leader(id最大的超過一半節點ok)。

    階段二:提案:leader多點傳播一個提案,其他節點收到消息後确認。

    階段三:決定:leader多點傳播最終決定。

11.hadoop排程問題:FIFO排程器和Fair排程器

(1)FIFO是hadoop預設的排程算法

它支援5個優點等級,任務按照優先等級和送出時間順序排序。第一步先選擇最高等級的任務清單,第二步選擇該清單下最早送出的任務。選擇任務後将map任務排程到離目标最近的Datanode上。

任務排程的目标位置:提高資料的本地行以減少通信時間。缺點是當出現大任務時短任務響應時間過慢。

(2) Fair排程器 :設計動機是,在多使用者共享的hadoop環境下,使得短任務也可以獲得較快的響應時間。

  1. 任務分組形成pools
  2. 每個pools被配置設定一個最低資源配置設定量(按照一定的配置設定政策配置設定)
  3. 多餘的資源被平均配置設定給各個資源pool

新任務送出時,新到的任務被排程到空閑機器上。

為保證每個任務都得到相應的資源,Fair排程器使用倆個計時器:

Tmin:用于保證得到最小資源配置設定量

Tfair : 用于保證得到公平資源配置設定量(Tmin<Tfair)

如果在時間Tmin到期之前不能得到最低資源配置設定量,則強制停止其他pool中的某任務。重新配置設定資源。

強制停止任務時,如果在時間Tfair到期之前不能得到公平資源配置設定量。則強制停止更多任務,重新配置設定資源。

強制停止任務時,一般選擇超過資源配置設定額度的pool最後被送出執行的任務,以減少計算的浪費。

Fair排程器的問題:嚴格的fair排程器的實作會降低資料本地行。同時因為reduce的任務需要等待map的輸出結果才能開始運作,長時間的等待會導緻資源的空閑,是以導緻資源的浪費。

12.FAT_TREE胖樹

三層:核心層 聚合層 伺服器層

倆種擴充網絡拓撲規模的方法:1.增加層數2.增加每個交換機的端口數

假設每個交換機96個端口

則伺服器數:48*48*96

聚合層交換機數:48*2*96

核心層交換機數:48*48*96/96

13. GFS是一個可擴充的分布式檔案系統,用于大型的、分布式的、對大量資料進行通路的應用。它運作于廉價的普通硬體上,并提供容錯功能。它可以給大量的使用者提供總體性能較高的服務。

  (假設與目标:

硬體出錯是正常而非異常,主要用于程式處理批量資料,而非與使用者的小量和随機讀寫,需要存儲大尺度的檔案)。

GFS将整個系統的節點分為三類角色:Client(用戶端)、Master(主伺服器)和Chunk Server(資料塊伺服器)

Client用戶端:應用程式通路接口,與主伺服器和資料塊伺服器通信。

Master主伺服器:管理節點,控制中樞,存儲中繼資料

ChunkServer資料塊伺服器:以普通linux檔案的形式存儲資料。

實作機制:用戶端首先通路Master節點,擷取互動的chunk server資訊,然後通路這些chunk server,完成資料存取工作。這種設計方法實作了控制流和資料流分離。

Client與master之間隻有控制流,而無資料流,極大的降低了Master的負載。

Client與chunk server 之間直接傳輸資料流,同時由于檔案被分成多個chunk 進行分布式存儲,client可以同時通路多個chunk server ,進而使整個系統的i/o高度并行,系統整體性能得到提高。

最小化主伺服器參與度:

資料傳輸和控制流分離,提高網絡利用效率。

資料塊大小64mb大資料快能減少尋址開銷;能保持較長時間的tcp連接配接通信,減少網絡開銷;減少主伺服器上的中繼資料存儲量。

設計特點:

1采用中心伺服器模式

2資料副本提高可靠性(預設3副本)

3在使用者态下實作、

4隻提供專用接口

publicvoid map(Object key, Text value, Context context) throws IOException,InterruptedException {

            StringTokenizer stk = newStringTokenizer(value.toString(),delimiters);

            while(stk.hasMoreTokens()){

                String e =stk.nextToken().trim().toLowerCase();

                if(stopWords.contains(e) ==false){

                    context.write(newText(e),new IntWritable(1));

                }

            }

        }

publicvoid reduce(Text key, Iterable

            int sum = 0;

            for(IntWritable e : values){

                sum += e.get();

            context.write(key, newIntWritable(sum));

packageorg.jediael.hadoopdemo.wordcount; 

importjava.io.IOException; 

importjava.util.StringTokenizer; 

importorg.apache.hadoop.conf.Configuration; 

importorg.apache.hadoop.fs.Path; 

importorg.apache.hadoop.io.IntWritable; 

importorg.apache.hadoop.io.LongWritable; 

importorg.apache.hadoop.io.Text; 

importorg.apache.hadoop.mapreduce.Job; 

importorg.apache.hadoop.mapreduce.Mapper; 

importorg.apache.hadoop.mapreduce.Reducer; 

importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat; 

importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat; 

importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 

import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; 

publicclass WordCount { 

    public static class WordCountMapextends 

            Mapper

        private final IntWritable one = newIntWritable(1); 

        private Text word = new Text(); 

        public void map(LongWritable key, Textvalue, Context context) 

                throws IOException,InterruptedException { 

            String line =value.toString(); 

            StringTokenizer token = newStringTokenizer(line); 

            while (token.hasMoreTokens()){ 

               word.set(token.nextToken()); 

                context.write(word, one); 

            } 

        } 

    } 

    public static class WordCountReduceextends 

            Reducer

        public void reduce(Text key,Iterable

                Context context) throwsIOException, InterruptedException { 

            int sum = 0; 

            for (IntWritable val : values){ 

                sum += val.get(); 

            context.write(key, newIntWritable(sum)); 

    public static void main(String[] args)throws Exception { 

        Configuration conf = newConfiguration(); 

        Job job = new Job(conf); 

       job.setJarByClass(WordCount.class); 

       job.setJobName("wordcount"); 

        job.setOutputKeyClass(Text.class); 

       job.setOutputValueClass(IntWritable.class); 

       job.setMapperClass(WordCountMap.class); 

       job.setReducerClass(WordCountReduce.class); 

       job.setInputFormatClass(TextInputFormat.class); 

       job.setOutputFormatClass(TextOutputFormat.class); 

        FileInputFormat.addInputPath(job, newPath(args[0])); 

        FileOutputFormat.setOutputPath(job, newPath(args[1])); 

        job.waitForCompletion(true); 



繼續閱讀