云計(jì)算的發(fā)展怎樣的

本篇內(nèi)容介紹了“云計(jì)算的發(fā)展怎樣的”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

發(fā)展壯大離不開廣大客戶長(zhǎng)期以來的信賴與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及報(bào)廢汽車回收等,在網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

云計(jì)算概述

云計(jì)算主要解決了四個(gè)方面的內(nèi)容:計(jì)算,網(wǎng)絡(luò),存儲(chǔ),應(yīng)用。

計(jì)算就是CPU和內(nèi)存,例如“1+1”這個(gè)最簡(jiǎn)單的算法就是把“1”放在內(nèi)存里面,然后CPU做加法,返回的結(jié)果“2”又保存在內(nèi)存里面。網(wǎng)絡(luò)就是你插根網(wǎng)線能上網(wǎng)。存儲(chǔ)就是你下個(gè)電影有地方放。本次討論就是圍繞這四個(gè)部分來講的。其中,計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)三個(gè)是IaaS層面,應(yīng)用是PaaS層面。

云計(jì)算發(fā)展脈絡(luò)

云計(jì)算整個(gè)發(fā)展過程,用一句話來形容,就是“分久必合,合久必分”。
云計(jì)算的發(fā)展怎樣的

第一階段:合,即物理設(shè)備

物理設(shè)備簡(jiǎn)介

在互聯(lián)網(wǎng)發(fā)展初期,大家都愛用物理設(shè)備:

  1. 服務(wù)器用物理機(jī),像戴爾、惠普、IBM、聯(lián)想等物理服務(wù)器,隨著硬件設(shè)備的進(jìn)步,物理服務(wù)器越來越強(qiáng)大了,64核128G內(nèi)存都算是普通配置;

  2. 網(wǎng)絡(luò)用的是硬件交換機(jī)和路由器,例如思科的,華為的,從1GE到10GE,現(xiàn)在有40GE和100GE,帶寬越來越牛;

  3. 存儲(chǔ)方面有的用普通的磁盤,也有更快的SSD盤。容量從M,到G,連筆記本電腦都能配置到T,更何況磁盤陣列;

物理設(shè)備的缺點(diǎn)

部署應(yīng)用直接使用物理機(jī),看起來很爽,有種土豪的感覺,卻有大大的缺點(diǎn):

  1. 人工運(yùn)維。如果你在一臺(tái)服務(wù)器上安裝軟件,把系統(tǒng)安裝壞了,怎么辦?只有重裝。當(dāng)你想配置一下交換機(jī)的參數(shù),需要串口連上去進(jìn)行配置;當(dāng)你想增加一塊磁盤,要買一塊插進(jìn)服務(wù)器,這些都需要人工來,而且很大可能要求機(jī)房。你們公司在北五環(huán),機(jī)房在南六環(huán),這酸爽。

  2. 浪費(fèi)資源。其實(shí)你只想部署一個(gè)小小的網(wǎng)站,卻要用128G的內(nèi)存?;熘渴鸢桑陀懈綦x性的問題。

  3. 隔離性差。你把好多的應(yīng)用部署在同一臺(tái)物理機(jī)上,他們之間搶內(nèi)存、搶cpu,一個(gè)寫滿了硬盤,另一個(gè)就沒法用了,一個(gè)弄掛了內(nèi)核,另一個(gè)也跟著掛了,如果部署兩個(gè)相同的應(yīng)用,端口還會(huì)沖突,動(dòng)不動(dòng)就會(huì)出錯(cuò)。

第二階段:分,即虛擬化

虛擬化簡(jiǎn)介

因?yàn)槲锢碓O(shè)備的以上缺點(diǎn),就有了第一次“合久必分”的過程,叫做虛擬化。所謂虛擬化,就是把實(shí)的變成虛的:

  1. 物理機(jī)變?yōu)樘摂M機(jī)。cpu是虛擬的,內(nèi)存是虛擬的,內(nèi)核是虛擬的,硬盤是虛擬的;

  2. 物理交換機(jī)變?yōu)樘摂M交換機(jī)。網(wǎng)卡是虛擬的,交換機(jī)是虛擬的,帶寬也是虛擬的;

  3. 物理存儲(chǔ)變成虛擬存儲(chǔ)。多塊硬盤虛擬成一大塊;

虛擬化解決的問題

虛擬化很好地解決了在物理設(shè)備階段存在的三個(gè)問題:

  1. 人工運(yùn)維。虛擬機(jī)的創(chuàng)建和刪除都可以遠(yuǎn)程操作,虛擬機(jī)被玩壞了,刪了再建一個(gè)分鐘級(jí)別的。虛擬網(wǎng)絡(luò)的配置也可以遠(yuǎn)程操作,創(chuàng)建網(wǎng)卡、分配帶寬都是調(diào)用接口就能搞定的;

  2. 資源浪費(fèi)。虛擬化了以后,資源可以分配地很小很小,比如1個(gè)cpu,1G內(nèi)存,1M帶寬,1G硬盤,都可以被虛擬出來;

  3. 隔離性差。每個(gè)虛擬機(jī)都有獨(dú)立的cpu、 內(nèi)存、硬盤、網(wǎng)卡,不同虛擬機(jī)之間的應(yīng)用互不干擾;

虛擬化時(shí)代的生態(tài)

在虛擬化階段,領(lǐng)跑者是Vmware,可以實(shí)現(xiàn)基本的計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)的虛擬化。
如同這個(gè)世界有閉源就有開源、有windows就有l(wèi)inux、有Apple就有Android一樣,有Vmware,就有Xen和KVM。

在開源虛擬化方面,Xen 的Citrix做的不錯(cuò),后來Redhat在KVM發(fā)力不少;對(duì)于網(wǎng)絡(luò)虛擬化,有Openvswitch,可以通過命令創(chuàng)建網(wǎng)橋、網(wǎng)卡、設(shè)置VLAN、設(shè)置帶寬;對(duì)于存儲(chǔ)虛擬化,本地盤有LVM,可以將多個(gè)硬盤變成一大塊盤,然后在里面切出一小塊給用戶。

虛擬化的缺點(diǎn)

但是虛擬化也有缺點(diǎn)。通過虛擬化軟件創(chuàng)建虛擬機(jī),需要人工指定放在哪臺(tái)機(jī)器上、硬盤放在哪個(gè)存儲(chǔ)設(shè)備上,網(wǎng)絡(luò)的VLAN ID、帶寬的具體配置等,都需要人工指定。所以僅使用虛擬化的運(yùn)維工程師往往有一個(gè)Excel表格,記錄有多少臺(tái)物理機(jī),每臺(tái)機(jī)器部署了哪些虛擬機(jī)。受此限制,一般虛擬化的集群數(shù)目都不是特別大。

第三階段:合,即云計(jì)算

云計(jì)算解決的問題

為了解決虛擬化階段遺留的問題,于是有了分久必合的過程。這個(gè)過程我們可以形象地稱為池化。
虛擬化將資源分得很細(xì),但是如此細(xì)分的資源靠Excel去管理,成本太高。池化就是將資源打成一個(gè)大的池,當(dāng)需要資源的時(shí)候,幫助用戶自動(dòng)地選擇,而非用戶指定。這個(gè)階段的關(guān)鍵點(diǎn):調(diào)度器Scheduler。

私有云、公有云的兩極分化

這樣,Vmware有了自己的Vcloud;也有了基于Xen和KVM的私有云平臺(tái)CloudStack(后來Citrix將其收購(gòu)后開源)。

當(dāng)這些私有云平臺(tái)在用戶的數(shù)據(jù)中心里賣得奇貴無(wú)比、賺得盆滿缽盈的時(shí)候,有其他的公司開始了另外的選擇。這就是AWS和Google,他們開始了公有云領(lǐng)域的探索。

AWS最初就是基于Xen技術(shù)進(jìn)行虛擬化的,并且最終形成了公有云平臺(tái)。也許AWS最初只是不想讓自己的電商領(lǐng)域的利潤(rùn)全部交給私有云廠商吧,所以自己的云平臺(tái)首先支撐起了自己的業(yè)務(wù)。在這個(gè)過程中,AWS嚴(yán)肅地使用了自己的云計(jì)算平臺(tái),使得公有云平臺(tái)并不是對(duì)資源的配置更加友好,而是對(duì)應(yīng)用的部署更加友好,最終大放異彩。

私有云廠商與公有云廠商的聯(lián)系與區(qū)別

如果仔細(xì)觀察就會(huì)發(fā)現(xiàn),私有云和公有云雖然使用的是類似的技術(shù),但在產(chǎn)品設(shè)計(jì)上卻是完全不同的兩種生物。

私有云廠商和公有云廠商也擁有類似的技術(shù),但在產(chǎn)品運(yùn)營(yíng)上呈現(xiàn)出完全不同的基因。

私有云廠商是賣資源的,所以往往在賣私有云平臺(tái)的時(shí)候伴隨著賣計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)設(shè)備。在產(chǎn)品設(shè)計(jì)上,私有云廠商往往會(huì)對(duì)客戶強(qiáng)調(diào)其幾乎不會(huì)使用的計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)的技術(shù)參數(shù),因?yàn)檫@些參數(shù)可以在和友商對(duì)標(biāo)的過程中占盡優(yōu)勢(shì)。私有云的廠商幾乎沒有自己的大規(guī)模應(yīng)用,所以私有云廠商的平臺(tái)做出來是給別人用的,自己不會(huì)大規(guī)模使用,所以產(chǎn)品往往圍繞資源展開,而不會(huì)對(duì)應(yīng)用的部署友好。

公有云的廠商往往都是有自己大規(guī)模的應(yīng)用需要部署,所以其產(chǎn)品的設(shè)計(jì)可以將常見的應(yīng)用部署需要的模塊作為組件提供出來,用戶可以像拼積木一樣,拼接一個(gè)適用于自己應(yīng)用的架構(gòu)。公有云廠商不必關(guān)心各種技術(shù)參數(shù)的PK,不必關(guān)心是否開源,是否兼容各種虛擬化平臺(tái),是否兼容各種服務(wù)器設(shè)備、網(wǎng)絡(luò)設(shè)備、存儲(chǔ)設(shè)備。你管我用什么,客戶部署應(yīng)用方便就好。

公有云生態(tài)及老二的逆襲

公有云的第一名AWS活的自然很爽,作為第二名Rackspace就不那么舒坦了。

沒錯(cuò),互聯(lián)網(wǎng)行業(yè)基本上就是一家獨(dú)大,那第二名如何逆襲呢?開源是很好的辦法,讓整個(gè)行業(yè)一起為這個(gè)云平臺(tái)出力。于是Rackspace與美國(guó)航空航天局(NASA)合作創(chuàng)始了開源云平臺(tái)OpenStack。

OpenStack現(xiàn)在發(fā)展的和AWS有點(diǎn)像了,所以從OpenStack的模塊組成可以看到云計(jì)算池化的方法。

OpenStack的組件

  1. 計(jì)算池化模塊Nova:OpenStack的計(jì)算虛擬化主要使用KVM,然而到底在哪個(gè)物理機(jī)上開虛擬機(jī)呢,這要靠nova-scheduler;

  2. 網(wǎng)絡(luò)池化模塊Neutron:OpenStack的網(wǎng)絡(luò)虛擬化主要使用Openvswitch,然而對(duì)于每一個(gè)Openvswitch的虛擬網(wǎng)絡(luò)、虛擬網(wǎng)卡、VLAN、帶寬的配置,不需要登錄到集群上配置,Neutron可以通過SDN的方式進(jìn)行配置;

  3. 存儲(chǔ)池化模塊Cinder: OpenStack的存儲(chǔ)虛擬化,如果使用本地盤,則基于LVM,使用哪個(gè)LVM上分配的盤,也是通過scheduler來的。后來就有了將多臺(tái)機(jī)器的硬盤打成一個(gè)池的方式Ceph,而調(diào)度的過程,則在Ceph層完成。

OpenStack帶來私有云市場(chǎng)的紅海

有了OpenStack,所有的私有云廠商都瘋了,原來VMware在私有云市場(chǎng)賺的實(shí)在太多了,眼巴巴的看著,沒有對(duì)應(yīng)的平臺(tái)可以和他抗衡?,F(xiàn)在有了現(xiàn)成的框架,再加上自己的硬件設(shè)備,幾乎所有的IT廠商巨頭,全部都加入到社區(qū)里,將OpenStack開發(fā)為自己的產(chǎn)品,連同硬件設(shè)備一起,殺入私有云市場(chǎng)。

公有or私有? 網(wǎng)易云的選擇

網(wǎng)易云當(dāng)然也沒有錯(cuò)過這次風(fēng)口,上線了自己的OpenStack集群, 網(wǎng)易云基于OpenStack自主研發(fā)了IaaS服務(wù),在計(jì)算虛擬化方面,通過裁剪KVM鏡像,優(yōu)化虛擬機(jī)啟動(dòng)流程等改進(jìn),實(shí)現(xiàn)了虛擬機(jī)的秒級(jí)別啟動(dòng)。在網(wǎng)絡(luò)虛擬化方面,通過SDN和Openvswitch技術(shù),實(shí)現(xiàn)了虛擬機(jī)之間的高性能互訪。在存儲(chǔ)虛擬化方面,通過優(yōu)化Ceph存儲(chǔ),實(shí)現(xiàn)高性能云盤。

但是 網(wǎng)易云并沒有殺進(jìn)私有云市場(chǎng),而是使用OpenStack支撐起了自己的應(yīng)用,這是互聯(lián)網(wǎng)的思維。而僅僅是資源層面彈性是不夠的,還需要開發(fā)出對(duì)應(yīng)用部署友好的組件。例如數(shù)據(jù)庫(kù),負(fù)載均衡,緩存等,這些都是應(yīng)用部署必不可少的,也是 網(wǎng)易云在大規(guī)模應(yīng)用實(shí)踐中,千錘百煉過的。這些組件稱為PaaS。

第四階段:分,即容器

現(xiàn)在來談?wù)?,?yīng)用層面,即PaaS層。

前面一直在講IaaS層的故事,也即基礎(chǔ)設(shè)施即服務(wù),基本上在談?dòng)?jì)算、網(wǎng)絡(luò)、存儲(chǔ)的事情?,F(xiàn)在應(yīng)該說說應(yīng)用層,即PaaS層的事情了。

1. PaaS的定義與作用

IaaS的定義比較清楚,PaaS的定義就沒那么清楚了。有人把數(shù)據(jù)庫(kù)、負(fù)載均衡、緩存作為PaaS服務(wù);有人把大數(shù)據(jù)Hadoop,、Spark平臺(tái)作為PaaS服務(wù);還有人將應(yīng)用的安裝與管理,例如Puppet、 Chef,、Ansible作為PaaS服務(wù)。

其實(shí)PaaS主要用于管理應(yīng)用層。我總結(jié)為兩部分:一部分是你自己的應(yīng)用應(yīng)當(dāng)自動(dòng)部署,比如Puppet、Chef、Ansible、 Cloud Foundry等,可以通過腳本幫你部署;另一部分是你覺得復(fù)雜的通用應(yīng)用不用部署,比如數(shù)據(jù)庫(kù)、緩存、大數(shù)據(jù)平臺(tái),可以在云平臺(tái)上一點(diǎn)即得。

要么就是自動(dòng)部署,要么就是不用部署,總的來說就是應(yīng)用層你也少操心,就是PaaS的作用。當(dāng)然最好還是都不用去部署,一鍵可得,所以公有云平臺(tái)將通用的服務(wù)都做成了PaaS平臺(tái)。另一些你自己開發(fā)的應(yīng)用,除了你自己其他人不會(huì)知道,所以你可以用工具變成自動(dòng)部署。

2. PaaS的優(yōu)點(diǎn)

PaaS最大的優(yōu)點(diǎn),就是可以實(shí)現(xiàn)應(yīng)用層的彈性伸縮。比如在雙十一期間,10個(gè)節(jié)點(diǎn)要變成100個(gè)節(jié)點(diǎn),如果使用物理設(shè)備,再買90臺(tái)機(jī)器肯定來不及,僅僅有IaaS實(shí)現(xiàn)資源的彈性是不夠的,再創(chuàng)建90臺(tái)虛擬機(jī),也是空的,還是需要運(yùn)維人員一臺(tái)一臺(tái)地部署。所以有了PaaS就好了,一臺(tái)虛擬機(jī)啟動(dòng)后,馬上運(yùn)行自動(dòng)部署腳本,進(jìn)行應(yīng)用的安裝,90臺(tái)機(jī)器自動(dòng)安裝好了應(yīng)用,才是真正的彈性伸縮。

3. PaaS部署的問題

當(dāng)然這種部署方式也有一個(gè)問題,就是無(wú)論P(yáng)uppet、 Chef、Ansible把安裝腳本抽象的再好,說到底也是基于腳本的,然而應(yīng)用所在的環(huán)境千差萬(wàn)別。文件路徑的差別,文件權(quán)限的差別,依賴包的差別,應(yīng)用環(huán)境的差別,Tomcat、 PHP、 Apache等軟件版本的差別,JDK、Python等版本的差別,是否安裝了一些系統(tǒng)軟件,是否占用了哪些端口,都可能造成腳本執(zhí)行的不成功。所以看起來是一旦腳本寫好,就能夠快速?gòu)?fù)制了,但是環(huán)境稍有改變,就需要把腳本進(jìn)行新一輪的修改、測(cè)試、聯(lián)調(diào)。例如在數(shù)據(jù)中心寫好的腳本移到AWS上就不一定直接能用,在AWS上聯(lián)調(diào)好了,遷移到Google Cloud上也可能會(huì)再出問題。

容器的誕生

1. 容器的定義

于是容器便應(yīng)運(yùn)而生。容器是Container,Container另一個(gè)意思是集裝箱,其實(shí)容器的思想就是要變成軟件交付的集裝箱。集裝箱的特點(diǎn),一是打包,二是標(biāo)準(zhǔn)。設(shè)想沒有集裝箱的時(shí)代,如果將貨物從A運(yùn)到B,中間要經(jīng)過三個(gè)碼頭,換三次船的話,貨物每次都要卸下船來,擺的七零八落,然后換船的時(shí)候,需要重新擺放整齊,在沒有集裝箱的時(shí)候,船員們都需要在岸上待幾天再走。而在有了集裝箱后,所有的貨物都打包在一起了,并且集裝箱的尺寸全部一致,所以每次換船的時(shí)候,整體一個(gè)箱子搬過去就可以了,小時(shí)級(jí)別就能完成,船員再也不用長(zhǎng)時(shí)間上岸等待了。

2.容器在開發(fā)中的應(yīng)用

設(shè)想A就是程序員,B就是用戶,貨物就是代碼及運(yùn)行環(huán)境,中間的三個(gè)碼頭分別是開發(fā),測(cè)試,上線。
假設(shè)代碼的運(yùn)行環(huán)境如下:

  1. Ubuntu操作系統(tǒng)

  2. 創(chuàng)建用戶hadoop

  3. 下載解壓JDK 1.7在某個(gè)目錄下

  4. 將這個(gè)目錄加入JAVA_HOME和PATH的環(huán)境變量里面

  5. 將環(huán)境變量的export放在hadoop用戶的home目錄下的.bashrc文件中

  6. 下載并解壓tomcat 7

  7. 將war放到tomcat的webapp路徑下面

  8. 修改tomcat的啟動(dòng)參數(shù),將Java的Heap Size設(shè)為1024M

看,一個(gè)簡(jiǎn)單的Java網(wǎng)站,就需要考慮這么多零零散散的東西,如果不打包,就需要在開發(fā),測(cè)試,生產(chǎn)的每個(gè)環(huán)境上查看,保證環(huán)境的一致,甚至要將這些環(huán)境重新搭建一遍,就像每次將貨物打散了重裝一樣麻煩。中間稍有差池,比如開發(fā)環(huán)境用了JDK 1.8,而線上是JDK 1.7;比如開發(fā)環(huán)境用了root用戶,線上需要使用hadoop用戶,都可能導(dǎo)致程序的運(yùn)行失敗。

容器的誕生

云計(jì)算的前世今生(上)中提到:云計(jì)算解決了基礎(chǔ)資源層的彈性伸縮,卻沒有解決PaaS層應(yīng)用隨基礎(chǔ)資源層彈性伸縮而帶來的批量、快速部署問題。于是容器應(yīng)運(yùn)而生。

容器是Container,Container另一個(gè)意思是集裝箱,其實(shí)容器的思想就是要變成軟件交付的集裝箱。集裝箱的特點(diǎn),一是打包,二是標(biāo)準(zhǔn)。

云計(jì)算的發(fā)展怎樣的

在沒有集裝箱的時(shí)代,假設(shè)將貨物從A運(yùn)到B,中間要經(jīng)過三個(gè)碼頭、換三次船。每次都要將貨物卸下船來,擺的七零八落,然后搬上船重新整齊擺好。因此在沒有集裝箱的時(shí)候,每次換船,船員們都要在岸上待幾天才能走。

云計(jì)算的發(fā)展怎樣的

有了集裝箱以后,所有的貨物都打包在一起了,并且集裝箱的尺寸全部一致,所以每次換船的時(shí)候,一個(gè)箱子整體搬過去就行了,小時(shí)級(jí)別就能完成,船員再也不能上岸長(zhǎng)時(shí)間耽擱了。這是集裝箱“打包”、“標(biāo)準(zhǔn)”兩大特點(diǎn)在生活中的應(yīng)用。下面用一個(gè)簡(jiǎn)單的案例來看看容器在開發(fā)部署中的實(shí)際應(yīng)用。

假設(shè)有一個(gè)簡(jiǎn)單的Java網(wǎng)站需要上線,代碼的運(yùn)行環(huán)境如下:

云計(jì)算的發(fā)展怎樣的

看,一個(gè)簡(jiǎn)單的Java網(wǎng)站,就有這么多零零散散的東西!這就像很多零碎地貨物,如果不打包,就需要在開發(fā)、測(cè)試、生產(chǎn)的每個(gè)環(huán)境上重新查看以保證環(huán)境的一致,有時(shí)甚至要將這些環(huán)境重新搭建一遍,就像每次將貨物卸載、重裝一樣麻煩。中間稍有差池,比如開發(fā)環(huán)境用了JDK 1.8,而線上是JDK 1.7;比如開發(fā)環(huán)境用了root用戶,線上需要使用hadoop用戶,都可能導(dǎo)致程序的運(yùn)行失敗。

那么容器如何對(duì)應(yīng)用打包呢?還是要學(xué)習(xí)集裝箱,首先要有個(gè)封閉的環(huán)境,將貨物封裝起來,讓貨物之間互不干擾,互相隔離,這樣裝貨卸貨才方便。好在ubuntu中的lxc技術(shù)早就能做到這一點(diǎn)。

封閉的環(huán)境主要使用了兩種技術(shù),一種是看起來是隔離的技術(shù),稱為namespace,也即每個(gè)namespace中的應(yīng)用看到的是不同的IP地址、用戶空間、程號(hào)等。另一種是用起來是隔離的技術(shù),稱為cgroup,也即明明整臺(tái)機(jī)器有很多的CPU、內(nèi)存,而一個(gè)應(yīng)用只能用其中的一部分。有了這兩項(xiàng)技術(shù),集裝箱的鐵盒子我們是焊好了,接下來是決定往里面放什么。

最簡(jiǎn)單粗暴的方法,就是將上面列表中所有的都放到集裝箱里面。但是這樣太大了!因?yàn)榧词鼓惆惭b一個(gè)干干靜靜的ubuntu操作系統(tǒng),什么都不裝,就很大了。把操作系統(tǒng)裝進(jìn)容器相當(dāng)于把船也放到了集裝箱里面!傳統(tǒng)的虛擬機(jī)鏡像就是這樣的,動(dòng)輒幾十G。答案當(dāng)然是NO!所以第一項(xiàng)操作系統(tǒng)不能裝進(jìn)容器。

撇下第一項(xiàng)操作系統(tǒng),剩下的所有的加起來,也就幾百M(fèi),就輕便多了。因此一臺(tái)服務(wù)器上的容器是共享操作系統(tǒng)內(nèi)核的,容器在不同機(jī)器之間的遷移不帶內(nèi)核,這也是很多人聲稱容器是輕量級(jí)的虛擬機(jī)的原因。輕不白輕,自然隔離性就差了,一個(gè)容器讓操作系統(tǒng)崩潰了,其他容器也就跟著崩潰了,這相當(dāng)于一個(gè)集裝箱把船壓漏水了,所有的集裝箱一起沉。

另一個(gè)需要撇下的就是隨著應(yīng)用的運(yùn)行而產(chǎn)生并保存在本地的數(shù)據(jù)。這些數(shù)據(jù)多以文件的形式存在,例如數(shù)據(jù)庫(kù)文件、文本文件。這些文件會(huì)隨著應(yīng)用的運(yùn)行,越來越大,如果這些數(shù)據(jù)也放在容器里面,會(huì)讓容器變得很大,影響容器在不同環(huán)境的遷移。而且這些數(shù)據(jù)在開發(fā)、測(cè)試、線上環(huán)境之間的遷移是沒有意義的,生產(chǎn)環(huán)境不可能用測(cè)試環(huán)境的文件,所以往往這些數(shù)據(jù)也是保存在容器外面的存儲(chǔ)設(shè)備上。也是為什么人們稱容器是無(wú)狀態(tài)的。

至此集裝箱焊好了,貨物也裝進(jìn)去了,接下來就是如何將這個(gè)集裝箱標(biāo)準(zhǔn)化,從而在哪艘船上都能運(yùn)輸。這里的標(biāo)準(zhǔn)一個(gè)是鏡像,一個(gè)是容器的運(yùn)行環(huán)境。

所謂的鏡像,就是將你焊好集裝箱的那個(gè)時(shí)刻,將集裝箱的狀態(tài)保存下來,就像孫悟空說定,集裝箱里面就定在了那一刻,然后將這一刻的狀態(tài)保存成一系列文件。這些文件的格式是標(biāo)準(zhǔn)的,誰(shuí)看到這些文件,都能還原當(dāng)時(shí)定住的那個(gè)時(shí)刻。將鏡像還原成運(yùn)行時(shí)的過程(就是讀取鏡像文件,還原那個(gè)時(shí)刻的過程)就是容器的運(yùn)行的過程。除了大名鼎鼎的Docker,還有其他的容器,例如AppC、Mesos Container,都能運(yùn)行容器鏡像。所以說容器不等于Docker。

總而言之,容器是輕量級(jí)的、隔離差的、適用于無(wú)狀態(tài)的,可以基于鏡像標(biāo)準(zhǔn)實(shí)現(xiàn)跨主機(jī)、跨環(huán)境的隨意遷移。

有了容器,使得PaaS層對(duì)于用戶自身應(yīng)用的自動(dòng)部署變得快速而優(yōu)雅。容器快,快在了兩方面,第一是虛擬機(jī)啟動(dòng)的時(shí)候要先啟動(dòng)操作系統(tǒng),容器不用啟動(dòng)操作系統(tǒng),因?yàn)槭枪蚕韮?nèi)核的。第二是虛擬機(jī)啟動(dòng)后使用腳本安裝應(yīng)用,容器不用安裝應(yīng)用,因?yàn)橐呀?jīng)打包在鏡像里面了。所以最終虛擬機(jī)的啟動(dòng)是分鐘級(jí)別,而容器的啟動(dòng)是秒級(jí)。容器咋這么神奇。其實(shí)一點(diǎn)都不神奇,第一是偷懶少干活了,第二是提前把活干好了。

因?yàn)槿萜鞯膯?dòng)快,人們往往不會(huì)創(chuàng)建一個(gè)個(gè)小的虛擬機(jī)來部署應(yīng)用,因?yàn)檫@樣太費(fèi)時(shí)間了,而是創(chuàng)建一個(gè)大的虛擬機(jī),然后在大的虛擬機(jī)里面再劃分容器,而不同的用戶不共享大的虛擬機(jī),可以實(shí)現(xiàn)操作系統(tǒng)內(nèi)核的隔離。這又是一次合久必分的過程。由IaaS層的虛擬機(jī)池,劃分為更細(xì)粒度的容器池。

容器管理平臺(tái)

有了容器的管理平臺(tái),又是一次分久必合的過程。

容器的粒度更加細(xì),管理起來更難管,甚至是手動(dòng)操作難以應(yīng)對(duì)的。假設(shè)你有100臺(tái)物理機(jī),其實(shí)規(guī)模不是太大,用Excel人工管理是沒問題的,但是一臺(tái)上面開10臺(tái)虛擬機(jī),虛擬機(jī)的個(gè)數(shù)就是1000臺(tái),人工管理已經(jīng)很困難了,但是一臺(tái)虛擬機(jī)里面開10個(gè)容器,就是10000個(gè)容器,你是不是已經(jīng)徹底放棄人工運(yùn)維的想法了。

所以容器層面的管理平臺(tái)是一個(gè)新的挑戰(zhàn),關(guān)鍵字就是自動(dòng)化:

自發(fā)現(xiàn):容器與容器之間的相互配置還能像虛擬機(jī)一樣,記住IP地址,然后互相配置嗎?這么多容器,你怎么記得住一旦一臺(tái)虛擬機(jī)掛了重啟,IP改變,應(yīng)該改哪些配置,列表長(zhǎng)度至少萬(wàn)行級(jí)別的啊。所以容器之間的配置通過名稱來的,無(wú)論容器跑到哪臺(tái)機(jī)器上,名稱不變,就能訪問到。

自修復(fù):容器掛了,或是進(jìn)程宕機(jī)了,能像虛擬機(jī)那樣,登陸上去查看一下進(jìn)程狀態(tài),如果不正常重啟一下么?你要登陸萬(wàn)臺(tái)docker了。所以容器的進(jìn)程掛了,容器就自動(dòng)掛掉了,然后自動(dòng)重啟。

彈性自伸縮 Auto Scaling:當(dāng)容器的性能不足的時(shí)候,需要手動(dòng)伸縮,手動(dòng)部署么?當(dāng)然也要自動(dòng)來。

當(dāng)前火熱的容器管理平臺(tái)有三大流派:

一個(gè)是Kubernetes,我們稱為段譽(yù)型。段譽(yù)(Kubernetes)的父親(Borg)武功高強(qiáng),出身皇族(Google),管理過偌大的一個(gè)大理國(guó)(Borg是Google數(shù)據(jù)中心的容器管理平臺(tái))。作為大理段式后裔,段譽(yù)的武功基因良好(Kubernetes的理念設(shè)計(jì)比較完善),周圍的高手云集,習(xí)武環(huán)境也好(Kubernetes生態(tài)活躍,熱度高),雖然剛剛出道的段譽(yù)武功不及其父親,但是只要跟著周圍的高手不斷切磋,武功既可以飛速提升。

一個(gè)是Mesos,我們稱為喬峰型。喬峰(Mesos)的主要功夫降龍十八掌(Mesos的調(diào)度功能)獨(dú)步武林,為其他幫派所無(wú)。而且喬峰也管理過人數(shù)眾多的丐幫(Mesos管理過Tweeter的容器集群)。后來喬峰從丐幫出來,在江湖中特例獨(dú)行(Mesos的創(chuàng)始人成立了公司Mesosphere)。喬峰的優(yōu)勢(shì)在于,喬峰的降龍十八掌(Mesos)就是在丐幫中使用的降龍十八掌,相比與段譽(yù)初學(xué)其父的武功來說,要成熟很多。但是缺點(diǎn)是,降龍十八掌只掌握在少數(shù)的幾個(gè)丐幫幫主手中(Mesos社區(qū)還是以Mesosphere為主導(dǎo)),其他丐幫兄弟只能遠(yuǎn)遠(yuǎn)崇拜喬峰,而無(wú)法相互切磋(社區(qū)熱度不足)。

一個(gè)是Swarm,我們稱為慕容型。慕容家族(Swarm是Docker家族的集群管理軟件)的個(gè)人功夫是非常棒的(Docker可以說稱為容器的事實(shí)標(biāo)準(zhǔn)),但是看到段譽(yù)和喬峰能夠管理的組織規(guī)模越來越大,有一統(tǒng)江湖的趨勢(shì),著實(shí)眼紅了,于是開始想創(chuàng)建自己的慕容鮮卑帝國(guó)(推出Swarm容器集群管理軟件)。但是個(gè)人功夫好,并不代表著組織能力強(qiáng)(Swarm的集群管理能力),好在慕容家族可以借鑒段譽(yù)和喬峰的組織管理經(jīng)驗(yàn),學(xué)習(xí)各家公司,以彼之道,還施彼身,使得慕容公子的組織能力(Swarm借鑒了很多前面的集群管理思想)也在逐漸的成熟中。

三大容器門派,到底鹿死誰(shuí)手,誰(shuí)能一統(tǒng)江湖,尚未可知。

網(wǎng)易之所以選型Kubernetes作為自己的容器管理平臺(tái),是因?yàn)榛?Borg 成熟的經(jīng)驗(yàn)打造的 Kubernetes,為容器編排管理提供了完整的開源方案,并且社區(qū)活躍,生態(tài)完善,積累了大量分布式、服務(wù)化系統(tǒng)架構(gòu)的最佳實(shí)踐。

容器初體驗(yàn)

想不想嘗試一下最先進(jìn)的容器管理平臺(tái)呢?我們先了解一下Docker的生命周期。如圖所示。

圖中最中間就是最核心的兩個(gè)部分,一個(gè)是鏡像Images,一個(gè)是容器Containers。鏡像運(yùn)行起來就是容器。容器運(yùn)行的過程中,基于原始鏡像做了改變,比如安裝了程序,添加了文件,也可以提交回去(commit)成為鏡像。如果大家安裝過系統(tǒng),鏡像有點(diǎn)像GHOST鏡像,從GHOST鏡像安裝一個(gè)系統(tǒng),運(yùn)行起來,就相當(dāng)于容器;容器里面自帶應(yīng)用,就像GHOST鏡像安裝的系統(tǒng)里面不是裸的操作系統(tǒng),里面可能安裝了微信,QQ,視頻播放軟件等。安裝好的系統(tǒng)使用的過程中又安裝了其他的軟件,或者下載了文件,還可以將這個(gè)系統(tǒng)重新GHOST成一個(gè)鏡像,當(dāng)其他人通過這個(gè)鏡像再安裝系統(tǒng)的時(shí)候,則其他的軟件也就自帶了。

普通的GHOST鏡像就是一個(gè)文件,但是管理不方便,比如如果有十個(gè)GHOST鏡像的話,你可能已經(jīng)記不清楚哪個(gè)鏡像里面安裝了哪個(gè)版本的軟件了。所以容器鏡像有tag的概念,就是一個(gè)標(biāo)簽,比如dev-1.0,dev-1.1,production-1.1等,凡是能夠幫助你區(qū)分不同鏡像的,都可以。為了鏡像的統(tǒng)一管理,有一個(gè)鏡像庫(kù)的東西,可以通過push將本地的鏡像放到統(tǒng)一的鏡像庫(kù)中保存,可以通過pull將鏡像庫(kù)中的鏡像拉到本地來。

從鏡像運(yùn)行一個(gè)容器可使用下面的命令,如果初步使用Docker,記下下面這一個(gè)命令就可以了。

這行命令會(huì)啟動(dòng)一個(gè)里面安裝了MySQL的容器。其中docker run就是運(yùn)行一個(gè)容器;—name就是給這個(gè)容器起個(gè)名字;-v 就是掛數(shù)據(jù)盤,將外面的一個(gè)目錄/my/own/datadir掛載到容器里面的一個(gè)目錄/var/lib/mysql作為數(shù)據(jù)盤,外面的目錄是在容器所運(yùn)行的主機(jī)上的,也可以是遠(yuǎn)程的一個(gè)云盤;-e 是設(shè)置容器運(yùn)行環(huán)境的環(huán)境變量,環(huán)境變量是最常使用的設(shè)置參數(shù)的方式,例如這里設(shè)置mysql的密碼。mysql:tag就是鏡像的名字和標(biāo)簽。

docker stop可以停止這個(gè)容器,start可以再啟動(dòng)這個(gè)容器,restart可以重啟這個(gè)容器。在容器內(nèi)部做了改變,例如安裝了新的軟件,產(chǎn)生了新的文件,則調(diào)用docker commit變成新的鏡像。

鏡像生產(chǎn)過程,除了可以通過啟動(dòng)一個(gè)docker,手動(dòng)修改,然后調(diào)用docker commit形成新鏡像之外,還可以通過書寫Dockerfile,通過docker build來編譯這個(gè)Dockerfile來形成新鏡像。為什么要這樣做呢?前面的方式太不自動(dòng)化了,需要手工干預(yù),而且還經(jīng)常會(huì)忘了手工都做了什么。用Dockerfile可以很好的解決這個(gè)問題。

Dockerfile的一個(gè)簡(jiǎn)單的例子如下:

這其實(shí)是一個(gè)鏡像的生產(chǎn)說明書,Docker build的過程就是根據(jù)這個(gè)生產(chǎn)說明書來生產(chǎn)鏡像:

FROM基礎(chǔ)鏡像,先下載這個(gè)基礎(chǔ)鏡像,然后從這個(gè)鏡像啟動(dòng)一個(gè)容器,并且登陸到容器里面;

RUN運(yùn)行一個(gè)命令,在容器里面運(yùn)行這個(gè)命令;

COPY/ADD將一些文件添加到容器里面;

最終給容器設(shè)置啟動(dòng)命令 ENTRYPOINT,這個(gè)命令不在鏡像生成過程中執(zhí)行,而是在容器運(yùn)行的時(shí)候作為主程序執(zhí)行;

將所有的修改commit成鏡像。

這里需要說明一下的就是主程序,是Docker里面一個(gè)重要的概念,雖然鏡像里面可以安裝很多的程序,但是必須有一個(gè)主程序,主程序和容器的生命周期完全一致,主程序在則容器在,主程序亡則容器亡。

就像圖中展示的一樣,容器是一個(gè)資源限制的框,但是這個(gè)框沒有底,全靠主進(jìn)程撐著,主進(jìn)程掛了,衣服架子倒了,衣服也就垮了。

了解了如何運(yùn)行一個(gè)獨(dú)立的容器,接下來介紹如何使用容器管理平臺(tái)。

容器管理平臺(tái)初體驗(yàn)

云計(jì)算的發(fā)展怎樣的

容器管理平臺(tái)會(huì)對(duì)容器做更高的抽象,容器不再是單打獨(dú)斗,而且組成集團(tuán)軍共同戰(zhàn)斗。多個(gè)容器組成一個(gè)Pod,這幾個(gè)容器親如兄弟,干的也是相關(guān)性很強(qiáng)的活,能夠通過localhost訪問彼此,真是兄弟齊心,力可斷金。有的任務(wù)一幫兄弟還剛不住,就需要多個(gè)Pod合力完成,這個(gè)由ReplicationController進(jìn)行控制,可以將一個(gè)Pod復(fù)制N個(gè)副本,同時(shí)承載任務(wù),眾人拾柴火焰高。

N個(gè)Pod如果對(duì)外散兵作戰(zhàn),一是無(wú)法合力,二是給人很亂的感覺,因而需要有一個(gè)老大,作為代言人,將大家團(tuán)結(jié)起來,一致對(duì)外,這就是Service。老大對(duì)外提供統(tǒng)一的虛擬IP和端口,并將這個(gè)IP和服務(wù)名關(guān)聯(lián)起來,訪問服務(wù)名,則自動(dòng)映射為虛擬IP。老大的意思就是,如果外面要訪問我這個(gè)團(tuán)隊(duì),喊一聲名字就可以,例如”雷鋒班,幫敬老院打掃衛(wèi)生!”,你不用管雷鋒班的那個(gè)人去打掃衛(wèi)生,每個(gè)人打掃哪一部分,班長(zhǎng)會(huì)統(tǒng)一分配。

最上層通過namespace分隔完全隔離的環(huán)境,例如生產(chǎn)環(huán)境,測(cè)試環(huán)境,開發(fā)環(huán)境等。就像軍隊(duì)分華北野戰(zhàn)軍,東北野戰(zhàn)軍一樣。野戰(zhàn)軍立正,出發(fā),部署一個(gè)Tomcat的Java應(yīng)用。

“云計(jì)算的發(fā)展怎樣的”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

當(dāng)前題目:云計(jì)算的發(fā)展怎樣的
地址分享:http://bm7419.com/article32/jjcspc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化網(wǎng)站設(shè)計(jì)、微信公眾號(hào)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)