摘要:所有你搞不懂的技術術語、專有名詞背后,都會有一個不是技術領域的需求,這個需求才是你需要首先了解的“根本性需求”,而只有你認識到這些“非技術領域”的問題(或者叫需求),才能算是對這個領域真正開始入門了。
所有你搞不懂的技術術語、專有名詞背后,都會有一個不是技術領域的需求,這個需求才是你需要首先了解的“根本性需求”,而只有你認識到這些“非技術領域”的問題(或者叫需求),才能算是對這個領域真正開始入門了。
我們平時一直在口頭談起的“云計算”和“虛擬化”究竟指的是什么呢?
簡單來說,云計算是一個概念,而不是具體技術。虛擬化是一種具體技術,指把硬件資源虛擬化,實現隔離性、可擴展性、安全性、資源可充分利用等特點的產品。
CPU虛擬化的技術包括Intel的VT-x,AMD的AMD-V。虛擬化的軟件有VMWare,Hyper-V,Xen,KVM,OpenVZ等
目前云計算,大多是依賴虛擬化,通過把多臺服務器實體虛擬化后,構成一個資源池,實現共同計算,共享資源。也就是現在所謂“云計算”,其實這個詞提出來之前,過去的“服務器集群”就已經實現這些功能了,只不過沒有現在那么先進而已。
那么,虛擬化技術與現流行的大數據Hadoop技術有什么區別,解決的是一類問題么?
虛擬化主要解決資源利用率,資源提供的自動擴展。有服務器(compute)虛擬化(kvm/xen/lxc等),存儲虛擬化,網絡虛擬化。原來的數據中心服務器整合就利用了大量的虛擬化。現在的云計算模式也以虛擬化技術為基礎,特別是IAAS層。但云計算本質是效用計算,按需付費,因此SAAS也可以不基于虛擬化來實現。
Hadoop就是用來解決google類似的大數據的分析引入的計算框架。(mapreduce和分布式存儲)。你可以把這些東西放在虛擬化環境里的。
虛擬化技術是否都適用于并行計算,分布式大數據存儲和檢索?
這里得區分是“什么的”虛擬化。如上,有服務器虛擬化,存儲虛擬化,網絡虛擬化。現在流行軟件定義網絡,軟件定義存儲,廣義的說,這也算是虛擬化技術的應用。
并行計算是一種計算模式。可以基于虛擬化技術來實現。lerlang就是采用vm的方式來表示多進程。但是也可以在硬件上實現。
虛擬化技術和云計算這兩個概念對應的現實環境中的問題是不同的。
虛擬化技術(尤其是桌面虛擬化),主要的目的是:
提高硬件資源的利用率。
提高運維、管理的效率。
云計算(尤其是Hadoop)的主要目的是:
在合理的時間內,對海量的數據進行分析,找出背后的規律和趨勢。
對于這種概念,最忌諱的就是死記硬背,因為那樣你很快就會被一堆的專有名詞、英文縮寫所淹沒。
云計算是一種服務;虛擬化和分布式系統都是用來實現云計算的關鍵技術之一。
云計算通常可能從兩個方面理解:
一是將IT作為一種服務的業務模式,如AWS、阿里云,其目標是讓IT未來像水和電一樣隨時隨地、簡單方便的使用,并按使用量收費;
二是IT自身的一種演進和優化,其目標是提高效率和降低成本,或者說用一種成本可接受的方式解決越來越復雜的業務問題,例如海量數據的存儲和分析、超高并發訪問(如雙11或12306)等。
云計算可以理解為一種租借式的服務,即你可以對IT系統內部的原理什么都不懂,也不需要買到手,但是隨時可以使用公共的IT資源為自己服務,比如baidu,比如QQ,比如163郵箱。
虛擬化作為一種技術,可以幫助云計算實現以上目標:資源分配更加靈活、資源利用率更高。同時技術成熟、對上層應用也基本不影響,因此被廣泛使用,甚至在很多時候虛擬化成為了云計算的代名詞。
簡單講解之后,下面我們來深入了解一下云計算:
云計算 (cloud computing)是基于互聯網的相關服務的增加、使用和交付模式,通常涉及通過互聯網來提供動態易擴展且經常是虛擬化的資源。云是網絡、互聯網的一種比喻說法。過去在圖中往往用云來表示電信網,后來也用來表示互聯網和底層基礎設施的抽象。因此,云計算甚至可以讓你體驗每秒10萬億次的運算能力,擁有這么強大的計算能力可以模擬核爆炸、預測氣候變化和市場發展趨勢。用戶通過電腦、筆記本、手機等方式接入數據中心,按自己的需求進行運算。
云計算的特點:
(1) 超大規模
“云”具有相當的規模,Google云計算已經擁有100多萬臺服務器, Amazon、IBM、微軟、Yahoo等的“云”均擁有幾十萬臺服務器。企業私有云一般擁有數百上千臺服務器。“云”能賦予用戶前所未有的計算能力。
(2) 虛擬化
云計算支持用戶在任意位置、使用各種終端獲取應用服務。所請求的資源來自“云”,而不是固定的有形的實體。應用在“云”中某處運行,但實際上用戶無需了解、也不用擔心應用運行的具體位置。只需要一臺筆記本或者一個手機,就可以通過網絡服務來實現我們需要的一切,甚至包括超級計算這樣的任務。
(3) 高可靠性
“云”使用了數據多副本容錯、計算節點同構可互換等措施來保障服務的高可靠性,使用云計算比使用本地計算機可靠。
(4) 通用性
云計算不針對特定的應用,在“云”的支撐下可以構造出千變萬化的應用,同一個“云”可以同時支撐不同的應用運行。
(5) 高可擴展性
“云”的規模可以動態伸縮,滿足應用和用戶規模增長的需要。
(6) 按需服務
“云”是一個龐大的資源池,你按需購買;云可以像自來水,電,煤氣那樣計費。
(7) 極其廉價
由于“云”的特殊容錯措施可以采用極其廉價的節點來構成云,“云”的自動化集中式管理使大量企業無需負擔日益高昂的數據中心管理成本,“云”的通用性使資源的利用率較之傳統系統大幅提升,因此用戶可以充分享受“云”的低成本優勢,經常只要花費幾百美元、幾天時間就能完成以前需要數萬美元、數月時間才能完成的任務。
云計算可以徹底改變人們未來的生活,但同時也要重視環境問題,這樣才能真正為人類進步做貢獻,而不是簡單的技術提升。
(8) 潛在的危險性
云計算服務除了提供計算服務外,還必然提供了存儲服務。但是云計算服務當前壟斷在私人機構(企業)手中,而他們僅僅能夠提供商業信用。對于政府機構、商業機構(特別像銀行這樣持有敏感數據的商業機構)對于選擇云計算服務應保持足夠的警惕。一旦商業用戶大規模使用私人機構提供的云計算服務,無論其技術優勢有多強,都不可避免地讓這些私人機構以“數據(信息)”的重要性挾制整個社會。對于信息社會而言,“信息”是至關重要的。另一方面,云計算中的數據對于數據所有者以外的其他用戶云計算用戶是保密的,但是對于提供云計算的商業機構而言確實毫無秘密可言。所有這些潛在的危險,是商業機構和政府機構選擇云計算服務、特別是國外機構提供的云計算服務時,不得不考慮的一個重要的前提。
講完了云計算,我們再來好好說說虛擬化。
虛擬化是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
虛擬化使用軟件的方法重新定義劃分IT資源,可以實現IT資源的動態分配、靈活調度、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務于各行各業中靈活多變的應用需求。
它是一個廣義的術語,是指計算元件在虛擬的基礎上而不是真實的基礎上運行,是一個為了簡化管理,優化資源的解決方案。如同空曠、通透的寫字樓,整個樓層沒有固定的墻壁,用戶可以用同樣的成本構建出更加自主適用的辦公空間,進而節省成本,發揮空間最大利用率。這種把有限的固定的資源根據不同需求進行重新規劃以達到最大利用率的思路,在IT領域就叫做虛擬化技術。
虛擬化技術可以擴大硬件的容量,簡化軟件的重新配置過程。CPU的虛擬化技術可以單CPU模擬多CPU并行,允許一個平臺同時運行多個操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
虛擬化技術與多任務以及超線程技術是完全不同的。多任務是指在一個操作系統中多個程序同時并行運行,而在虛擬化技術中,則可以同時運行多個操作系統,而且每一個操作系統中都有多個程序運行,每一個操作系統都運行在一個虛擬的CPU或者是虛擬主機上;而超線程技術只是單CPU模擬雙CPU來平衡程序運行性能,這兩個模擬出來的CPU是不能分離的,只能協同工作。
目前來講虛擬化主要常用兩個核心技術:服務器虛擬化,與應用虛擬化。
目前來講分布式系統主要用到的兩個核心技術:分布式存儲,與分布式計算。
我認為對虛擬化技術最好的定義就是可以讓IT系統的物理拓撲圖與邏輯拓撲圖無關,即解耦。
我們暫時以商用虛擬化系統vmware舉例
為了實現拓撲解耦,它做的第一點就是讓一臺機器可以同時跑多個操作系統,即虛擬機,而且虛擬機還可以在物理機間來回轉移,高可用,這樣我們的操作系統就從物理機上徹底解放出來了,你可以把同一個虛擬機隨時放到其他物理機上,實現了對硬件的高效資源利用,和系統的高度靈活,解除了大量人工勞動,便于實現大規模系統的方便管理,這種就是服務器虛擬化(vSphere)。
光系統分開還不行,你有時還需要各種方式訪問虛擬機系統,于是你就會是用遠程桌面等方式去訪問這些后臺的虛擬機,這種就是應用虛擬化(view)。
當然還有網絡虛擬化,存儲虛擬化等各種其他虛擬化技術正在慢慢成長,不過相對于前兩者無論是商用還是開源,都還不太成熟,暫不討論。
我認為對分布式系統比較合適的定義是把所有IT資源看成為一個整體來使用,而不是去獨立的看某個機器某個系統,即資源池。
我們暫時以開源Hadoop為例
為實現將IT資源變成整體,它要做到的第一點就是將一個巨大的文件拆開放在多個地方,你可以用一大堆很普通的計算機用網絡連在用來存放這一個巨型文件,這樣即使很多很小硬盤的機器也可以通過連在一起當成一個很大的存儲空間來用,這種就是分布式存儲(HDFS)。
光文件存放合在一起不行,計算能力也要合在一起,所以它還要滿足一個任務分給多個物理機來處理,這樣即便一堆老破電腦,通過這種方式連在一起,只要足夠多,也能當超級計算機用,這種就使分布式計算(MapReduce)。
當然Hbase等其他的技術也在逐漸成熟,總的來講都是為了解決建立巨型資源池需要的技術。
由此可以看出虛擬化主要是把大塊拆成小塊兒,分布式系統主要是把小塊組合成大塊兒,IT資源經過這樣的揉碎再組合,變成了一個十分靈活的系統,在這幾個基本技術的基礎上,在通過某種調度和經營,就可以實現云計算的服務模式了。
最后說句題外話,基本上所有你搞不懂的技術術語、專有名詞背后,都會有一個不是技術領域的需求,這個需求才是你需要首先了解的“根本性需求”,而只有你認識到這些“非技術領域”的問題(或者叫需求),才能算是對這個領域真正開始入門了。執著于純技術層面,其實無法真正的解決問題。