作者:劉超
轉(zhuǎn)自【劉超的通俗云計(jì)算】
什么是云計(jì)算
早在十年前遣妥,市場上就出現(xiàn)了很多和云計(jì)算相關(guān)的崗位竹祷,當(dāng)時(shí)正是云計(jì)算技術(shù)最火熱的時(shí)代谈跛,不管是BAT還是華為等企業(yè)都開始布局云計(jì)算,于是OpenStack研發(fā)塑陵、容器研發(fā)感憾、底層開發(fā)等相關(guān)崗位相應(yīng)地也越來越多,雖然這幾年大數(shù)據(jù)和AI的風(fēng)頭已經(jīng)完全壓過了云計(jì)算令花,但是這一門技術(shù)仍然在現(xiàn)如今的技術(shù)體系中占有很重要的位置阻桅。那么,到底什么是云計(jì)算彭则,就是我們每一個要學(xué)習(xí)云計(jì)算技術(shù)的朋友要了解的事情了鳍刷,根據(jù)百度百科的介紹
大數(shù)據(jù)(big data)占遥,IT行業(yè)術(shù)語俯抖,是指無法在一定時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)集合瓦胎,是需要新處理模式才能具有更強(qiáng)的決策力芬萍、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息資產(chǎn)搔啊。
在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數(shù)據(jù)時(shí)代》 [1] 中大數(shù)據(jù)指不用隨機(jī)分析法(抽樣調(diào)查)這樣捷徑柬祠,而采用所有數(shù)據(jù)進(jìn)行分析處理。大數(shù)據(jù)的5V特點(diǎn)(IBM提出):Volume(大量)负芋、Velocity(高速)漫蛔、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)莽龟。 [2]
思維導(dǎo)圖
云計(jì)算的發(fā)展史
物理機(jī)時(shí)代
云計(jì)算的整個過程蠕嫁,用一個詞來講就是“分久必合,合久必分”毯盈。
云計(jì)算其實(shí)主要解決了四個方面的內(nèi)容:計(jì)算剃毒,網(wǎng)絡(luò),存儲搂赋,應(yīng)用赘阀。前三者是資源層面的,最后是應(yīng)用層面的脑奠。
計(jì)算是CPU和內(nèi)存基公,為啥?1+1這個最簡單的算法是把1放在內(nèi)存里面宋欺,運(yùn)行加法是CPU做的酌媒,做完了結(jié)果2又保存在內(nèi)存里面。
網(wǎng)絡(luò)就是你插根網(wǎng)線能上網(wǎng)迄靠。
存儲就是你下個電影有地方放秒咨。本次討論就是圍繞這四個部分來講的。
在原始社會掌挚,大家最愛用的是物理設(shè)備:
服務(wù)器用的是物理機(jī)雨席,例如戴爾,惠普吠式,IBM陡厘,聯(lián)想等物理服務(wù)器,隨著硬件設(shè)備的進(jìn)步特占,物理服務(wù)器越來越強(qiáng)大了糙置,64核128G內(nèi)存都算是普通配置。
網(wǎng)絡(luò)用的是硬件交換機(jī)和路由器是目,例如思科的谤饭,華為的,從1GE到10GE懊纳,現(xiàn)在有40GE和100GE揉抵,帶寬越來越牛。
存儲方面有的用普通的磁盤嗤疯,也有了更快的SSD盤冤今。容量從M,到G茂缚,連筆記本電腦都能配置到T戏罢,更何況磁盤陣列屋谭。
如果部署應(yīng)用直接使用物理機(jī),看起來很爽龟糕,總有種土豪的感覺戴而,卻又大大的缺點(diǎn):
人工運(yùn)維:如果你在一臺服務(wù)器上安裝軟件,把系統(tǒng)安裝壞了翩蘸,怎么辦所意?只有重裝。當(dāng)你想配置一下交換機(jī)的參數(shù)催首,需要串口連上去進(jìn)行配置扶踊。當(dāng)你想增加一塊磁盤,總要買一塊插進(jìn)服務(wù)器郎任。這些都需要人工來秧耗,而且很大可能要求機(jī)房。你們公司在北五環(huán)舶治,機(jī)房在南六環(huán)分井,這酸爽。
浪費(fèi)資源:其實(shí)你只想部署一個小小的網(wǎng)站霉猛,卻要用128G的內(nèi)存尺锚。混著部署吧惜浅,就有隔離性的問題瘫辩。
隔離性差:你把好多的應(yīng)用部署在同一臺物理機(jī)上,他們之間搶內(nèi)存坛悉,搶cpu伐厌,一個寫滿了硬盤,另一個就沒法用了裸影,一個弄掛了內(nèi)核挣轨,另一個也同時(shí)掛了,如果部署兩個相同的應(yīng)用轩猩,端口還會沖突卷扮,動不動就會出錯。
于是有了第一次合久必分的過程界轩,叫做虛擬化画饥。所謂虛擬化,就是把實(shí)的變成虛的浊猾。
虛擬機(jī)的誕生
物理機(jī)變?yōu)樘摂M機(jī):cpu是虛擬的,內(nèi)存是虛擬的热鞍,內(nèi)核是虛擬的葫慎,硬盤是虛擬的衔彻。
物理交換機(jī)變?yōu)樘摂M交換機(jī):網(wǎng)卡是虛擬的,交換機(jī)是虛擬的偷办,帶寬也是虛擬的艰额。
物理存儲變成虛擬存儲:多塊硬盤虛擬成一大塊。
虛擬化很好的解決了上面的三個問題:
人工運(yùn)維:虛擬機(jī)的創(chuàng)建和刪除都可以遠(yuǎn)程操作椒涯,虛擬機(jī)被玩壞了柄沮,刪了再建一個分鐘級別的。虛擬網(wǎng)絡(luò)的配置也可以遠(yuǎn)程操作废岂,創(chuàng)建網(wǎng)卡祖搓,分配帶寬都是調(diào)用接口就能搞定的。
浪費(fèi)資源:虛擬化了以后湖苞,資源可以分配的很小很小拯欧,比如1個cpu,1G內(nèi)存财骨,1M帶寬镐作,1G硬盤,都可以被虛擬出來隆箩。
隔離性差:每個虛擬機(jī)有獨(dú)立的cpu, 內(nèi)存该贾,硬盤,網(wǎng)卡捌臊,不同虛擬機(jī)的應(yīng)用互不干擾靶庙。
但是虛擬化還有以下的缺點(diǎn),通過虛擬化軟件創(chuàng)建虛擬機(jī)娃属,需要人工指定放在哪臺機(jī)器上六荒,硬盤放在哪個存儲設(shè)備上,網(wǎng)絡(luò)的VLAN ID矾端,帶寬具體的配置掏击,都需要人工指定。所以單單使用虛擬化的運(yùn)維工程師往往有一個Excel表格秩铆,有多少臺機(jī)器砚亭,每臺機(jī)器部署了哪些虛擬機(jī)。所以殴玛,一般虛擬化的集群數(shù)目都不是特別的大捅膘。
在虛擬化階段,領(lǐng)跑者是Vmware滚粟,可以實(shí)現(xiàn)基本的計(jì)算寻仗,網(wǎng)絡(luò),存儲的虛擬化凡壤。
當(dāng)然這個世界有閉源署尤,就有開源耙替,有windows就有l(wèi)inux,有apple就有andord曹体,有Vmware俗扇,就有Xen和KVM。在開源虛擬化方面箕别,Xen方面Citrix做的不錯铜幽,后來Redhat在KVM發(fā)力不少。
對于網(wǎng)絡(luò)虛擬化串稀,有Openvswitch除抛,可以通過命令創(chuàng)建網(wǎng)橋,網(wǎng)卡厨诸,設(shè)置VLAN镶殷,設(shè)置帶寬。
對于存儲虛擬化微酬,對于本地盤绘趋,有LVM,可以將多個硬盤變成一大塊盤颗管,然后在里面切出一小塊給用戶陷遮。
為了解決虛擬化階段剩余的問題,于是有了分久必合的過程垦江。這個過程我們可以形象的稱為池化帽馋,也就是說虛擬化已經(jīng)將資源分的很細(xì)了,但是對于如此細(xì)粒度的資源靠Excel去管理比吭,成本太高绽族,能不能打成一個大的池,當(dāng)需要資源的時(shí)候衩藤,幫助用戶自動的選擇吧慢,而非用戶指定。所以這個階段的關(guān)鍵點(diǎn):調(diào)度器Scheduler赏表。
公有云和私有云
于是vmware有了自己的vcloud检诗。
于是基于Xen和KVM的私有云平臺CloudStack,后來Citrix將其收購后開源瓢剿。
當(dāng)這些私有云平臺在用戶的數(shù)據(jù)中心里面賣的其貴無比逢慌,賺的盆滿缽滿的時(shí)候。有其他的公司開始了另外的選擇间狂,這就是AWS和Google攻泼,開始了公有云領(lǐng)域的探索。
AWS最初就是基于Xen技術(shù)進(jìn)行虛擬化的,并且最終形成了公有云平臺坠韩。也許AWS最初只是不想讓自己的電商領(lǐng)域的利潤全部交給私有云廠商吧距潘,于是自己的云平臺首先支撐起了自己的業(yè)務(wù)炼列,在這個過程中只搁,AWS自己嚴(yán)肅的使用了自己的云計(jì)算平臺,使得公有云平臺不是對于資源的配置更加友好俭尖,而是對于應(yīng)用的部署更加友好氢惋,最終大放異彩。
如果我們仔細(xì)觀察就會發(fā)現(xiàn)稽犁,私有云和公有云使用的是類似的技術(shù)焰望,卻在產(chǎn)品設(shè)計(jì)上是完全不同的兩種生物。私有云廠商和公有云廠商也擁有類似的技術(shù)已亥,卻在產(chǎn)品運(yùn)營上呈現(xiàn)出完全不同的基因熊赖。
私有云廠商都是賣資源的,所以往往在賣私有云平臺的時(shí)候往往伴隨著賣計(jì)算虑椎,網(wǎng)絡(luò)震鹉,存儲設(shè)備。在產(chǎn)品設(shè)計(jì)上捆姜,私有云廠商往往強(qiáng)調(diào)又長又詳盡传趾,但是客戶幾乎不會使用的計(jì)算,網(wǎng)絡(luò)泥技,存儲的技術(shù)參數(shù)浆兰,因?yàn)檫@些參數(shù)可以用來和友商對標(biāo)的過程中占盡優(yōu)勢。私有云的廠商幾乎沒有自己的大規(guī)模應(yīng)用珊豹,所以私有云廠商的平臺做出來是給別人用的簸呈,自己不會大規(guī)模使用,于是產(chǎn)品往往圍繞資源展開店茶,而不會對應(yīng)用的部署友好蜕便。
公有云的廠商往往都是有自己的大規(guī)模應(yīng)用需要部署的,所以其產(chǎn)品的設(shè)計(jì)忽妒,可以將常見的應(yīng)用部署所需要的模塊作為組件提供出來玩裙,用戶可以像拼積木一樣,拼接一個適用于自己應(yīng)用的架構(gòu)段直。公有云廠商不必要關(guān)心各種技術(shù)參數(shù)的PK吃溅,不必關(guān)心是否開源,是否兼容各種虛擬化平臺鸯檬,兼容各種服務(wù)器設(shè)備决侈,網(wǎng)絡(luò)設(shè)備,存儲設(shè)備。你管我用什么赖歌,客戶部署應(yīng)用方便就好枉圃。
OpenStack的誕生
當(dāng)然公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了庐冯,沒錯孽亲,互聯(lián)網(wǎng)行業(yè)嘛,基本上就是一家獨(dú)大展父。第二名如何逆襲呢返劲?開源是很好的辦法,讓整個行業(yè)大家一起為這個云平臺出力栖茉,兄弟們篮绿,大家一起上。于是Rackspace與美國航空航天局(NASA)合作創(chuàng)始了開源云平臺OpenStack吕漂。OpenStack現(xiàn)在發(fā)展的和AWS有點(diǎn)像了亲配,所以從OpenStack的模塊組成,可以看到云計(jì)算池化的方法惶凝。
OpenStack包含哪些組件呢吼虎?
計(jì)算池化模塊Nova:OpenStack的計(jì)算虛擬化主要使用KVM,然而到底在那個物理機(jī)上開虛擬機(jī)呢梨睁,這要靠nova-scheduler鲸睛。
網(wǎng)絡(luò)池化模塊Neutron:OpenStack的網(wǎng)絡(luò)虛擬化主要使用Openvswitch,然而對于每一個Openvswitch的虛擬網(wǎng)絡(luò)坡贺,虛擬網(wǎng)卡官辈,VLAN,帶寬的配置遍坟,不需要登錄到集群上配置拳亿,Neutron可以通過SDN的方式進(jìn)行配置。
存儲池化模塊Cinder:OpenStack的存儲虛擬化愿伴,如果使用本地盤肺魁,則基于LVM,使用哪個LVM上分配的盤隔节,也是用過scheduler來的鹅经。后來就有了將多臺機(jī)器的硬盤打成一個池的方式Ceph,則調(diào)度的過程怎诫,則在Ceph層完成瘾晃。
有了OpenStack,所有的私有云廠商都瘋了幻妓,原來VMware在私有云市場實(shí)在賺的太多了蹦误,眼巴巴的看著,沒有對應(yīng)的平臺可以和他抗衡。現(xiàn)在有了現(xiàn)成的框架强胰,再加上自己的硬件設(shè)備舱沧,你可以想象到的所有的IT廠商的巨頭,全部加入到社區(qū)里面來偶洋,將OpenStack開發(fā)為自己的產(chǎn)品熟吏,連同硬件設(shè)備一起,殺入私有云市場涡真。
網(wǎng)易當(dāng)然也沒有錯過這次風(fēng)口分俯,上線了自己的OpenStack集群肾筐,網(wǎng)易蜂巢基于OpenStack自主研發(fā)了IaaS服務(wù)哆料,在計(jì)算虛擬化方面,通過裁剪KVM鏡像吗铐,優(yōu)化虛擬機(jī)啟動流程等改進(jìn)东亦,實(shí)現(xiàn)了虛擬機(jī)的秒級別啟動。在網(wǎng)絡(luò)虛擬化方面唬渗,通過SDN和Openvswitch技術(shù)典阵,實(shí)現(xiàn)了虛擬機(jī)之間的高性能互訪。在存儲虛擬化方面镊逝,通過優(yōu)化Ceph存儲壮啊,實(shí)現(xiàn)高性能云盤。
但是網(wǎng)易并沒有殺進(jìn)私有云市場撑蒜,而是使用OpenStack支撐起了自己的應(yīng)用歹啼,這是互聯(lián)網(wǎng)的思維,沒錯座菠。僅僅是資源層面彈性是不夠的狸眼,還需要開發(fā)出對應(yīng)用部署友好的組件。例如數(shù)據(jù)庫浴滴,負(fù)載均衡拓萌,緩存等,這些都是應(yīng)用部署必不可少的升略,也是網(wǎng)易在大規(guī)模應(yīng)用實(shí)踐中微王,千錘百煉過的。這些組件稱為PaaS品嚣。
從IAAS到PAAS
前面一直在講IaaS層的故事炕倘,也即基礎(chǔ)設(shè)施即服務(wù),基本上在談計(jì)算腰根,網(wǎng)絡(luò)激才,存儲的事情。現(xiàn)在應(yīng)該說說應(yīng)用層的事情了。
IaaS的定義比較清楚瘸恼,PaaS的定義就沒那么清楚了劣挫,有的把數(shù)據(jù)庫,負(fù)載均衡东帅,緩存作為PaaS服務(wù)压固,有的把大數(shù)據(jù)Hadoop, Spark平臺作為PaaS服務(wù),有的講應(yīng)用的安裝與管理靠闭,例如Puppet, Chef, Ansible作為PaaS服務(wù)帐我。
其實(shí)PaaS主要用于管理應(yīng)用層的,我總結(jié)兩部分:一部分是你自己的應(yīng)用應(yīng)當(dāng)自動部署愧膀,比如Puppet, Chef, Ansible, Cloud Foundry等拦键,可以通過腳本幫你部署,一部分是你覺得復(fù)雜的通用應(yīng)用不用部署檩淋,比如數(shù)據(jù)庫芬为,緩存,大數(shù)據(jù)平臺蟀悦,可以在云平臺上一點(diǎn)即得媚朦。
要么就是自動部署,要么不用部署日戈,總的來說就是應(yīng)用層您也少操心询张,就是PaaS的作用。當(dāng)然最好是都不用部署浙炼,一鍵可得份氧,所以公有云平臺將通用的服務(wù)都做成了PaaS平臺。另一些應(yīng)用鼓拧,是您自己開發(fā)的半火,除了你自己,其他人都不知道季俩,所以您可以用工具變成自動部署钮糖。
有了PaaS最大的優(yōu)點(diǎn),就是可以實(shí)現(xiàn)應(yīng)用層的彈性伸縮酌住。比如雙十一來了店归,10個節(jié)點(diǎn)要變成100個節(jié)點(diǎn),如果使用物理設(shè)備酪我,再買90臺機(jī)器固然來不及消痛,僅僅只有IaaS實(shí)現(xiàn)資源的彈性是不夠的,再創(chuàng)建90臺虛擬機(jī)都哭,也是空的啊秩伞,還是需要運(yùn)維人員一臺一臺的部署逞带。所以有了PaaS就好了,一臺虛擬機(jī)啟動后纱新,馬上運(yùn)行自動部署腳本展氓,進(jìn)行應(yīng)用的安裝,90臺機(jī)器自動安裝好了應(yīng)用脸爱,才是真正的彈性伸縮遇汞。
當(dāng)然這種部署方式也有一個問題,就是無論P(yáng)uppet, Chef, Ansible把安裝腳本抽象的再好簿废,說到底也是基于腳本的空入,然而應(yīng)用所在的環(huán)境千差萬別,文件路徑的差別族檬,文件權(quán)限的差別歪赢,依賴包的差別,應(yīng)用環(huán)境的差別导梆,Tomcat, PHP, Apache等軟件版本的差別轨淌,JDK,Python等版本的差別看尼,是否安裝了一些系統(tǒng)軟件,是否占用了哪些端口盟步,都可能造成腳本執(zhí)行的不成功藏斩。所以看起來是一旦腳本寫好,就能夠快速復(fù)制了却盘,但是一旦環(huán)境稍有改變狰域,就需要把腳本進(jìn)行新一輪的修改,測試黄橘,聯(lián)調(diào)兆览。例如在數(shù)據(jù)中心寫好的腳本,移到AWS上就不一定直接能用塞关,在AWS上聯(lián)調(diào)好了抬探,遷移到Google Cloud上去也可能再會出問題。
容器的誕生
于是容器應(yīng)運(yùn)而生帆赢。容器是Container小压,Container另一個意思是集裝箱,其實(shí)容器的思想就是要變成軟件交付的集裝箱椰于。集裝箱的特點(diǎn)怠益,一是打包,二是標(biāo)準(zhǔn)瘾婿。設(shè)想沒有集裝箱的時(shí)代蜻牢,如果從A將貨物運(yùn)到B烤咧,中間要經(jīng)過三個碼頭,換三次船的話抢呆,每次貨物都要卸下船來髓削,擺的七零八落,然后再換船的時(shí)候镀娶,需要重新整齊擺好立膛,所以沒有集裝箱的時(shí)候,船員們都能夠在岸上待幾天再走梯码。然而有了集裝箱宝泵,所有的貨物都打包在一起了,并且集裝箱的尺寸全部一致轩娶,所以每次換船的時(shí)候儿奶,整體一個箱子搬過去就可以了,小時(shí)級別就能完成鳄抒,船員再也不能上岸長時(shí)間休息了闯捎。所以設(shè)想A就是程序員,B就是用戶许溅,貨物就是代碼及運(yùn)行環(huán)境瓤鼻,中間的三個碼頭分別是開發(fā),測試贤重,上線茬祷。
假設(shè)代碼的運(yùn)行環(huán)境如下:
Ubuntu操作系統(tǒng)
創(chuàng)建用戶hadoop
下載解壓縮JDK 1.7在某個目錄下
將這個目錄加入JAVA_HOME和PATH的環(huán)境變量里面
將環(huán)境變量的export放在hadoop用戶的home目錄下的.bashrc文件中
下載并解壓縮tomcat 7
將war放到tomcat的webapp路徑下面
修改tomcat的啟動參數(shù),將Java的Heap Size設(shè)為1024M
看并蝗,一個簡單的Java網(wǎng)站祭犯,就需要考慮這么多零零散散的東西,如果不打包滚停,就需要在開發(fā)沃粗,測試,生產(chǎn)的每個環(huán)境上查看保證環(huán)境的一致键畴,甚至要將這些環(huán)境重新搭建一遍最盅,就像每次將貨物打散了重裝一樣麻煩,中間稍有差池镰吵,比如開發(fā)環(huán)境用了JDK 1.8檩禾,而線上是JDK 1.7,比如開發(fā)環(huán)境用了root用戶疤祭,線上需要使用hadoop用戶盼产,都可能導(dǎo)致程序的運(yùn)行失敗。
容器如何對應(yīng)用打包呢勺馆?還是要學(xué)習(xí)集裝箱戏售,首先要有個封閉的環(huán)境侨核,將貨物封裝起來,讓貨物之間互不干擾灌灾,互相隔離搓译,這樣裝貨卸貨才方便。好在ubuntu中的lxc技術(shù)早就能做到這一點(diǎn)锋喜,這里主要使用了兩種技術(shù)些己,一種是看起來是隔離的技術(shù),稱為namespace嘿般,也即每個namespace中的應(yīng)用看到的是不同的IP地址段标,用戶空間,進(jìn)程號等炉奴。另一種是用起來是隔離的逼庞,稱為cgroup,也即明明整臺機(jī)器有很多的CPU瞻赶,內(nèi)存赛糟,而一個應(yīng)用只能用其中的一部分。
有了這兩項(xiàng)技術(shù)砸逊,集裝箱的鐵盒子我們是焊好了璧南,接下來是決定往里面放什么的時(shí)候了。最簡單粗暴的方法痹兜,就是將上面列表中所有的都放到集裝箱里面穆咐。但是這樣太大了,因?yàn)樘摂M機(jī)的鏡像就是這樣的字旭,動輒幾十G,如果你安裝一個干干靜靜的ubuntu操作系統(tǒng)崖叫,什么都不裝遗淳,就很大了。這其實(shí)相當(dāng)于把船也放到了集裝箱里面心傀,答案當(dāng)然是NO.
所以撇下第一項(xiàng)操作系統(tǒng)屈暗,剩下的所有的加起來,也就幾百M(fèi)脂男,就輕便多了养叛。所以一臺服務(wù)器上的容器是共享操作系統(tǒng)內(nèi)核的,容器在不同機(jī)器之間的遷移不帶內(nèi)核宰翅,這也是很多人聲稱容器是輕量級的虛擬機(jī)的原因弃甥。輕不白輕,自然隔離性就差了汁讼,一個集裝箱把船壓漏水了淆攻,所有的集裝箱一起沉阔墩。
另一個需要撇下的就是隨著應(yīng)用的運(yùn)行而產(chǎn)生并保存在本地的數(shù)據(jù),多以文件的形式存在瓶珊,例如數(shù)據(jù)庫文件啸箫,文本文件。這些文件會隨著應(yīng)用的運(yùn)行伞芹,越來越大忘苛,如果這些數(shù)據(jù)也放在容器里面,會讓容器變得很大唱较,影響容器在不同環(huán)境的遷移扎唾。而且這些數(shù)據(jù)在開發(fā),測試绊汹,線上環(huán)境之間的遷移是沒有意義的稽屏,生產(chǎn)環(huán)境不可能用測試環(huán)境的文件,所以往往這些數(shù)據(jù)也是保存在容器外面的存儲設(shè)備上西乖。也是為什么人們稱容器是無狀態(tài)的狐榔。
至此集裝箱焊好了,貨物也裝進(jìn)去了获雕,接下來就是如何將這個集裝箱標(biāo)準(zhǔn)化薄腻,從而在哪艘船上都能運(yùn)輸。這里的標(biāo)準(zhǔn)一個是鏡像届案,一個是容器的運(yùn)行環(huán)境庵楷。所謂的鏡像,就是將你焊好集裝箱的那個時(shí)刻楣颠,將集裝箱的狀態(tài)保存下來尽纽,就像孫悟空說定,集裝箱里面就定在了那一刻童漩,然后將這一刻的狀態(tài)保存成一系列文件弄贿。這些文件的格式是標(biāo)準(zhǔn)的,誰看到這些文件矫膨,都能還原當(dāng)時(shí)定住的那個時(shí)刻差凹。將鏡像還原成運(yùn)行時(shí)的過程叨咖,就是讀取鏡像文件分扎,還原那個時(shí)刻的過程故觅,也就是容器的運(yùn)行的過程望门。除了大名鼎鼎的Docker善绎,還有其他的容器祥楣,例如AppC检访,Mesos Container眶拉,都能運(yùn)行容器鏡像弥搞。所以說容器不等于Docker邮绿。
總而言之渠旁,容器是輕量級的,隔離差的船逮,適用于無狀態(tài)的顾腊,基于鏡像標(biāo)準(zhǔn)實(shí)現(xiàn)跨主機(jī),跨環(huán)境的隨意遷移挖胃。
有了容器杂靶,使得PaaS層對于用戶自身應(yīng)用的自動部署變得快速而優(yōu)雅。容器快酱鸭,快在了兩方面吗垮,第一是虛擬機(jī)啟動的時(shí)候要先啟動操作系統(tǒng),容器不用啟動操作系統(tǒng)凹髓,因?yàn)槭枪蚕韮?nèi)核的烁登。第二是虛擬機(jī)啟動后使用腳本安裝應(yīng)用,容器不用安裝應(yīng)用蔚舀,因?yàn)橐呀?jīng)打包在鏡像里面了饵沧。所以最終虛擬機(jī)的啟動是分鐘級別,而容器的啟動是秒級赌躺。容器咋這么神奇狼牺。其實(shí)一點(diǎn)都不神奇,第一是偷懶少干活了礼患,第二是提前把活干好了是钥。
因?yàn)槿萜鞯膯涌欤藗兺粫?chuàng)建一個個小的虛擬機(jī)來剛剛部署應(yīng)用缅叠,因?yàn)檫@樣太費(fèi)時(shí)間了悄泥,而是創(chuàng)建一個大的虛擬機(jī),然后在大的虛擬機(jī)里面再劃分容器肤粱,而不同的用戶不共享大的虛擬機(jī)码泞,可以實(shí)現(xiàn)操作系統(tǒng)內(nèi)核的隔離。
這又是一次合久必分的過程狼犯。由IaaS層的虛擬機(jī)池,劃分為更細(xì)粒度的容器池领铐。
容器的粒度更加細(xì)悯森,管理起來更難管,甚至是手動操作難以應(yīng)對的绪撵。假設(shè)你有100臺物理機(jī)瓢姻,其實(shí)規(guī)模不是太大,用Excel人工管理是沒問題的音诈,但是一臺上面開10臺虛擬機(jī)幻碱,虛擬機(jī)的個數(shù)就是1000臺绎狭,人工管理已經(jīng)很困難了,但是一臺虛擬機(jī)里面開10個容器褥傍,就是10000個容器儡嘶,你是不是已經(jīng)徹底放棄人工運(yùn)維的想法了。
所以容器層面的管理平臺是一個新的挑戰(zhàn)恍风,關(guān)鍵字就是自動化:
自發(fā)現(xiàn):容器與容器之間的相互配置還能像虛擬機(jī)一樣蹦狂,記住IP地址,然后互相配置嗎朋贬?這么多容器凯楔,你怎么記得住一旦一臺虛擬機(jī)掛了重啟,IP改變锦募,應(yīng)該改哪些配置摆屯,列表長度至少萬行級別的啊。所以容器之間的配置通過名稱來的糠亩,無論容器跑到哪臺機(jī)器上虐骑,名稱不變,就能訪問到削解。
自修復(fù):容器掛了富弦,或是進(jìn)程宕機(jī)了,能像虛擬機(jī)那樣氛驮,登陸上去查看一下進(jìn)程狀態(tài)腕柜,如果不正常重啟一下么?你要登陸萬臺docker了矫废。所以容器的進(jìn)程掛了盏缤,容器就自動掛掉了,然后自動重啟蓖扑。
彈性自伸縮 Auto Scaling:當(dāng)容器的性能不足的時(shí)候唉铜,需要手動伸縮,手動部署么律杠?當(dāng)然也要自動來潭流。
如果有了容器的管理平臺,又是一次分久必合柜去。
容器管理平臺
當(dāng)前火熱的容器管理平臺有三大流派:
一個是Kubernetes灰嫉,我們稱為段譽(yù)型。段譽(yù)(Kubernetes)的父親(Borg)武功高強(qiáng)嗓奢,出身皇族(Google)讼撒,管理過偌大的一個大理國(Borg是Google數(shù)據(jù)中心的容器管理平臺)。作為大理段式后裔,段譽(yù)的武功基因良好(Kubernetes的理念設(shè)計(jì)比較完善)根盒,周圍的高手云集钳幅,習(xí)武環(huán)境也好(Kubernetes生態(tài)活躍,熱度高)炎滞,雖然剛剛出道的段譽(yù)武功不及其父親敢艰,但是只要跟著周圍的高手不斷切磋,武功既可以飛速提升厂榛。
一個是Mesos盖矫,我們稱為喬峰型。喬峰(Mesos)的主要功夫降龍十八掌(Mesos的調(diào)度功能)獨(dú)步武林击奶,為其他幫派所無辈双。而且喬峰也管理過人數(shù)眾多的丐幫(Mesos管理過Tweeter的容器集群)。后來喬峰從丐幫出來柜砾,在江湖中特例獨(dú)行(Mesos的創(chuàng)始人成立了公司Mesosphere)湃望。喬峰的優(yōu)勢在于,喬峰的降龍十八掌(Mesos)就是在丐幫中使用的降龍十八掌痰驱,相比與段譽(yù)初學(xué)其父的武功來說证芭,要成熟很多。但是缺點(diǎn)是担映,降龍十八掌只掌握在少數(shù)的幾個丐幫幫主手中(Mesos社區(qū)還是以Mesosphere為主導(dǎo))废士,其他丐幫兄弟只能遠(yuǎn)遠(yuǎn)崇拜喬峰,而無法相互切磋(社區(qū)熱度不足)蝇完。
一個是Swarm官硝,我們稱為慕容型。慕容家族(Swarm是Docker家族的集群管理軟件)的個人功夫是非常棒的(Docker可以說稱為容器的事實(shí)標(biāo)準(zhǔn))短蜕,但是看到段譽(yù)和喬峰能夠管理的組織規(guī)模越來越大氢架,有一統(tǒng)江湖的趨勢,著實(shí)眼紅了朋魔,于是開始想創(chuàng)建自己的慕容鮮卑帝國(推出Swarm容器集群管理軟件)岖研。但是個人功夫好,并不代表著組織能力強(qiáng)(Swarm的集群管理能力)警检,好在慕容家族可以借鑒段譽(yù)和喬峰的組織管理經(jīng)驗(yàn)孙援,學(xué)習(xí)各家公司,以彼之道扇雕,還施彼身赃磨,使得慕容公子的組織能力(Swarm借鑒了很多前面的集群管理思想)也在逐漸的成熟中。
云計(jì)算方面核心技術(shù)有哪些洼裤?
作者:冰島社區(qū)-陳昊
鏈接:https://www.zhihu.com/question/353443905/answer/877956605
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處腮鞍。
云計(jì)算是一種以數(shù)據(jù)和處理能力為中心的密集型計(jì)算模式值骇,它融合了多項(xiàng)ICT技術(shù),是傳統(tǒng)技術(shù)“平滑演進(jìn)”的產(chǎn)物移国。其中以虛擬化技術(shù)吱瘩、分布式數(shù)據(jù)存儲技術(shù)、編程模型迹缀、大規(guī)模數(shù)據(jù)管理技術(shù)使碾、分布式資源管理、信息安全祝懂、云計(jì)算平臺管理技術(shù)票摇、綠色節(jié)能技術(shù)最為關(guān)鍵。
1砚蓬、虛擬化技術(shù)
虛擬化是云計(jì)算最重要的核心技術(shù)之一矢门,它為云計(jì)算服務(wù)提供基礎(chǔ)架構(gòu)層面的支撐,是ICT服務(wù)快速走向云計(jì)算的最主要驅(qū)動力灰蛙∷钐蓿可以說,沒有虛擬化技術(shù)也就沒有云計(jì)算服務(wù)的落地與成功摩梧。隨著云計(jì)算應(yīng)用的持續(xù)升溫物延,業(yè)內(nèi)對虛擬化技術(shù)的重視也提到了一個新的高度。與此同時(shí)仅父,我們的調(diào)查發(fā)現(xiàn)叛薯,很多人對云計(jì)算和虛擬化的認(rèn)識都存在誤區(qū),認(rèn)為云計(jì)算就是虛擬化驾霜。事實(shí)上并非如此案训,虛擬化是云計(jì)算的重要組成部分但不是全部。
從技術(shù)上講粪糙,虛擬化是一種在軟件中仿真計(jì)算機(jī)硬件强霎,以虛擬資源為用戶提供服務(wù)的計(jì)算形式。旨在合理調(diào)配計(jì)算機(jī)資源蓉冈,使其更高效地提供服務(wù)城舞。它把應(yīng)用系統(tǒng)各硬件間的物理劃分打破,從而實(shí)現(xiàn)架構(gòu)的動態(tài)化寞酿,實(shí)現(xiàn)物理資源的集中管理和使用家夺。虛擬化的最大好處是增強(qiáng)系統(tǒng)的彈性和靈活性,降低成本伐弹、改進(jìn)服務(wù)拉馋、提高資源利用效率。
從表現(xiàn)形式上看,虛擬化又分兩種應(yīng)用模式煌茴。一是將一臺性能強(qiáng)大的服務(wù)器虛擬成多個獨(dú)立的小服務(wù)器随闺,服務(wù)不同的用戶。二是將多個服務(wù)器虛擬成一個強(qiáng)大的服務(wù)器蔓腐,完成特定的功能矩乐。這兩種模式的核心都是統(tǒng)一管理,動態(tài)分配資源回论,提高資源利用率散罕。在云計(jì)算中,這兩種模式都有比較多的應(yīng)用傀蓉。
2欧漱、分布式數(shù)據(jù)存儲技術(shù)
云計(jì)算的另一大優(yōu)勢就是能夠快速、高效地處理海量數(shù)據(jù)僚害。在數(shù)據(jù)爆炸的今天硫椰,這一點(diǎn)至關(guān)重要。為了保證數(shù)據(jù)的高可靠性萨蚕,云計(jì)算通常會采用分布式存儲技術(shù)靶草,將數(shù)據(jù)存儲在不同的物理設(shè)備中。這種模式不僅擺脫了硬件設(shè)備的限制岳遥,同時(shí)擴(kuò)展性更好奕翔,能夠快速響應(yīng)用戶需求的變化。
分布式存儲與傳統(tǒng)的網(wǎng)絡(luò)存儲并不完全一樣浩蓉,傳統(tǒng)的網(wǎng)絡(luò)存儲系統(tǒng)采用集中的存儲服務(wù)器存放所有數(shù)據(jù)派继,存儲服務(wù)器成為系統(tǒng)性能的瓶頸,不能滿足大規(guī)模存儲應(yīng)用的需要捻艳。分布式網(wǎng)絡(luò)存儲系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu)驾窟,利用多臺存儲服務(wù)器分擔(dān)存儲負(fù)荷,利用位置服務(wù)器定位存儲信息认轨,它不但提高了系統(tǒng)的可靠性绅络、可用性和存取效率,還易于擴(kuò)展嘁字。
在當(dāng)前的云計(jì)算領(lǐng)域恩急,Google的GFS和Hadoop開發(fā)的開源系統(tǒng)HDFS是比較流行的兩種云計(jì)算分布式存儲系統(tǒng)。
GFS(Google File System)技術(shù):谷歌的非開源的GFS(GoogleFile System)云計(jì)算平臺滿足大量用戶的需求纪蜒,并行地為大量用戶提供服務(wù)衷恭。使得云計(jì)算的數(shù)據(jù)存儲技術(shù)具有了高吞吐率和高傳輸率的特點(diǎn)。
HDFS(Hadoop Distributed File System)技術(shù):大部分ICT廠商纯续,包括Yahoo随珠、Intel的“云”計(jì)劃采用的都是HDFS的數(shù)據(jù)存儲技術(shù)灭袁。未來的發(fā)展將集中在超大規(guī)模的數(shù)據(jù)存儲、數(shù)據(jù)加密和安全性保證牙丽、以及繼續(xù)提高I/O速率等方面简卧。
3、編程模式
從本質(zhì)上講烤芦,云計(jì)算是一個多用戶、多任務(wù)析校、支持并發(fā)處理的系統(tǒng)构罗。高效、簡捷智玻、快速是其核心理念遂唧,它旨在通過網(wǎng)絡(luò)把強(qiáng)大的服務(wù)器計(jì)算資源方便地分發(fā)到終端用戶手中,同時(shí)保證低成本和良好的用戶體驗(yàn)吊奢。在這個過程中盖彭,編程模式的選擇至關(guān)重要。云計(jì)算項(xiàng)目中分布式并行編程模式將被廣泛采用页滚。
分布式并行編程模式創(chuàng)立的初衷是更高效地利用軟召边、硬件資源,讓用戶更快速裹驰、更簡單地使用應(yīng)用或服務(wù)隧熙。在分布式并行編程模式中,后臺復(fù)雜的任務(wù)處理和資源調(diào)度對于用戶來說是透明的幻林,這樣用戶體驗(yàn)?zāi)軌虼蟠筇嵘甓ⅰapReduce是當(dāng)前云計(jì)算主流并行編程模式之一。MapReduce模式將任務(wù)自動分成多個子任務(wù)沪饺,通過Map和Reduce兩步實(shí)現(xiàn)任務(wù)在大規(guī)模計(jì)算節(jié)點(diǎn)中的高度與分配躏敢。
MapReduce是Google開發(fā)的java、Python整葡、C++編程模型件余,主要用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。MapReduce模式的思想是將要執(zhí)行的問題分解成Map(映射)和Reduce(化簡)的方式掘宪,先通過Map程序?qū)?shù)據(jù)切割成不相關(guān)的區(qū)塊蛾扇,分配(調(diào)度)給大量計(jì)算機(jī)處理,達(dá)到分布式運(yùn)算的效果魏滚,再通過Reduce程序?qū)⒔Y(jié)果匯整輸出镀首。
4、大規(guī)模數(shù)據(jù)管理
處理海量數(shù)據(jù)是云計(jì)算的一大優(yōu)勢鼠次。那么如何處理則涉及到很多層面的東西更哄,因此高效的數(shù)據(jù)處理技術(shù)也是云計(jì)算不可或缺的核心技術(shù)之一芋齿。對于云計(jì)算來說,數(shù)據(jù)管理面臨巨大的挑戰(zhàn)成翩。云計(jì)算不僅要保證數(shù)據(jù)的存儲和訪問觅捆,還要能夠?qū)A繑?shù)據(jù)進(jìn)行特定的檢索和分析。由于云計(jì)算需要對海量的分布式數(shù)據(jù)進(jìn)行處理麻敌、分析栅炒,因此,數(shù)據(jù)管理技術(shù)必需能夠高效的管理大量的數(shù)據(jù)术羔。
Google的BT(BigTable)數(shù)據(jù)管理技術(shù)和Hadoop團(tuán)隊(duì)開發(fā)的開源數(shù)據(jù)管理模塊HBase是業(yè)界比較典型的大規(guī)模數(shù)據(jù)管理技術(shù)赢赊。
BT(BigTable)數(shù)據(jù)管理技術(shù):BigTable是非關(guān)系的數(shù)據(jù)庫,是一個分布式的级历、持久化存儲的多維度排序Map.BigTable建立在 GFS,Scheduler, Lock Service和MapReduce之上释移,與傳統(tǒng)的關(guān)系數(shù)據(jù)庫不同,它把所有數(shù)據(jù)都作為對象來處理寥殖,形成一個巨大的表格玩讳,用來分布存儲大規(guī)模結(jié)構(gòu)化數(shù)據(jù)。 Bigtable的設(shè)計(jì)目的是可靠的處理PB級別的數(shù)據(jù)嚼贡,并且能夠部署到上千臺機(jī)器上熏纯。
開源數(shù)據(jù)管理模塊HBase:HBase是Apache的Hadoop項(xiàng)目的子項(xiàng)目,定位于分布式编曼、面向列的開源數(shù)據(jù)庫豆巨。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫掐场。另一個不同的是HBase基于列的而不是基于行的模式往扔。作為高可靠性分布式存儲系統(tǒng),HBase在性能和可伸縮方面都有比較好的表現(xiàn)熊户。利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲集群萍膛。
5、分布式資源管理
云計(jì)算采用了分布式存儲技術(shù)存儲數(shù)據(jù)嚷堡,那么自然要引入分布式資源管理技術(shù)蝗罗。在多節(jié)點(diǎn)的并發(fā)執(zhí)行環(huán)境中,各個節(jié)點(diǎn)的狀態(tài)需要同步蝌戒,并且在單個節(jié)點(diǎn)出現(xiàn)故障時(shí)串塑,系統(tǒng)需要有效的機(jī)制保證其它節(jié)點(diǎn)不受影響。而分布式資源管理系統(tǒng)恰是這樣的技術(shù)北苟,它是保證系統(tǒng)狀態(tài)的關(guān)鍵桩匪。
另外,云計(jì)算系統(tǒng)所處理的資源往往非常龐大友鼻,少則幾百臺服務(wù)器傻昙,多則上萬臺闺骚,同時(shí)可能跨躍多個地域。且云平臺中運(yùn)行的應(yīng)用也是數(shù)以千計(jì)妆档,如何有效地管理這批資源僻爽,保證它們正常提供服務(wù),需要強(qiáng)大的技術(shù)支撐贾惦。因此胸梆,分布式資源管理技術(shù)的重要性可想而知。
全球各大云計(jì)算方案/服務(wù)提供商們都在積極開展相關(guān)技術(shù)的研發(fā)工作须板。其中Google內(nèi)部使用的Borg技術(shù)很受業(yè)內(nèi)稱道乳绕。另外,微軟逼纸、IBM、Oracle/Sun等云計(jì)算巨頭都有相應(yīng)解決方案提出济蝉。
6杰刽、信息安全
調(diào)查數(shù)據(jù)表明,安全已經(jīng)成為阻礙云計(jì)算發(fā)展的最主要原因之一王滤。數(shù)據(jù)顯示贺嫂,32%已經(jīng)使用云計(jì)算的組織和45%尚未使用云計(jì)算的組織的ICT管理將云安全作為進(jìn)一步部署云的最大障礙。因此雁乡,要想保證云計(jì)算能夠長期穩(wěn)定第喳、快速發(fā)展,安全是首要需要解決的問題踱稍。
事實(shí)上曲饱,云計(jì)算安全也不是新問題,傳統(tǒng)互聯(lián)網(wǎng)存在同樣的問題珠月。只是云計(jì)算出現(xiàn)以后扩淀,安全問題變得更加突出。在云計(jì)算體系中啤挎,安全涉及到很多層面驻谆,包括網(wǎng)絡(luò)安全、服務(wù)器安全庆聘、軟件安全胜臊、系統(tǒng)安全等等。因此伙判,有分析師認(rèn)為象对,云安全產(chǎn)業(yè)的發(fā)展,將把傳統(tǒng)安全技術(shù)提到一個新的階段澳腹。
現(xiàn)在织盼,不管是軟件安全廠商還是硬件安全廠商都在積極研發(fā)云計(jì)算安全產(chǎn)品和方案杨何。包括傳統(tǒng)殺毒軟件廠商、軟硬防火墻廠商沥邻、IDS/IPS廠商在內(nèi)的各個層面的安全供應(yīng)商都已加入到云安全領(lǐng)域危虱。相信在不久的將來,云安全問題將得到很好的解決.
7唐全、云計(jì)算平臺管理
云計(jì)算資源規(guī)模龐大埃跷,服務(wù)器數(shù)量眾多并分布在不同的地點(diǎn),同時(shí)運(yùn)行著數(shù)百種應(yīng)用邮利,如何有效地管理這些服務(wù)器弥雹,保證整個系統(tǒng)提供不間斷的服務(wù)是巨大的挑戰(zhàn)。云計(jì)算系統(tǒng)的平臺管理技術(shù)延届,需要具有高效調(diào)配大量服務(wù)器資源剪勿,使其更好協(xié)同工作的能力。其中方庭,方便地部署和開通新業(yè)務(wù)厕吉、快速發(fā)現(xiàn)并且恢復(fù)系統(tǒng)故障、通過自動化械念、智能化手段實(shí)現(xiàn)大規(guī)模系統(tǒng)可靠的運(yùn)營是云計(jì)算平臺管理技術(shù)的關(guān)鍵头朱。
對于提供者而言,云計(jì)算可以有三種部署模式龄减,即公共云项钮、私有云和混合云。三種模式對平臺管理的要求大不相同希停。對于用戶而言烁巫,由于企業(yè)對于ICT資源共享的控制、對系統(tǒng)效率的要求以及ICT成本投入預(yù)算不盡相同脖苏,企業(yè)所需要的云計(jì)算系統(tǒng)規(guī)模及可管理性能也大不相同程拭。因此,云計(jì)算平臺管理方案要更多地考慮到定制化需求棍潘,能夠滿足不同場景的應(yīng)用需求恃鞋。
包括Google、IBM亦歉、微軟恤浪、Oracle/Sun等在內(nèi)的許多廠商都有云計(jì)算平臺管理方案推出。這些方案能夠幫助企業(yè)實(shí)現(xiàn)基礎(chǔ)架構(gòu)整合肴楷、實(shí)現(xiàn)企業(yè)硬件資源和軟件資源的統(tǒng)一管理水由、統(tǒng)一分配、統(tǒng)一部署赛蔫、統(tǒng)一監(jiān)控和統(tǒng)一備份砂客,打破應(yīng)用對資源的獨(dú)占泥张,讓企業(yè)云計(jì)算平臺價(jià)值得以充分發(fā)揮。
博客
Java技術(shù)倉庫《Java程序員復(fù)習(xí)指南》
https://github.com/h2pl/Java-Tutorial
整合全網(wǎng)優(yōu)質(zhì)Java學(xué)習(xí)內(nèi)容鞠值,幫助你從基礎(chǔ)到進(jìn)階系統(tǒng)化復(fù)習(xí)Java
面試指南
全網(wǎng)最熱的Java面試指南媚创,共200多頁,非常實(shí)用彤恶,不管是用于復(fù)習(xí)還是準(zhǔn)備面試都是不錯的钞钙。
在公眾號【Java技術(shù)江湖】回復(fù)“PDF”即可免費(fèi)領(lǐng)取。
寫在最后
如果覺得本文對你有幫助的話声离,請你也不要吝嗇你的“好看”哈芒炼,轉(zhuǎn)發(fā)朋友圈就是對我最大的支持啦,你們的支持是對我最大的鼓勵术徊。
對本系列文章有什么建議和意見本刽,也歡迎留言告訴我,期待你的回饋赠涮。