什么是云計算?
1.1 云計算概念
云計算是最近幾年才興起的概念,但是這樣的需求其實早都有了,現階段廣為接受的是美國國家標準與技術研究院(NIST)定義:云計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務供應商進行很少的交互。
云計算最基本的特性是:“按使用量付費”、“資源共享池”和多租戶隔離。
1.2 云計算特點
超大規模
云具有相當的規模,Google 云計算已經擁有 100 多萬臺服務器, Amazon、IBM、微軟、Yahoo 等的云均擁有幾十萬臺服務器。企業私有云一般擁有數百上千臺服務器。云能賦予用戶前所未有的計算能力。
虛擬化
云計算支持用戶在任意位置、使用各種終端獲取應用服務。所請求的資源來自云,而不是固定的有形的實體。應用在云中某處運行,但實際上用戶無需了解、也不用擔心應用運行的具體位置。只需要一臺筆記本或者一個手機,就可以通過網絡服務來實現我們需要的一切,甚至包括超級計算這樣的任務。
高可靠性
云使用了數據多副本容錯、計算節點同構可互換等措施來保障服務的高可靠性,使用云計算比使用本地計算機可靠。
通用性
云計算不針對特定的應用,在云的支撐下可以構造出千變萬化的應用,同一個云可以同時支撐不同的應用運行。
高可擴展性
云的規模可以動態伸縮,滿足應用和用戶規模增長的需要。
按需服務
云是一個龐大的資源池,你按需購買;云可以像自來水,電,煤氣那樣計費。
極其廉價
由于云的特殊容錯措施可以采用極其廉價的節點來構成云,云的自動化集中式管理使大量企業無需負擔日益高昂的數據中心管理成本,云的通用性使資源的利用率較之傳統系統大幅提升,因此用戶可以充分享受云的低成本優勢,經常只要花費幾百美元、幾天時間就能完成以前需要數萬美元、數月時間才能完成的任務。
潛在的危險性
云計算服務除了提供計算服務外,還必然提供了存儲服務。但是云計算服務當前壟斷在私人機構(企業)手中,而他們僅僅能夠提供商業信用。對于政府機構、商業機構(特別像銀行這樣持有敏感數據的商業機構)對于選擇云計算服務應保持足夠的警惕。一旦商業用戶大規模使用私人機構提供的云計算服務,無論其技術優勢有多強,都不可避免地讓這些私人機構以數據(信息)的重要性挾制整個社會。
對于信息社會而言,信息是至關重要的。另一方面,云計算中的數據對于數據所有者以外的其他用戶云計算用戶是保密的,但是對于提供云計算的商業機構而言確實毫無秘密可言。所有這些潛在的危險,是商業機構和政府機構選擇云計算服務、特別是國外機構提供的云計算服務時,不得不考慮的一個重要的前提。
1.3 云計算分類
公有云:只有使用權,使用的時候進行按需付費。但數據放在別人家。數據安全沒有保障。而且銀行不會使用公有云,金融行業不要使用公有云。公有云的核心屬性是共享資源服務。
私有云:自己的機房搭建的云,私有云有局限性,資源固定;數據比較安全。私有云的核心屬性是專有資源。
混合云:主要任務放到私有云,臨時需要時利用混合云,它將公有云和私有云進行混合匹配,以獲得最佳的效果,這種個性的解決方案,達到二既省錢又安全的目的。
1.4 云計算分層
云計算也是層的,大概有以下幾種:
傳統 IT
基本所有的都需要自行管理,比如:網絡、存儲、服務器、虛擬化,操作系統、中間件、運行環境、數據、應用等。
IaaS
IaaS,Infrastructure-as-a-Service 中文名稱為基礎設施即服務。 主要作用是提供虛擬機或者其他資源作為服務提供給用戶。
PaaS
PaaS,Platform-as-a-Service 中文名稱為平臺即服務。如果以傳統計算機架構中 “硬件+操作系統/開發工具+應用軟件” 的觀點來看待,那么云計算的平臺層應該提供類似操作系統和開發工具的功能。
實際上也的確如此,PaaS 定位于通過互聯網為用戶提供一整套開發、運行和運行應用軟件的支撐平臺。就像在個人計算機軟件開發模式下,程序員可能會在一臺裝有 Windows 或 Linux 操作系統的計算機上使用開發工具開發并部署應用軟件一樣。PaaS 某些時候也叫做中間件,主要作用是提供一個開發和運行平臺給用戶。
SaaS
SaaS,Software-as-a-Service 中文名稱為軟件即服務。簡單地說,就是一種通過互聯網提供軟件服務的軟件應用模式。在這種模式下,用戶不需要再花費大量投資用于硬件、軟件和開發團隊的建設,只需要支付一定的租賃費用,就可以通過互聯網享受到相應的服務,而且整個系統的維護也由廠商負責。
如果要用一句話來概括 IaaS、PaaS 和 SaaS 的話,那就是:如果把云計算比喻成一部手機,那么 IaaS 就是硬件,你要自己寫代碼研發系統才能用;PaaS 是手機系統,你要實現什么功能還是要裝各種軟件;SaaS 就是硬件+系統+軟件,你要干什么一句話就能解決。
什么是虛擬化?
2.1 虛擬化概念
虛擬化是通過軟件手段對計算機硬件資源鏡像整合管理和再分配的一種技術,常用的手段有基于虛擬機的虛擬化和基于容器的虛擬化。
2.2 虛擬化技術分類
2.2.1 按應用場景分類
操作系統虛擬化
應用程序虛擬化
桌面應用虛擬化
存儲虛擬化
網絡虛擬化
2.2.2 按照應用模式分類
一對多:其中將一個物理服務器劃分為多個虛擬服務器,這是典型的服務器整合模式。
多對一:其中整合了多個虛擬服務器,并將它們作為一個資源池,這是典型的網格計算模式。
多對多:將前兩種模式結合在一起。
2.2.3 按硬件資源調用模式分類
全虛擬化
全虛擬化,虛擬化操作系統與底層硬件完全隔離。由中間的 Hypervisor 層轉化虛擬化客戶操作系統對底層硬件的調用代碼,全虛擬化無需更改客戶端操作系統,并兼容性好。典型代表有:Vmware Workstation、KVM。
半虛擬化
半虛擬化,在虛擬客戶操作系統中加入特定的虛擬化指令,通過這些指令可以直接通過 Hypervisor 層調用硬件資源,免除有 Hypervisor 層轉換指令的性能開銷。半虛擬化的典型代表 Microsoft Hyper-V、Vmware 的 vSphere。
注:針對 IO 層面半虛擬化要比全虛擬化要好,因為磁盤 IO 多一層必定會慢。一般說 IO 就是網絡 IO 和磁盤 IO,因為這兩個相對而言是比較慢的。
2.3 基于虛擬機(Hypervisor-based)的虛擬化
它通過一個軟件層的封裝,提供和物理硬件相同的輸入輸出表現。實現了操作系統和計算機硬件的解耦,將 OS 和計算機間從 1 對 1 變成了多對多(實際上是 1 對多)的關系。該軟件層稱為虛擬機管理器(VMM / Hypervisor),它可以直接運行在裸機上(Xen、VMware EXSi),也可以運行在操作系統上(KVM、VMware Workstation)。這項技術已經很成熟了,(發展了40 多年),但仍然存在以下幾個問題:
在虛擬機上運行了一個完整的操作系統(GuestOS),在其下執行的還有虛擬化層和宿主機操作系統,一定比直接在物理機上運行相同的服務性能差;
有 GuestOS 的存在,虛擬機鏡像往往有幾個 G 到幾十個 G,占用的存儲空間大,便攜性差;
想要使用更多硬件資源,需要啟動一臺新的虛擬機。要等待 GuesOS 啟動,可能需要幾十秒到幾分鐘不等。
實際使用場景中,我們使用虛擬化技術其實是為了按需分配資源來完成服務的部署和使用,同時對服務所依賴的環境進行隔離,不被其它服務感知或干擾。為此啟動一個 GuestOS 并不是必需的,為什么不考慮讓多個虛擬機公用一個操作系統內核,只隔離開服務運行環境同時控制服務使用的系統資源呢?基于容器的虛擬化就是這樣一種技術。
2.4 基于容器的虛擬化
容器是沒有 GuestOS 的輕量級虛擬機,多個容器共享一個 OS 內核,容器中包含需要部署的應用和它依賴的系統環境,容器大小通常只有幾十到幾百 MB。由于共享操作系統內核,所以容器依賴于底層的操作系統,各個操作系統大都有自己的容器技術和容器工具。
Docker 是一個 Linux 容器管理工具,隨著 Docker 的興起,Linux 容器技術也是當下最時興的容器虛擬化技術。Linux 容器工具有很多,OpenVZ、LXC、Docker、Rocket、Lmctfy 等等,大都是基于 Linux 內核提供的兩個機制:Cgroups(實現資源按需分配)和 Namespace(實現任務隔離)。
2.5 二種虛擬化技術的區別
虛擬機技術已經發展了很多年,虛擬機和虛擬化層間的接口、虛擬機鏡像格式等都已經標準化了。相應的管理工具、分布式集群管理工具都有比較完善的解決方案,而容器最近幾年才興起,配套技術和標準還在完善中;
虛擬機由于有 GuestOS 存在,可以和宿主機運行不同 OS,而容器只能支持和宿主機內核相同的操作系統;
虛擬機由于有 VMM 的存在,虛擬機之間、虛擬機和宿主機之間隔離性很好。而容器之間公用宿主機的內核,共享系統調用和一些底層的庫,隔離性相對較差;
容器比虛擬機明顯更輕量級,對宿主機操作系統而言,容器就跟一個進程差不多。因此容器有著更快的啟動速度(秒級甚至更快),更高密度的存儲和使用(鏡像小)、更方便的集群管理等優點。同時由于沒有 GuestOS 存在,在容器中運行應用和直接在宿主機上幾乎沒有性能損失,比虛擬機明顯性能上有優勢。
云計算和虛擬化差別
對云計算和虛擬化差別的描述,有一句經典的話:虛擬化是云計算構建資源池的一個主要方式。只要這句話你理解透了就知道他倆的關系了。
簡單來說,云計算是一個概念,而不是具體技術。虛擬化是一種具體技術,指把硬件資源虛擬化,實現隔離性、可擴展性、安全性、資源可充分利用等特點的產品。
目前云計算,大多是依賴虛擬化,通過把多臺服務器實體虛擬化后,構成一個資源池,實現共同計算,共享資源。也就是現在所謂云計算,其實這個詞提出來之前,過去的服務器集群就已經實現這些功能了,只不過沒有現在那么先進而已。
3.1 各領域代表的產品
云計算架構的開源產品是 OpenStack,OpenStack 是一個由 NASA 和 Rackspace 合作研發并發起的,以 Apache 許可證授權的自由軟件和開放源代碼項目。
虛擬機的虛擬化:VM 的商業付費 vSphere 或者開源的 KVM。
容器的虛擬化:Docker。
3.2 OpenStack
Openstack 是眾多技術的組合體,有涉及網絡組件的 Neutron,有涉及 Dashboard 的 Horizon,也有涉及計算資源分配的 Nova。
虛擬化技術只是其中一個涉及到資源池構建的方式。當然你也可以用其它方式構建資源池,比如物理機還有容器。
Openstack 經過幾年十幾個版本的更迭,已經擁有了 Keystone、Nova、Neutron、Cinder、Glance、Swift、Heat、Ceilometer 等等組件,比較完整的提供了一個云平臺應有的各個模塊。
3.3 在云計算中,不同層的選型
選取基于虛擬機的虛擬化呢,還是基于容器的虛擬化。早期由于容器技術的不完善,云計算只有虛擬機這一種選擇。
隨著現在容器技術興起,基于容器的虛擬化性能更高,交付速度快,方便管理,而且資源利用率高,看起來是比虛擬機更好的方案。但是它現有的兩個比較大的缺點(隔離性不夠強、操作系統依賴性)讓他無法完全替代 VM,對于 SaaS 用戶和部分 PaaS 用戶而言這兩個缺點可能不那么明顯。現階段 Container 和云計算主要結合的場景也是在 SaaS 和 PaaS 中,事實上大多數 SaaS 和 PaaS 服務提供商都使用了容器技術。
但是對于 IaaS 的用戶來說,他們租用的是基礎設施。上面承載著他們自己運行的系統和服務,隔離性不強意味著安全性和可信性不高。在這種情況下大客戶們,肯定是不放心的。同時操作系統依賴性也是限制 Container 在 IaaS 層應用的一個主要問題,也是絕大多數解決方案都是將Container 運行在 VM 上的原因,這樣 Container 性能好的優勢實際上在云上根本發揮不出來,優點只有啟動快了。