因此,深入理解云計算的相關概念是非常必要的。然而,當我們嘗試搞懂云計算究竟是什么時,一定會面臨各種問題。比如一開始,當我們在百度搜索引擎中搜索“云計算”時,會發現百度百科給它的定義是這樣的:
云計算(cloud computing)是分布式計算的一種,指的是通過網絡“云”將巨大的數據計算處理程序分解成無數個小程序,然后,通過多部服務器組成的系統進行處理和分析這些小程序得到結果并返回給用戶。這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務供應商進行很少的交互。
雖然百度百科用客觀嚴謹的角度解釋了云計算的概念,從業一到三年的專業人士可能能夠輕松地理解其中的含義,但作為一個對于云計算僅知一二的小白來說,但是這確實他娘的不是一句人話。
啥是分布式計算?啥是資源共享池?為啥要把巨大的數據計算處理程序分解成無數個小程序?這些難以理解其存在意義的抽象名詞無疑是晦澀難懂且狗屁不通的,給大家理解云計算的基本概念帶來了層層阻礙,更別說理解之后的OpenStack、Hypervisor、KVM、Docker、K8S等等更加抽象的技術概念了。
因此,為了讓零基礎的小白也能零門檻讀懂云計算到底是個啥,以及實現云計算所需要的種種技術之間的關系,本文將盡可能地減少專業術語在本文中所占的比重,并用較多的例子、類比等方式來解釋相關的概念(因為作者水平也很菜,寫不出太高深的東西來)。廢話不多說,我們開始吧!
1.Why is 云計算?在深入介紹云計算各種技術之前,我們先簡單了解一下云計算出現的背景。
在20世紀電腦被發明的時候,還沒有網絡,每個電腦(PC),就是一個單機。這臺單機是由包括CPU、內存、硬盤、顯卡在內的硬件資源構成的。用戶在單機上,安裝操作系統和應用軟件,進行基本的操作和開發。
后來,出現了網絡(Network),人們開始通過網絡交換信息和資源。
再后來,CPU計算能力不斷進步,但社會發展對計算能力要求也不斷提高。人們漸漸意識到提升一臺單機的計算能力的性價比不足以滿足需求,而滿足用戶需求的方式,則是把單機集中起來,放在機房里,然后讓用戶通過網絡,去訪問和使用機房里的計算機資源。機房里的計算機資源就是現在俗稱的服務器(Server)。
再再后來,小型網絡發展成大型網絡,機房規格不斷進化,產生了互聯網(Internet)和IDC(Internet Data Center)的概念。無數用戶接入網絡尋找資源,而為了滿足數以TG計的服務需求,無數大型機房的計算能力相互連接,越來越多的計算機資源和應用服務(Application)被集中起來為用戶提供服務。其中,部署了大量計算任務的各類IDC被統稱為“云端”。
經過對云計算歷史的簡單回顧,我們不難發現,云計算的出現,不僅有效地將那些部署在本地的計算任務轉移到了計算能力更強、更快捷的云端,使得PC從日益增長的繁重任務中解放了出來,而且還實現了資源共享、遠程存儲、網絡互聯等其它功能。
用更通俗的話來講,說白了,云計算就是把計算機資源集中起來,放在網絡上。
現在,云計算資源就好比我們現在日常生活中所使用的水、電、氣等資源。我們想得到干凈的水源,只需要打開廚房里的水龍頭,而不需要在大江大河旁邊建立自來水廠。
想一想在電力沒有普及的18世紀,當時的工廠為了獲得電能,不得不自己自備小型發電機,就好比云計算沒出現之前的開發人員,只能把項目部署在自己的幾臺PC當中。而生活現代社會的我們,想要得到電能再也不用自己用破舊的手搖發電機自己發電了。只需要打開開關,國家電力機關已經幫你完成了發、輸、配、改等一系列工作。
假設你是一個想要搭建自己企業網絡環境的小型企業老板,如果不存在云端這一概念,那么你只能苦逼地花費高昂的資金去購買昂貴的硬件,再一步一步配置OS、開發環境、把自己的項目部署在上邊…不僅花費賊貴,而且效果還不一定符合需求,實在是慘!
而云計算的出現徹底打破了這一局面。你只需要選擇租用大型云平臺構造自己的云,即可輕松獲得和自己辛苦搭建環境同等效果的計算資源了!
說了這么多,想必大家對于云計算是個啥玩意有了一定的了解和認識。那么云計算到底有啥特點和牛X之處呢?讓我們走進下一節。
2.What is 云計算?剛才我們有提到過在云端上部署計算機資源,那么這一步究竟部署的是個啥呢?別急,我們先來思考一個吃水餃的問題。
假設某一天,張小胖饑腸轆轆,準備自己做一頓水餃。他先從菜市場買了面、菜、油等諸多原料,再回家搟餃子皮、調餃子餡、把餃子包好,最后打開了天然氣,放到鍋里一頓煮。這一頓操作和設備(包括食材、廚房設備、餐桌、餐具和制作過程)都是由自己準備的,我們暫且將它稱作“本地部署”。
有一天,張小胖突發奇想,不想自己做了,于是他直接從零售店買了一袋速食水餃,回家自己下著吃,味道甚至比自己包出來的更美味。這一步,原材料都不用自己準備了,只需要準備煮生產餃子的鍋,并且自己動手操作就好了。這種方式,我們把它稱作“IaaS”(Infrastructure as a Service),也就是人們常說的“基礎設施即服務”。
后來的一天,小胖同學突然大懶懶,不愿意出門買東西了,但是他還是想吃水餃,那這可怎么辦呢?這時,他打開了“餓了么”(餓了么記得打廣告費),給自己點了一份水餃。這一步,小胖都不用自己動手煮餃子了,除了餐桌和餐具是必須自己準備的,連煮餃子的鍋也不需要了。那么這種方式,我們暫且將它稱作“PaaS”(Platform as a Service),即“平臺即服務”。
最后,我們的小胖同學連收拾餐桌和刷完的耐心也沒有了,他直接上飯店要了一份現成的餃子,吃得十分過癮。到了這一步,獲得的直接是最終的產品,別的啥也不需要自己準備了。那么這種方式我們就把它叫做“SaaS”(Software as a Service),也就是我們常說的“軟件即服務”。
用吃水餃的例子形容云計算的三個特征可能并不是很準確,但是確實大體上概括了這三種層次所提供服務的范圍。借助上圖,我們來正式認識一下這三個層次的概念。
第一層次,云服務商提供了最底層的硬件資源,主要包括CPU(計算資源),硬盤(存儲資源), 還有網卡(網絡資源)等。
第二層次,要高級一些。我們不直接使用CPU、硬盤、網卡等硬件設備,而是廠家直接幫我們把操作系統(如Windows、Linux)和數據庫軟件(例如Mysql、Sqlserver)等基本軟件資源裝好。
第三層次,更高級一些,廠家不但幫我們裝好了操作系統這些基本的,還要把具體的應用軟件裝好,例如人臉識別服務端軟件、在線視頻服務端軟件等,我們可以直接使用服務。
這三種層次,就是大家經常聽到的IaaS、Paas、 SaaS。
經過上述討論,我們對于云計算是個啥玩意、能給我們帶來哪些服務就有了一個簡單的認識。那么日常大多數企業利用云計算的形式是什么樣的呢?百度百科告訴我們,大體可以分為三種形式:私有云、公有云、混合云。我們通過一個葷段子簡單了解一下這幾種形式的區別。
你娶了一個老婆,這叫傳統IT架構。
你娶了很多風格氣質各異的小老婆,以至于形成了后宮,這叫私有云。你的后宮就叫計算資源池。你從后宮里選出懂事有能的管理其他小老婆,這叫私有云管理方案。管事的那個就是HYPERV或VMWARE。
你不娶小老婆,改成包養很多情人,這叫托管云。
你是窮人,沒有錢包養任何人也沒錢娶小老婆,你選擇去洗浴中心解決問題,這叫面向中小企業的公有云服務。 你在享受公有云服務的同時還得交公糧,這叫中小企業的混合IT架構。
你是富人,但也喜歡去高級夜總會,這叫面向大企業用戶的公有云服務。
你有錢,同時包養小老婆和情人,還去洗浴中心,這叫混合云。但是在混合云里,最關鍵的業務還是會謹慎地采用傳統IT架構。
ps:原出處知乎,完整版歡迎移步:https://link.zhihu.com/?target=http%3A//zhi.hu/ZlP2
聊了這么多云計算的服務模式,那么云計算的提供廠商是怎么為我們提供服務的呢?這才是我們作為技術人員真正應該關心的東西。
首先我們舉個例子,假設你在家里自己擺了臺服務器開個文件傳輸權限,用于同學之間共享資料,那么一臺云主機完全夠用。
但如果在是“雙11”的淘寶購物節期間的阿里巴巴淘寶網站,面對全球幾十億用戶訪問,每秒幾百GB的流量…這個顯然就不是幾根網線幾臺服務器能解決的了的了。我們需要設計一個超大容量、超高并發(同時訪問)、超快速度、超強安全的云計算系統,才能滿足業務平穩運行的要求。
那么,我們如何達到這樣的要求呢?換句話來說,我們需要通過什么技術來實現一個這么牛X哄哄的超大規模云計算系統呢?接下來就進入本篇文章的重點——How to 云計算。
3.How to 云計算?假設你是一家云服務公司的老板。某天,打東邊來了個小明,他對你說:“我要一臺四核CPU、8GB內存、300GB硬盤的服務器!”
你說:“彳亍!”可是你手頭上并沒有配置恰好全部符合小明需求的機子!
小明氣呼呼地走了。這時,打北邊來了個小紅,她對你說:“我想要一臺裝了Ubuntu 16.04版本、Tomcat和Mysql 5.5.60版本的服務器!”
你說:“彳亍!”于是,你灰頭土臉地找了半天符合要求版本的Linux系統燒寫盤,然后花了半天時間現裝好了Tomcat、Mysql等開發全家桶。
等你裝好了抬頭一看,小紅早就不耐煩地走了。這時,打南邊來了一車面包人,鬧騰騰地沖你喊什么的都有:“老板,我要包含語音識別和人臉識別SDK的云平臺!”、“老板!來份Nvidia P100 GPU 、內存配比為1:7.5的計算型GPU !”、“老板一份MySQL+Redis+數據庫備份的云數據庫打包帶走!”…
老板,卒。
這個故事告訴我們,想要滿足群眾的需求,就必須能夠提供多樣化多層次的云計算服務。那么,我們該怎么實現對資源的合理調用和管理呢?
3.1 虛擬化
我們對物理資源進行管理的第一步,就是“虛擬化”。
虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
簡單來說,虛擬化就是在一臺物理服務器上,運行多臺“虛擬服務器”。這種虛擬服務器,也叫虛擬機(Virtual Machine)。
舉個例子,大家都有在阿里云或者騰訊云等大廠租過服務器的經歷,那么你作為租戶,使用的其實是阿里云提供給你的一臺虛擬機。也就是說,阿里從大量的服務器集群中,分出了一定的cpu、內存等等資源給你,就成了一臺完整的虛擬機。
那么,誰來完成物理資源虛擬化的工作呢?就是大名鼎鼎的Hypervisor。
Hypervisor ,翻譯過來是“超級監督者”, 也叫做VMM (Virtual Machine Monitor )。它不是一款具體的軟件,而是一類軟件的統稱。
Hypervisor分為兩大類。
第一類, hypervisor直接運行在物理機之上。虛擬機運行在hypervisor之上。
第二類,物理機上安裝正常的操作系統(例如Linux或Windows ) ,然后在正常操作系統上安裝hypervisor ,生成和管理虛擬機。
這樣直接解釋概念可能大家沒有一個直觀的認識。我們舉個例子:
相信很多人都有在Windows系統裝Linux虛擬機的經歷。大家打開了自己的電腦之后,通過VMware或者別的軟件,又打開了一個“子電腦”。大家在“子電腦”里,你可以和正常電腦一樣運行程序,例如刷微博登微信等等。如果你愿意,你可以同時打開好幾個“子電腦”,里面各自跑不同的程序。“子電腦”和“子電腦”之間,是相互隔離的,互不影響。
那么,我們所使用的VMware就是我們剛才提到的Hypervisor,除此之外,主流公司還推出了Xen、Virtual Box等商業虛擬化軟件。但是,真正厲害的,是KVM ( kernel-based virtual machine )。它是基Linux內核的虛擬機,也是目前最受追捧的虛擬化方案。
像KVM這樣的Hypervisor軟件,實際上是提供了一種虛擬化能力,模擬CPU的運行,更為底層。但是它的用戶交互并不良好,不方便使用。
于是,為了更好地管理虛擬機,就需要OpenStack這樣的云管理平臺。它有點像個商店,負責管理商品(計算資源、存儲資源、網絡資源等)。然而它本身不制造商品(不具備虛擬化能力),它的商品,來自于KVM。
回過頭來簡單總結一下,虛擬化技術就是將一堆物理設備虛擬成多個邏輯設備使用(也存在將多個物理設備虛擬成一個邏輯設備使用)的技術。
(具體實現有CPU虛擬化、硬盤虛擬化、網絡虛擬化等等,本文不再詳述)
回到本節開頭的那個例子,如果你是那個云廠商的老板,并且掌握了主流虛擬化技術,那么當面對一車面包人各式各樣的需求時,就不用苦逼兮兮地一個個親自配置了,只需要把現有的硬件虛擬化的各式資源賣出去,就可以靈活地解決大家稀奇古怪的各種需求。
3.2 容器
書接上回,前文所說的虛擬化方式,人們在使用一段時間后發現,它存在一些問題。
不同的用戶,有時候只是希望運行各自的一些簡單程序,跑一個小進程。為了不相互影響,就建立了虛擬機,顯然浪費有點大,且花費時間也比較長。比方說我就只是想開臺小機子給樹莓派當服務器收收數據,但卻不得不為此開一臺新的虛擬機,這無疑有點彪。
而且,有的時候,想要遷移自己的服務程序,就要遷移整個虛擬機。顯然,遷移過程也會很復雜。
本質上來說,虛擬機直接模擬了整套操作系統。以作者本人為例,每次開個VM跟真的開機似的,不僅占內存,啟動還賊慢。
有沒有辦法更靈活快速一些呢 ?答案當然是肯定的,這正是我們本節要介紹的"容器( Container )”。
容器也是虛擬化的一種方式,但是它屬于"輕量級”的虛擬化。它的目的和虛擬機一樣,都是為不同進程或者項目之間創造"隔離環境”。但是,它又和虛擬機有很大的不同。虛擬機是 操作系統級別的資源隔離,而容器本質上是進程級的資源隔離。我們看下邊的圖,就能輕松地了解容器和虛擬機之間的異同。
看完了容器和虛擬機在架構方面的異同,我們不難發現,容器更便捷靈活。從運行時間角度上來看,容器的啟動時間很快,幾秒鐘就能完成。而且,它對資源的利用率很高(一臺主機可以同時運行幾千個Docker容器)。此外,它占的空間很小,虛擬機一般要幾GB到幾十GB的空間,而容器只需要MB級甚至KB級。這也是容器被廣大技術人員追捧的原因。
我們吹了半天容器的牛X之處,但是大家可能還是對于容器技術到底是個啥、能干啥缺乏直觀的理解。既然如此,我們就不得不對當下最火爆的容器引擎——Docker進行深入的探討了。
Docker的官方logo是一只背著好多集裝箱的可愛的小胖鯨魚。所謂Docker,翻譯過來的意思就是“碼頭上的搬運工人”。那么,它究竟是干啥玩意的呢?不要著急,我們還是先通過一個例子來認識它。
某天,張小胖同學又餓了,于是他又想給自己包頓餃子。于是,他搟餃子皮、調餃子餡、燒開了水燉餃子…一套流程下來,他終于做出了一頓香噴噴的餃子。
這時,他突然想道:“我包的餃子這么好吃,可是每次都要自己親自動手費老半天勁兒,我實在是太懶了。要是有個神奇的背包,讓我可以把餃子存到背包里當做餃子鏡像,以后想吃的時候直接把餃子鏡像復制粘貼出來,直接就能吃上新鮮的餃子了,嘿嘿嘿。”
突然,不知從哪蹦出來個老頭,扔給他一個有魔法的背包。
小胖將信將疑地把餃子放了進去。神奇的事情發生了,背包里的餃子果然具有了復制粘貼功能。從今往后不管小胖走到哪,他都能憑著背包里的餃子存檔隨時掏出一盤餃子。
從此,小胖和餃子過上了幸福的生活。
啰啰嗦嗦說了這么多廢話,我們不難發現Docker技術的三大核心概念,分別是:
鏡像(Image)容器(Container)倉庫(Repository)剛才的例子里面,那個放在背包里的“餃子鏡像”,就是Docker鏡像。而背包,就是Docker倉庫。我隨時隨地憑借餃子鏡像粘貼出來的餃子,就是一個Docker容器。
說白了,這個Docker鏡像,是一個特殊的文件系統。它除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(例如環境變量)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。這句話啥意思呢?就是每個人用這個餃子鏡像復制出來的餃子形狀都是一樣的,但是里邊具體啥餡是不一定的。
小胖天天吃餃子,過了仨月,小胖突然想,我既然能復制餃子鏡像,那我能不能復制別的食物,比如包子、餡餅、烤鴨之類的呢?
也就是說,大家如果把各自的鏡像共享出來,那是不是每個人都能獲得好多好多的好吃的?
答案當然是肯定的。大家最常使用的Registry公開服務,是官方的Docker Hub,這也是默認的 Registry,并擁有大量的高質量的官方鏡像,就相當于一個裝滿了各種美食的背包。
就在Docker容器技術被炒得熱火朝天之時,大家發現,如果想要將Docker應用于具體的業務實現,是存在困難的——編排、管理和調度等各個方面,都不容易。于是,人們迫切需要一套管理系統,對Docker及容器進行更高級更靈活的管理。
從吃餃子的角度看,如果缺乏一個管理倉庫中各種食物鏡像的安全性和口味的大廚,萬一有的食物鏡像里邊有毒可咋整?再說也不是所有人都懂怎么吃每一種食物啊。
就在這個時候,K8S出現了。
K8S,就是基于容器的集群管理平臺。它的全稱,是kubernetes,但是這個詞太長了,大家又都比較懶懶,因此把“k”和“s”中間的八個字母縮寫成一個“8”,它的意思是“掌舵人”。我們看它的Logo也能看出來。
K8S的架構,略微有一點復雜,我們簡單來看一下。
一個K8S系統,通常稱為一個K8S集群(Cluster)。這個集群主要包括兩個部分: 一個Master節點(主節點)一群Node節點(計算節點)。主要職責是容器編排( Container Orchestration )一啟動容器,自動化部署、擴展和管理容器應用,還有回收容器。
簡單來說,K8S有點像容器的保姆。它負責管理容器在哪個機器上運行,監控容器是否存在問題,控制容器和外界的通信等等。
4.結語當今社會飛速發展,新概念、新技術的迭代可謂日新月異。曾經被2010年的馬化騰不看好、稱之為“今后幾百年才能用得上”的云計算技術,不知不覺間已經成了像空氣一樣的、每個人感受不到卻都離不開的資源。
今天我們大體上了解了一下云計算的誕生歷史、IaaS/PaaS/SaaS三大特性,并簡要了解了KVM、Hypervisor、Openstack等虛擬化技術的涵義和Docker、K8s等容器技術的涵義。希望這篇博客能夠幫助你理解云計算究竟是個啥玩意,并且我希望它有助于你在和小區門口看新聞聯播的老大爺的辯論中取得勝利。
如果你覺得這篇博客不錯,不妨給作者點個贊~
參考博客:
https://zhuanlan.zhihu.com/p/53260098
https://www.zhihu.com/question/27211555/answer/556692696
https://blog.csdn.net/qq_44584356/article/details/104420687
https://www.jianshu.com/p/312056e70387?from=timeline
https://blog.csdn.net/gui951753/article/details/81045508?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
文章來源:CSDN博主「在風暴的中央」
原文鏈接:https://blog.csdn.net/qq_44584356/article/details/104525110
全網平臺ID:覺醒元宇宙AI聲明:「覺醒元宇宙AI」登載此文出于傳遞更多信息之目的,如有侵權,請第一時間聯系