1. 程式人生 > >雲端計算、虛擬化、容器化雜談

雲端計算、虛擬化、容器化雜談

1、雲端計算概念:

1)雲端計算是最近幾年才興起的概念,但是這樣的需求其實早都有了,現階段廣為接受的是美國國家標準與技術研究院(NIST)定義:

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

雲端計算最基本的特性是:“按使用量付費”、“資源共享池”和多租戶隔離。

2)雲端計算也是分層的:


 1. IaaS: Infrastructure-as-a-Service(基礎設施即服務):

  主要作用是提供虛擬機器或者其他資源作為服務提供給使用者。

 2.PaaS: Platform-as-a-Service(平臺即服務):

 第二層就是所謂的PaaS,某些時候也叫做中介軟體。主要作用是提供一個開發和執行平臺給使用者(如mysql中介軟體等)

 3.SaaS: Software-as-a-Service(軟體即服務):

 第三層Saas就是各種產品服務。

2、虛擬化概念:

虛擬化是通過軟體手段對計算機硬體資源映象整合管理和再分配的一種技術。常用的手段有基於虛擬機器的虛擬化和基於容器的虛擬化。

1)最常用的就是基於虛擬機器(Hypervisor-based)的虛擬化:

它通過一個軟體層的封裝,提供和物理硬體相同的輸入輸出表現,實現了作業系統和計算機硬體的解耦,將OS和計算機間從1對1變成了多對多(實際上是1對多)的關係。該軟體層稱為虛擬機器管理器(VMM/Hypervisor),它可以直接執行在裸機上(Xen、VMware EXSi),也可以執行在作業系統上(KVM、VMware workstation)。這項技術已經很成熟了(發展了40多年),但仍然存在以下幾個問題:

  • 在虛擬機器上運行了一個完整的作業系統(GuestOS),在其下執行的還有虛擬化層和宿主機作業系統,一定比直接在物理機上執行相同的服務效能差;
  • 有GuestOS的存在,虛擬機器映象往往有幾個G到幾十個G,佔用的儲存空間大,便攜性差;
  • 想要使用更多硬體資源,需要啟動一臺新的虛擬機器,要等待GuesOS啟動,可能需要幾十秒到幾分鐘不等。

實際使用場景中,我們使用虛擬化技術其實是為了按需分配資源來完成服務的部署和使用,同時對服務所依賴的環境進行隔離,不被其它服務感知或干擾。為此啟動一個GuestOS並不是必需的,為什麼不考慮讓多個虛擬機器公用一個作業系統核心,只隔離開服務執行環境同時控制服務使用的系統資源呢?基於容器的虛擬化就是這樣一種技術。

2)基於容器的虛擬化:

容器是沒有GuestOS的輕量級“虛擬機器”,多個容器共享一個OS核心,容器中包含需要部署的應用和它依賴的系統環境,容器大小通常只有幾十到幾百MB。由於共享作業系統核心,所以容器依賴於底層的作業系統,各個作業系統大都有自己的容器技術和容器工具。

Docker是一個Linux容器管理工具,隨著Docker的興起,Linux容器技術也是當下最時興的容器虛擬化技術。Linux容器工具有很多,OpenVZ、LXC、Docker、Rocket、Lmctfy等等,大都是基於Linux核心提供的兩個機制:Cgroups(實現資源按需分配)和Namespace(實現任務隔離)。

3)二者的區別:

  • 虛擬機器技術已經發展了很多年,虛擬機器和虛擬化層間的介面、虛擬機器映象格式等都已經標準化了,相應的管理工具、分散式叢集管理工具都有比較完善的解決方案,而容器最近幾年才興起,配套技術和標準還在完善中;
  • 虛擬機器由於有GuestOS存在,可以和宿主機執行不同OS,而容器只能支援和宿主機核心相同的作業系統;
  • 虛擬機器由於有VMM的存在,虛擬機器之間、虛擬機器和宿主機之間隔離性很好,而容器之間公用宿主機的核心,共享系統呼叫和一些底層的庫,隔離性相對較差;
  • 容器比虛擬機器明顯更輕量級,對宿主機作業系統而言,容器就跟一個程序差不多。因此容器有著更快的啟動速度(秒級甚至更快),更高密度的儲存和使用(映象小)、更方便的叢集管理等優點。同時由於沒有GuestOS存在,在容器中執行應用和直接在宿主機上幾乎沒有效能損失,比虛擬機器明顯效能上有優勢。

3、雲端計算和虛擬化差別:

對雲端計算和虛擬化差別的描述,有一句經典的話:虛擬化是雲端計算構建資源池的一個主要方式。只要這句話你理解透了就知道他倆的關係了。

1)各領域代表的產品:

雲端計算架構的開源產品是OpenStack(是一個由NASA和Rackspace合作研發併發起的,以Apache許可證授權的自由軟體和開放原始碼專案);

虛擬機器的虛擬化:VM的商業付費vSphere或者開源的KVM;

容器的虛擬化:docker。

2)OpenStack:

Openstack是眾多技術的組合體,有涉及網路元件的Neutron,有涉及Dashboard的Horizon,也有涉及計算資源分配的Nova。虛擬化技術只是其中一個涉及到資源池構建的方式。當然你也可以用其它方式構建資源池,比如物理機還有容器。

Openstack經過幾年十幾個版本的更迭,已經擁有了Keystone、Nova、Neutron、Cinder、Glance、Swift、Heat、Ceilometer等等元件,比較完整的提供了一個雲平臺應有的各個模組。

3)在雲端計算中,不同層的選型:

選取基於虛擬機器的虛擬化呢,還是基於容器的虛擬化。早期由於容器技術的不完善,雲端計算只有虛擬機器這一種選擇。

隨著現在容器技術興起,基於容器的虛擬化效能更高,交付速度快,方便管理,而且資源利用率高,看起來是比虛擬機器更好的方案。但是它現有的兩個比較大的缺點(隔離性不夠強、作業系統依賴性)讓他無法完全替代VM,對於SaaS使用者和部分PaaS使用者而言這兩個缺點可能不那麼明顯。現階段Container和雲端計算主要結合的場景也是在SaaS和PaaS中(事實上大多數SaaS和PaaS服務提供商都使用了容器技術)。

但是對於IaaS的使用者來說,他們租用的是基礎設施,上面承載著他們自己執行的系統和服務,隔離性不強意味著安全性和可信性不高,在這種情況下大客戶們(一些公司會把自己的服務託管在雲上,租用公有云,省下來機房、伺服器和運維的成本,他們也是公有云最主要的客戶)肯定是不放心的。同時作業系統依賴性也是限制Container在
IaaS層應用的一個主要問題,也是絕大多數解決方案都是將container執行在VM上的原因,這樣Container效能好的優勢實際上在雲上根本發揮不出來,優點只有啟動快了。