|
各種虛擬機(jī)技術(shù)開啟了云計(jì)算時(shí)代。而Docker,作為下一代虛擬化技術(shù),正在改變我們開發(fā)、測試、部署應(yīng)用的方式。 那虛擬機(jī)和Docker有什么區(qū)別呢,二者又各自扮演著什么角色,在開發(fā)中如何做技術(shù)選型呢,接下來我們將對這二者進(jìn)行比較和探討。 云計(jì)算隨著互聯(lián)網(wǎng)信息技術(shù)的發(fā)展,很多公司都有了搭建自己的WEB服務(wù)的需求,有WEB服務(wù)就要有服務(wù)器,而原有自建機(jī)房的方式成本很大,往往一個(gè)創(chuàng)業(yè)公司資產(chǎn)的三分之一甚至一半都拿來買機(jī)器和后續(xù)運(yùn)維,這對很多很多中小公司非常不友好。 過重的資產(chǎn)模式讓企業(yè)無法快速的部署和發(fā)展,正是因?yàn)檫@種困難才促使云計(jì)算的產(chǎn)生。在自由主義的時(shí)代,贏家通吃,往往只有互聯(lián)網(wǎng)的巨頭才有這種實(shí)力建設(shè)自己的云,提供便捷的計(jì)算、存儲和運(yùn)維服務(wù)。 云計(jì)算或者叫云服務(wù)的概念早已深入人心,而云計(jì)算比較被人們接受的定義由NIST(美國國家標(biāo)準(zhǔn)和技術(shù)研究院)提供,即云計(jì)算是一種按使用量付費(fèi)的模式,這種模式提供可用的、便捷的、按需的網(wǎng)絡(luò)訪問, 進(jìn)入可配置的計(jì)算資源共享池(資源包括網(wǎng)絡(luò),服務(wù)器,存儲,應(yīng)用軟件,服務(wù)),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務(wù)供應(yīng)商進(jìn)行很少的交互。 云計(jì)算并不是真的在云上計(jì)算,而是隱喻使用互聯(lián)網(wǎng)來接入存儲或者運(yùn)行在遠(yuǎn)程服務(wù)器端的應(yīng)用,數(shù)據(jù),或者服務(wù)。 云計(jì)算的基本特性有以下幾點(diǎn):“按使用量計(jì)費(fèi)”、“資源共享池”和“多租戶隔離”。任何一個(gè)使用基于互聯(lián)網(wǎng)的方法來計(jì)算,存儲和開發(fā)的公司,都可以從技術(shù)上叫做云計(jì)算公司。其實(shí)云計(jì)算是分層的(如下圖所示),由下到上分別是基礎(chǔ)設(shè)施、平臺、軟件。 上面對云計(jì)算的劃分其實(shí)主要在于對計(jì)算資源的層次分類,總結(jié)來看:
事實(shí)上,這三個(gè)領(lǐng)域的界線并不是像人們想象的那么清晰,它們之間存在很多交叉。 大多數(shù)云計(jì)算服務(wù)提供商也并不是只提供某一種服務(wù)。 但總體而言,當(dāng)前云計(jì)算的發(fā)展IaaS是非常主流的。 隨著團(tuán)隊(duì)協(xié)作的深入發(fā)展,CaaS和MaaS也逐漸被人們所接受。其中CaaS( Communications-as-a-Service )意思為通訊即服務(wù)(或稱協(xié)作即服務(wù)),是指將傳統(tǒng)電信能力如消息、語音、視頻、會議、通信協(xié)同等封裝成API或SDK通過互聯(lián)網(wǎng)對外咖啡,提供給第三方包括企業(yè)、SME、垂直行業(yè)、CP/PS和個(gè)人開發(fā)者等,將電信能力作為服務(wù)對外提供。 CaaS也被稱為云計(jì)算的第四種業(yè)務(wù)形式,目前華為已經(jīng)在著手建立CaaS的生態(tài)圈。MaaS(Machine-as-a-Service)是物聯(lián)網(wǎng)即服務(wù),這個(gè)概念伴隨著物聯(lián)網(wǎng)產(chǎn)生,物聯(lián)網(wǎng)常見的兩種業(yè)務(wù)形式就是MAI和MaaS,前者關(guān)注內(nèi)網(wǎng)和專網(wǎng)物聯(lián)網(wǎng)系統(tǒng),目標(biāo)是消除和規(guī)避物聯(lián)網(wǎng)信息貴大,實(shí)現(xiàn)包括信息系統(tǒng)EAI在內(nèi)的大集成,后者是M2M的SaaS營運(yùn)服務(wù),是物聯(lián)網(wǎng)的主要業(yè)務(wù)模式。 另外隨著物聯(lián)網(wǎng)業(yè)務(wù)量的增加,對數(shù)據(jù)存儲和計(jì)算量需求會對云計(jì)算的能力提出更高的要求,當(dāng)前的云計(jì)算也在從物聯(lián)網(wǎng)初級階段(簡單計(jì)算中心和數(shù)據(jù)中心建設(shè) )向高級階段發(fā)展,出現(xiàn)MVNO/MMO營運(yùn)商(國外已經(jīng)存在多年),需要虛擬化云計(jì)算技術(shù)、SOA等技術(shù)實(shí)現(xiàn)物聯(lián)網(wǎng)的泛在服務(wù),即TaaS。 云計(jì)算的本質(zhì)就是把計(jì)算資源集中起來放在網(wǎng)絡(luò)上提供服務(wù),雖然聽著簡單,但是實(shí)現(xiàn)起來就非常復(fù)雜了,如果想要保證業(yè)務(wù)(內(nèi)部和外部客戶)的平穩(wěn)運(yùn)行,就需要保證整個(gè)系統(tǒng)能夠支持超大容量、超高并發(fā)、超快速度和超強(qiáng)安全的要求。 為了滿足云計(jì)算整體系統(tǒng)的多層次要求,必然要推進(jìn)平臺工具自動(dòng)化和智能化的發(fā)展,替代原有的人力運(yùn)維,于是就有了各種軟件和平臺,負(fù)責(zé)對各種資源進(jìn)行快速調(diào)度和集中管理,耳熟能詳?shù)挠蠴penstack、VM、Docker、KVM、K8S、Hypervisor、Xen、VMware、Mesos等等。 虛擬化云計(jì)算能夠發(fā)展壯大的基礎(chǔ)是虛擬化,它是一種具體技術(shù),指把硬件資源虛擬化,實(shí)現(xiàn)隔離性、可擴(kuò)展性、安全性、資源可充分利用等特點(diǎn)的產(chǎn)品。 因?yàn)橐獙ξ锢碣Y源進(jìn)行管理,實(shí)現(xiàn)彈性伸縮,就必須把所有資源進(jìn)行池化,可以像水一樣對外可度量地進(jìn)行服務(wù)。 虛擬化的目的就是邏輯表示資源,擺脫物理限制的約束,通過再系統(tǒng)中添加已虛擬化層VMM,將下層HostOS資源封裝,抽象成另一種形式的資源,提供給上層GuestOS使用。 虛擬化可以將一份資源抽象為多份,也可以將多份資源抽象成一份。 通過虛擬化技術(shù)實(shí)現(xiàn)的虛擬機(jī)一般被稱之為GuestOS(客戶),而作為GuestOS載體的物理主機(jī)稱之為HostOS(宿主)。 維基百科列舉的虛擬化技術(shù)有超過60中,基于X86(CISC)體系的超過50種,也有基于RISC體系的。 虛擬化技術(shù)是一種很寬泛的概念,不可以等同于虛擬機(jī)。 虛擬化是在一臺物理機(jī)上運(yùn)行多臺“虛擬服務(wù)器”,即虛擬機(jī)(VM,Virtual Machine)。 虛擬機(jī)是滿足以下條件的OS:由VMM提供的高效(>80%)、獨(dú)立的計(jì)算機(jī)系統(tǒng) 、擁有自己的虛擬硬件(CPU、內(nèi)存、網(wǎng)絡(luò)設(shè)備、存儲設(shè)備) 、對于上層軟件,虛擬機(jī)就是真實(shí)的機(jī)器 、Virtual Machine Monitor 。當(dāng)前虛擬化有五種主流技術(shù),分別是CPU虛擬化、網(wǎng)絡(luò)虛擬化、服務(wù)器虛擬化、存儲虛擬化和應(yīng)用虛擬化,這里不展開講了,有興趣的同學(xué)請閱讀文章《虛擬化技術(shù)詳解》。(https://blog.csdn.net/gui951753/article/details/81045508) 現(xiàn)在市場上最常見的虛擬化軟件有VMWare workstation(VMWare)、VirtualBox(Oracle)、Hyper-V(Microsoft)、KVM(Redhat)、Xen等,這些軟件統(tǒng)稱之為VMM(Virtual Machine Monitor),使用不同的虛擬化技術(shù)實(shí)現(xiàn)。這里虛擬化軟件就是大名鼎鼎的Hypervisor,即虛擬機(jī)監(jiān)視器,它不是一個(gè)具體的軟件,而是一類軟件的統(tǒng)稱。 Hypervisor可以劃分為兩類, 一種hypervisor執(zhí)行運(yùn)行在物理機(jī)上,虛擬機(jī)在hypervisor之上運(yùn)行; 另一種物理機(jī)上要安裝正常的操作系統(tǒng),然后在操作系統(tǒng)上安裝hypervisor,生成和管理虛擬機(jī)。 大部分同學(xué)比較熟悉的Hypervisor肯定是VMware了,但是真正厲害的是KVM(Kernel-based Virtual Machine),即基于Linux內(nèi)核的虛擬機(jī),它提供的虛擬化更為底層,可以模擬CPU的運(yùn)行,雖然用戶交互不友好,但是仍然是目前最受歡迎也最熱門的虛擬化解決方案。 嗯這里跟Windows和Linux一樣都是開源和閉源之爭,VMware這家公司在云計(jì)算虛擬化階段,買了很多很多錢,因?yàn)閂Mware很貴,而有閉源所以就會有開源,然后就有大佬寫了兩個(gè)開源虛擬化軟件,分別是Xen和KVM,所以每個(gè)程序員都要感謝情懷。 有了虛擬機(jī)可以提供給用戶彈性伸縮的資源,我們就可以通過調(diào)度(池化或云化)給用戶提供基礎(chǔ)的云服務(wù)了,比如IaaS。而為了更好地管理虛擬機(jī),就出現(xiàn)了OpenStack這樣的云管理平臺,當(dāng)然也有很多其他的綜合應(yīng)用平臺,如cloudstack、zstack等等。這里大家應(yīng)該可以更好地理解虛擬化是云計(jì)算的基礎(chǔ)了吧。 容器化在虛擬化的使用過程中,懶惰的人類發(fā)現(xiàn)了虛擬化的缺點(diǎn),就是重。 有時(shí)候只是運(yùn)行一個(gè)小程序就需要建立虛擬機(jī),操作費(fèi)時(shí)費(fèi)時(shí)還占用資源,而且平時(shí)遷移服務(wù)也很麻煩。沉重的壓力讓人透不過氣。。。 當(dāng)然這個(gè)重是相對的,但是人嘛,總是得隴望蜀、貪心不足,也正是這些推動(dòng)著我們不斷進(jìn)步,于是我們有了容器化。容器本身也是一種虛擬化,不過是更為“輕量級”的虛擬化,它們本質(zhì)的區(qū)別在于:虛擬機(jī)是操作系統(tǒng)級別的資源隔離,而容器是進(jìn)程級別的資源隔離。 通過對比二者的架構(gòu)圖,我們可以看到每個(gè)虛擬機(jī)都有一個(gè)獨(dú)立的Kernel內(nèi)核,而容器只有一個(gè)操作系統(tǒng),只有一個(gè)獨(dú)立的Kernel。直觀地對比容器和虛擬機(jī): 相比較虛擬機(jī),容器化的優(yōu)勢顯而易見:
而當(dāng)前非?;鸬腄ocker就是創(chuàng)建容器的工具,是應(yīng)用容器引擎。 和管理虛擬機(jī)需要OpenStack平臺一樣,有了Docker創(chuàng)建和管理容器,我們還需要對容器進(jìn)行編排,這就有了K8S(Kubernetes, 這個(gè)神奇的縮寫源于K和S之間有8個(gè)字母 )。 K8S是一個(gè)容器集群管理系統(tǒng),主要用來做容器編排,包括啟動(dòng)容器、自動(dòng)化部署、擴(kuò)展和管理、回收容器,簡單講,K8S類似容器的保姆,負(fù)責(zé)管理容器在哪個(gè)機(jī)器上運(yùn)行,監(jiān)控容器是否存在問題,控制容器和外界的通信等等。 當(dāng)然也有很多其他容器管理平臺,如Compose、Marathon、Swarm、Mesos等。Docker和K8S已經(jīng)來到應(yīng)用層,不再關(guān)注硬件物理設(shè)施,屬于PaaS了。有了容器,云計(jì)算PaaS層對于用戶自身應(yīng)用的自動(dòng)部署才變得快速而優(yōu)雅。 近兩年,隨著容器市場的不斷成熟和多元化發(fā)展,Docker已出現(xiàn)了很多替代方案,如CoreOS rkt、Mesos、LXC、OpenVZ、Containerd等。這種替代方案使得Docker在容器市場的占有份額出現(xiàn)下降,17年99%到18年83%,大家稱這種現(xiàn)象為去Docker化,這種趨勢主要是Docker在某些特殊應(yīng)用場景下,優(yōu)越性不夠明顯。 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處。 北涼柿子的博客:http://www./ |
|
|