容器的六個(gè)誤區(qū)

誤區(qū)一:容器啟動(dòng)速度快常空,秒級(jí)啟動(dòng)

這是很多人布道容器的時(shí)候經(jīng)常說的一句話沽一,往往人們會(huì)啟動(dòng)一個(gè)Nginx之類的應(yīng)用,的確很快就能夠啟動(dòng)起來了窟绷。

容器為啥啟動(dòng)快锯玛,一是沒有內(nèi)核,二是鏡像比較小兼蜈。

然而容器是有主進(jìn)程的攘残,也即Entrypoint,只有主進(jìn)程完全啟動(dòng)起來了为狸,容器才算真正的啟動(dòng)起來歼郭。

用一個(gè)比喻:容器更像人的衣服,人站起來了辐棒,衣服才站起來病曾,人躺下了,衣服也躺下了漾根。衣服有一定的隔離性泰涂,但是隔離性沒那么好。衣服沒有根(內(nèi)核)辐怕,但是衣服可以隨著人到處走逼蒙。

所以按照一個(gè)Nginx來評(píng)判一個(gè)容器的啟動(dòng)速度有意義么?對(duì)于Java應(yīng)用寄疏,里面安裝的是 Tomcat是牢,而 Tomcat 的啟動(dòng),加載 War陕截,并且真正的應(yīng)用啟動(dòng)起來驳棱。

如果你盯著Tomcat的日志看的話,還是需要一些時(shí)間的农曲,根本不是秒級(jí)社搅;如果應(yīng)用啟動(dòng)起來要一兩分鐘,僅僅談容器的秒級(jí)啟動(dòng)是沒有意義的。

現(xiàn)在OpenStack中 VM 的啟動(dòng)速度也優(yōu)化的越來越快了罚渐,啟動(dòng)一個(gè) VM 的時(shí)候却汉,原來需要從 Glance 下載虛擬機(jī)鏡像。

后來有了一個(gè)技術(shù)荷并,是在Glance和系統(tǒng)盤共享 Ceph 存儲(chǔ)的情況下合砂,虛擬機(jī)鏡像無需下載,啟動(dòng)速度就快很多源织。

而且容器之所以啟動(dòng)速度快翩伪,往往建議使用一個(gè)非常小的鏡像,例如alpine谈息,里面很多東西都裁剪掉了缘屹,啟動(dòng)的速度就更快了。

OpenStack的虛擬機(jī)鏡像也可以經(jīng)過大量的裁剪侠仇,實(shí)現(xiàn)快速的啟動(dòng)轻姿。

我們可以精細(xì)的衡量虛擬機(jī)啟動(dòng)的每一個(gè)步驟,裁剪掉相應(yīng)的模塊和啟動(dòng)的過程逻炊,大大降低虛擬機(jī)的啟動(dòng)時(shí)間互亮。

例如在UnitedStack的一篇博客里面 https://www.ustack.com/blog/build-block-storage-service,我們可以看到這樣的實(shí)現(xiàn)和描述:

使用原生的OpenStack創(chuàng)建虛擬機(jī)需要 1~3 分鐘余素,而使用改造后的 OpenStack 僅需要不到 10 秒鐘時(shí)間豹休。

這是因?yàn)閚ova-compute不再需要通過 HTTP 下載整個(gè)鏡像,虛擬機(jī)可以通過直接讀取 Ceph 中的鏡像數(shù)據(jù)進(jìn)行啟動(dòng)桨吊。

所以對(duì)于虛擬機(jī)的整體啟動(dòng)時(shí)間威根,現(xiàn)在優(yōu)化的不錯(cuò)的情況下,一般能夠做到十幾秒到半分鐘以內(nèi)视乐。

這個(gè)時(shí)間和Tomcat的啟動(dòng)時(shí)間相比較洛搀,其實(shí)不算是負(fù)擔(dān),和容器的啟動(dòng)速度相比佑淀,沒有質(zhì)的差別留美,可能有人會(huì)說啟動(dòng)速度快一點(diǎn)也是快。

尤其是對(duì)于在線環(huán)境的掛掉自修復(fù)來講渣聚,不是分秒必爭么独榴?關(guān)于自修復(fù)的問題僧叉,我們下面另外說奕枝。

然而虛擬機(jī)有一個(gè)好處,就是隔離性好瓶堕,如果容器是衣服隘道,虛擬機(jī)就是房子,房子立在那里,里面的人無論站著還是躺著谭梗,房子總是站著的忘晤,房子也不會(huì)跟著人走。

使用虛擬機(jī)就像人們住在公寓里面一樣激捏,每人一間设塔,互不干擾,使用容器像大家穿著衣服擠在公交車?yán)锩嬖毒耍此聘綦x闰蛔,誰把公交弄壞了,誰都走不了图柏。

綜上所述序六,容器的啟動(dòng)速度不足以構(gòu)成對(duì)OpenStack虛擬機(jī)的明顯優(yōu)勢,然而虛擬機(jī)的隔離性蚤吹,則秒殺容器例诀。

誤區(qū)二:容器輕量級(jí),每個(gè)主機(jī)會(huì)運(yùn)行成百上千個(gè)容器

很多人會(huì)做實(shí)驗(yàn)裁着,甚至?xí)蛻粽f繁涂,容器平臺(tái)多么多么牛,你看我們一臺(tái)機(jī)器上可以運(yùn)行成百上千個(gè)容器跨算,虛擬機(jī)根本做不到這一點(diǎn)爆土。

但是一個(gè)機(jī)器運(yùn)行成百上千個(gè)容器,有這種真實(shí)的應(yīng)用場景么诸蚕?對(duì)于容器來講步势,重要的是里面的應(yīng)用,應(yīng)用的核心在于穩(wěn)定性和高并發(fā)支撐背犯,而不在于密度坏瘩。

我在很多演講的會(huì)議上遇到了很多知名的處理雙十一和618的講師,普遍反饋當(dāng)前的 Java 應(yīng)用基本上 4 核 8G 是標(biāo)配漠魏,如果遇見容量不足的情況倔矾,少部分通過縱向擴(kuò)容的方式進(jìn)行,大部分采用橫向擴(kuò)容的方式進(jìn)行柱锹。

如果4核 8G 是標(biāo)配哪自,不到 20 個(gè)服務(wù)就可以占滿一臺(tái)物理服務(wù)器,一臺(tái)機(jī)器跑成百上千個(gè) Nginx 有意思么禁熏? 這不是一個(gè)嚴(yán)肅的使用場景壤巷。

當(dāng)然現(xiàn)在有一個(gè)很火的Serverless無服務(wù)架構(gòu),在無服務(wù)器架構(gòu)中瞧毙,所有自定義代碼作為孤立的胧华、獨(dú)立的寄症、常常細(xì)粒度的函數(shù)來編寫和執(zhí)行,這些函數(shù)在例如 AWS Lambda 之類的無狀態(tài)計(jì)算服務(wù)中運(yùn)行矩动。

這些計(jì)算服務(wù)可以是虛擬機(jī)有巧,也可以是容器。對(duì)于無狀態(tài)的函數(shù)來講悲没,需要快速的創(chuàng)建可刪除篮迎,而且很可能執(zhí)行一個(gè)函數(shù)的時(shí)間本身就非常短,在這種情況下容器相比于虛擬機(jī)還是有一定優(yōu)勢的示姿。

目前無服務(wù)架構(gòu)比較適用于運(yùn)行一些任務(wù)型批量操作柑潦,利用進(jìn)程級(jí)別的橫向彈性能力來抵消進(jìn)程創(chuàng)建和銷毀帶來的較大的代價(jià)。

在Spark和 Mesos 的集成中峻凫,有一個(gè) Fine-Grained 模式渗鬼,在大數(shù)據(jù)的執(zhí)行時(shí)候,任務(wù)的執(zhí)行進(jìn)程早就申請(qǐng)好了資源荧琼,與等在那里分配資源不同譬胎,這種模式是當(dāng)任務(wù)分配到的時(shí)候才分配資源。

好處就是對(duì)于資源的彈性申請(qǐng)和釋放的能力命锄,壞處是進(jìn)程的創(chuàng)建和銷毀還是粒度太大堰乔,所以這種模式下Spark運(yùn)行的性能會(huì)差一些。

Spark的這種做法思想類似無服務(wù)架構(gòu)脐恩,你會(huì)發(fā)現(xiàn)我們原來學(xué)操作系統(tǒng)的時(shí)候镐侯,說進(jìn)程粒度太大,每次都創(chuàng)建和銷毀進(jìn)程會(huì)速度太慢驶冒。

為了高并發(fā)苟翻,后來有了線程,線程的創(chuàng)建和銷毀輕量級(jí)的多骗污,當(dāng)然還是覺得慢崇猫,于是有了線程池,事先創(chuàng)建在了那里需忿,用的時(shí)候不用現(xiàn)創(chuàng)建诅炉,不用的時(shí)候交回去就行。

后來還是覺得慢屋厘,因?yàn)榫€程的創(chuàng)建也需要在內(nèi)核中完成涕烧,所以后來有了協(xié)程,全部在用戶態(tài)進(jìn)行線程切換汗洒。

例如AKKA议纯,Go 都使用了協(xié)程,你會(huì)發(fā)現(xiàn)趨勢是為了高并發(fā)仲翎,粒度是越來越細(xì)的痹扇,現(xiàn)在很多情況又需要進(jìn)程級(jí)別的,有種風(fēng)水輪流轉(zhuǎn)的感覺溯香。

誤區(qū)三:容器有鏡像鲫构,可以保持版本號(hào),可以升級(jí)和回滾

容器有兩個(gè)特性玫坛,一個(gè)是封裝结笨,一個(gè)是標(biāo)準(zhǔn)。有了容器鏡像湿镀,就可以將應(yīng)用的各種配置炕吸,文件路徑,權(quán)限封裝起來勉痴,然后像孫悟空說“定”赫模,就定在了封裝好的那一刻。

鏡像是標(biāo)準(zhǔn)的蒸矛,無論在哪個(gè)容器運(yùn)行環(huán)境瀑罗,將同樣的鏡像運(yùn)行起來,都能還原當(dāng)時(shí)的那一刻雏掠。

容器的鏡像還有版本號(hào)斩祭,我們可以根據(jù)容器的版本號(hào)進(jìn)行升級(jí),一旦升級(jí)有錯(cuò)乡话,可以根據(jù)版本號(hào)進(jìn)行回滾摧玫,回滾完畢則能夠保證容器內(nèi)部還是原來的狀態(tài)。

但是OpenStack虛擬機(jī)也是有鏡像的绑青,虛擬機(jī)鏡像也是可以打 snapshot 的诬像,打 snapshot 的時(shí)候,也會(huì)保存當(dāng)時(shí)的那一刻所有的狀態(tài)闸婴,而且 snapshot 也可以有版本號(hào)颅停,也可以升級(jí)和回滾。

似乎容器有的這些特性O(shè)penStack虛擬機(jī)都有掠拳,二者有什么不同呢癞揉?

虛擬機(jī)鏡像大,而容器鏡像小溺欧。虛擬機(jī)鏡像動(dòng)不動(dòng)就幾十個(gè)G甚至上百 G喊熟,而容器鏡像多幾百 M。

虛擬機(jī)鏡像不適合跨環(huán)境遷移姐刁。例如開發(fā)環(huán)境在本地芥牌,測試環(huán)境在一個(gè)OpenStack上,開發(fā)環(huán)境在另一個(gè) OpenStack 上聂使,虛擬機(jī)的鏡像的遷移非常困難壁拉,需要拷貝非常大的文件谬俄。

而容器就好的多,因?yàn)殓R像小弃理,可以很快的從不同的環(huán)境之間遷移溃论。

虛擬機(jī)鏡像不適合跨云遷移。當(dāng)前沒有一個(gè)公有云平臺(tái)支持虛擬機(jī)鏡像的下載和上傳(安全的原因痘昌,盜版的原因)钥勋,因而一個(gè)鏡像在不同的云之間,或者同一個(gè)云不同的 Region 之間辆苔,無法進(jìn)行遷移算灸,只能重新做一個(gè)鏡像,這樣環(huán)境的一致性就得不到保障驻啤。

而容器的鏡像中心是獨(dú)立于云之外的菲驴,只要能夠連上鏡像中心,到哪個(gè)云上都可以下載骑冗,并且因?yàn)殓R像小谢翎,下載速度快,鏡像是分層的沐旨,每次只需要下載差異的部分森逮。

OpenStack對(duì)于鏡像方面的優(yōu)化,基本上還是在一個(gè)云里面起作用磁携,一旦跨多個(gè)環(huán)境褒侧,鏡像方便的多。

誤區(qū)四:容器可以使用容器平臺(tái)管理自動(dòng)重啟實(shí)現(xiàn)自修復(fù)

容器的自修復(fù)功能是經(jīng)常被吹噓的谊迄。因?yàn)槿萜魇且路乒颂上铝耍路蔡上铝送撑担萜髌脚_(tái)能夠馬上發(fā)現(xiàn)人躺下了歪脏,于是可以迅速將人重新喚醒工作。

而虛擬機(jī)是房子粮呢,人躺下了婿失,房子還站著。因而虛擬機(jī)管理平臺(tái)不知道里面的人能不能工作啄寡,所以容器掛了會(huì)被自動(dòng)重啟豪硅,而虛擬機(jī)里面的應(yīng)用掛了,只要虛擬機(jī)不掛挺物,很可能沒人知道懒浮。

這些說法都沒錯(cuò),但是人們慢慢發(fā)現(xiàn)了另外的場景识藤,就是容器里面的應(yīng)用沒有掛砚著,所以容器看起來還啟動(dòng)著次伶,但是應(yīng)用已經(jīng)不工作沒有反應(yīng)了。

當(dāng)啟動(dòng)容器的時(shí)候稽穆,雖然容器的狀態(tài)起來了冠王,但是里面的應(yīng)用還需要一段時(shí)間才能提供服務(wù)。

所以針對(duì)這種場景秧骑,容器平臺(tái)會(huì)提供對(duì)于容器里面應(yīng)用的health check,不光看容器在不在扣囊,還要看里面的應(yīng)用能不能用乎折,如果不能仿便,可自動(dòng)重啟扁耐。

一旦引入了health check,和虛擬機(jī)的差別也不大了挣柬,因?yàn)橛辛?health check惕虑,虛擬機(jī)也能看里面的應(yīng)用是否工作了坟冲,不工作也可以重啟應(yīng)用。

還有就是容器的啟動(dòng)速度快溃蔫,秒級(jí)啟動(dòng),如果能夠自動(dòng)重啟修復(fù)伟叛,那就是秒級(jí)修復(fù)侥蒙,所以應(yīng)用更加高可用。

這個(gè)觀點(diǎn)當(dāng)然不正確,應(yīng)用的高可用性和重啟的速度沒有直接關(guān)系。高可用性一定要通過多個(gè)副本來實(shí)現(xiàn)矢沿,在任何一個(gè)掛掉之后栽惶,不能通過這一個(gè)應(yīng)用快速重啟來解決代承,而是應(yīng)該靠掛掉的期間膀估,其他的副本馬上把任務(wù)接過來進(jìn)行解決捐寥。

虛擬機(jī)和容器都可以有多副本乡洼,在有多個(gè)副本的情況下,重啟是1秒還是 20 秒锹雏,就沒那么重要了巴比,重要的是掛掉的這段時(shí)間內(nèi),程序做了什么。

如果程序做的是無關(guān)緊要的操作轻绞,那么掛了20秒采记,也沒啥關(guān)系;如果程序正在進(jìn)行一個(gè)交易和支付政勃,那掛掉 1 秒也不行唧龄,也必須能夠修復(fù)回來。

所以應(yīng)用的高可用性要靠應(yīng)用層的重試奸远,冪等去解決既棺,而不應(yīng)該靠基礎(chǔ)設(shè)施層重啟的快不快來解決。

對(duì)于無狀態(tài)服務(wù)懒叛,在做好重試的機(jī)制的情況下丸冕,通過自動(dòng)重啟修復(fù)是沒有問題的,因?yàn)闊o狀態(tài)的服務(wù)不會(huì)保存非常重要的操作芍瑞。

對(duì)于有狀態(tài)服務(wù)晨仑,容器的重啟不但不是推薦的褐墅,而且可能是災(zāi)難的開始拆檬。

一個(gè)服務(wù)有狀態(tài),例如數(shù)據(jù)庫妥凳,在高并發(fā)場景下竟贯,一旦掛了,哪怕只有1秒逝钥,我們必須要弄清楚這 1 秒都發(fā)生了什么屑那,哪些數(shù)據(jù)保存了,哪些數(shù)據(jù)丟了艘款,而不能盲目的重啟持际,否則很可能會(huì)造成數(shù)據(jù)的不一致性,后期修都沒法修哗咆。

例如高頻交易下的數(shù)據(jù)庫掛了蜘欲,按說DBA應(yīng)該嚴(yán)格審核丟了哪些數(shù)據(jù),而不是在 DBA 不知情的情況下晌柬,盲目的重啟了姥份,DBA 還覺得沒什么事情發(fā)生,最終很久才能發(fā)現(xiàn)問題年碘。

所以容器是比較適合部署無狀態(tài)服務(wù)的澈歉,隨便重啟都可以。

而容器部署有狀態(tài)容器不是不能屿衅,而是要非常小心埃难,甚至都是不推薦的。

雖然很多的容器平臺(tái)都支持有狀態(tài)容器,然而平臺(tái)往往解決不了數(shù)據(jù)問題凯砍,除非你對(duì)容器里面的應(yīng)用非常非常熟悉箱硕。

當(dāng)容器掛了,你能夠準(zhǔn)確的知道丟了哪些悟衩,哪些要緊剧罩,哪些不要緊,而且要寫代碼處理這些情況座泳,然后才能支持重啟惠昔。

網(wǎng)易這面的數(shù)據(jù)庫在主備同步的情況下,是通過修改MySQL源代碼挑势,保證主備之間數(shù)據(jù)完全同步镇防,才敢在主掛了的情況下,備自動(dòng)切換主潮饱。

而宣傳有狀態(tài)容器的自動(dòng)重啟来氧,對(duì)于服務(wù)客戶來講是很不經(jīng)濟(jì)的行為,因?yàn)榭蛻敉鶝]有那么清楚應(yīng)用的邏輯香拉,甚至應(yīng)用都是買的啦扬。

如果使用有狀態(tài)容器,任憑自動(dòng)重啟凫碌,最終客戶發(fā)現(xiàn)數(shù)據(jù)丟失的時(shí)候扑毡,還是會(huì)怪到你的頭上。

所以有狀態(tài)的服務(wù)自動(dòng)重啟不是不可用盛险,需要足夠?qū)I(yè)才行瞄摊。

誤區(qū)五:容器可以使用容器平臺(tái)進(jìn)行服務(wù)發(fā)現(xiàn)

容器平臺(tái)Swarm,Kubernetes苦掘,Mesos 都是支持服務(wù)發(fā)現(xiàn)的换帜,當(dāng)一個(gè)服務(wù)訪問另一個(gè)服務(wù),都會(huì)有服務(wù)名轉(zhuǎn)化為 VIP鹤啡,然后訪問具體的容器惯驼。

然而人們會(huì)發(fā)現(xiàn),基于Java寫的應(yīng)用揉忘,服務(wù)之間的調(diào)用多不會(huì)用容器平臺(tái)的服務(wù)發(fā)現(xiàn)跳座,而是用 Dubbo 或者 Spring Cloud 的服務(wù)發(fā)現(xiàn)。

因?yàn)槿萜髌脚_(tái)層的服務(wù)發(fā)現(xiàn)泣矛,還是做的比較基礎(chǔ)疲眷,基本是一個(gè)域名映射的過程,對(duì)于熔斷您朽,限流狂丝,降級(jí)都沒有很好的支持换淆。

然而既然使用服務(wù)發(fā)現(xiàn),還是希望服務(wù)發(fā)現(xiàn)中間件能夠做到這一點(diǎn)几颜,因而服務(wù)之間的服務(wù)發(fā)現(xiàn)之間使用容器平臺(tái)的少倍试,越是需要高并發(fā)的應(yīng)用,越是如此蛋哭。

那容器平臺(tái)的服務(wù)發(fā)現(xiàn)沒有用了么县习?不是,慢慢你會(huì)發(fā)現(xiàn)谆趾,內(nèi)部的服務(wù)發(fā)現(xiàn)是一方面躁愿,這些Dubbo和 Spring Cloud 能夠搞定,而外部的服務(wù)發(fā)現(xiàn)就不同了沪蓬。

比如訪問數(shù)據(jù)庫彤钟,緩存等,到底是應(yīng)該配置一個(gè)數(shù)據(jù)庫服務(wù)的名稱跷叉,還是IP地址呢逸雹?

如果使用IP地址,會(huì)造成配置十分復(fù)雜云挟,因?yàn)楹芏鄳?yīng)用配置之所以復(fù)雜梆砸,就是依賴了太多的外部應(yīng)用,也是最難管理的一方面植锉。

如果有了外部的服務(wù)發(fā)現(xiàn)辫樱,配置就會(huì)簡單很多峭拘,也只需要配置外部服務(wù)的名稱就可以了俊庇,如果外部服務(wù)地址變了,可以很靈活的改變外部的服務(wù)發(fā)現(xiàn)鸡挠。

誤區(qū)六:容器可以基于鏡像進(jìn)行彈性伸縮

在容器平臺(tái)上辉饱,容器有副本數(shù)的,只要將副本數(shù)從5改到 10拣展,容器就基于鏡像進(jìn)行了彈性伸縮彭沼。

其實(shí)這一點(diǎn)虛擬機(jī)也能做到,AWS的 Autoscaling 就是基于虛擬機(jī)鏡像的备埃,如果在同一個(gè)云里面姓惑,就沒有區(qū)別。

當(dāng)然如果是跨云無狀態(tài)容器的彈性伸縮按脚,容器方便很多于毙,可以實(shí)現(xiàn)混合云模式,當(dāng)高并發(fā)場景下辅搬,將無狀態(tài)容器擴(kuò)容到公有云唯沮,這一點(diǎn)虛擬機(jī)是做不到的。


容器理解誤區(qū)總結(jié):

如果部署的是一個(gè)傳統(tǒng)的應(yīng)用,這個(gè)應(yīng)用啟動(dòng)速度慢介蛉,進(jìn)程數(shù)量少萌庆,基本不更新,那么虛擬機(jī)完全能夠滿足需求:

應(yīng)用啟動(dòng)慢:應(yīng)用啟動(dòng)15分鐘币旧,容器本身秒級(jí)践险,虛擬機(jī)很多平臺(tái)能優(yōu)化到十幾秒,兩者幾乎看不出差別吹菱。

內(nèi)存占用大:動(dòng)不動(dòng)32G捏境,64G 內(nèi)存,一臺(tái)機(jī)器跑不了幾個(gè)毁葱。

基本不更新:半年更新一次垫言,虛擬機(jī)鏡像照樣能夠升級(jí)和回滾。

應(yīng)用有狀態(tài):停機(jī)會(huì)丟數(shù)據(jù)倾剿,如果不知道丟了啥筷频,就算秒級(jí)啟動(dòng)有啥用,照樣恢復(fù)不了前痘,而且還有可能因?yàn)閬G數(shù)據(jù)凛捏,在沒有修復(fù)的情況下,盲目重啟帶來數(shù)據(jù)混亂芹缔。

進(jìn)程數(shù)量少:兩三個(gè)進(jìn)程相互配置一下坯癣,不用服務(wù)發(fā)現(xiàn),配置不麻煩最欠。

如果是一個(gè)傳統(tǒng)應(yīng)用示罗,根本沒有必要花費(fèi)精力去容器化,因?yàn)榘谆肆庵ビ玻硎懿坏胶锰帯?/p>

容器化蚜点,微服務(wù),DevOps三位一體

什么情況下拌阴,才應(yīng)該考慮做一些改變呢绍绘?

傳統(tǒng)業(yè)務(wù)突然被互聯(lián)網(wǎng)業(yè)務(wù)沖擊了,應(yīng)用老是變迟赃,三天兩頭要更新陪拘,而且流量增大了,原來支付系統(tǒng)是取錢刷卡的纤壁,現(xiàn)在要互聯(lián)網(wǎng)支付了左刽,流量擴(kuò)大了N倍。

沒辦法摄乒,一個(gè)字:拆

拆開了悠反,每個(gè)子模塊獨(dú)自變化残黑,少相互影響。拆開了斋否,原來一個(gè)進(jìn)程扛流量梨水,現(xiàn)在多個(gè)進(jìn)程一起扛。

所以稱為微服務(wù)茵臭。

微服務(wù)場景下疫诽,進(jìn)程多,更新快旦委,于是出現(xiàn)100個(gè)進(jìn)程奇徒,每天一個(gè)鏡像。

容器樂了缨硝,每個(gè)容器鏡像小摩钙,沒啥問題,虛擬機(jī)哭了查辩,因?yàn)樘摂M機(jī)每個(gè)鏡像太大了胖笛。

所以微服務(wù)場景下,可以開始考慮用容器了宜岛。

虛擬機(jī)怒了长踊,老子不用容器了,微服務(wù)拆分之后萍倡,用Ansible自動(dòng)部署是一樣的身弊。

這樣說從技術(shù)角度來講沒有任何問題,然而問題是從組織角度出現(xiàn)的列敲。

一般的公司阱佛,開發(fā)會(huì)比運(yùn)維多的多,開發(fā)寫完代碼就不用管了酿炸,環(huán)境的部署完全是運(yùn)維負(fù)責(zé)瘫絮,運(yùn)維為了自動(dòng)化涨冀,寫Ansible腳本來解決問題填硕。

然而這么多進(jìn)程,又拆又合并的鹿鳖,更新這么快扁眯,配置總是變,Ansible腳本也要常改翅帜,每天都上線姻檀,不得累死運(yùn)維。

所以在如此大的工作量情況下涝滴,運(yùn)維很容易出錯(cuò)绣版,哪怕通過自動(dòng)化腳本胶台。這個(gè)時(shí)候,容器就可以作為一個(gè)非常好的工具運(yùn)用起來杂抽。

除了容器從技術(shù)角度诈唬,能夠使得大部分的內(nèi)部配置可以放在鏡像里面之外,更重要的是從流程角度缩麸,將環(huán)境配置這件事情铸磅,往前推了,推到了開發(fā)這里杭朱,要求開發(fā)完畢之后阅仔,就需要考慮環(huán)境部署的問題,而不能當(dāng)甩手掌柜弧械。

這樣做的好處就是八酒,雖然進(jìn)程多,配置變化多刃唐,更新頻繁丘跌,但是對(duì)于某個(gè)模塊的開發(fā)團(tuán)隊(duì)來講,這個(gè)量是很小的唁桩,因?yàn)?-10個(gè)人專門維護(hù)這個(gè)模塊的配置和更新闭树,不容易出錯(cuò)。

如果這些工作量全交給少數(shù)的運(yùn)維團(tuán)隊(duì)荒澡,不但信息傳遞會(huì)使得環(huán)境配置不一致报辱,部署量會(huì)大非常多。

容器是一個(gè)非常好的工具单山,就是讓每個(gè)開發(fā)僅僅多做5%的工作碍现,就能夠節(jié)約運(yùn)維 200% 的工作,并且不容易出錯(cuò)米奸。

然而本來運(yùn)維該做的事情開發(fā)做了昼接,開發(fā)的老大愿意么?開發(fā)的老大會(huì)投訴運(yùn)維的老大么悴晰?

這就不是技術(shù)問題了慢睡,其實(shí)這就是DevOps,DevOps 不是不區(qū)分開發(fā)和運(yùn)維铡溪,而是公司從組織到流程漂辐,能夠打通,看如何合作棕硫,邊界如何劃分髓涯,對(duì)系統(tǒng)的穩(wěn)定性更有好處。

所以微服務(wù)哈扮,DevOps纬纪,容器是相輔相成蚓再,不可分割的。

不是微服務(wù)包各,根本不需要容器对途,虛擬機(jī)就能搞定,不需要DevOps髓棋,一年部署一次实檀,開發(fā)和運(yùn)維溝通再慢都能搞定。

所以按声,容器的本質(zhì)是基于鏡像的跨環(huán)境遷移膳犹。

鏡像是容器的根本性發(fā)明,是封裝和運(yùn)行的標(biāo)準(zhǔn)签则,其他什么namespace须床,cgroup,早就有了渐裂,這是技術(shù)方面豺旬。

在流程方面,鏡像是DevOps的良好工具柒凉。容器是為了跨環(huán)境遷移的族阅,第一種遷移的場景是開發(fā),測試膝捞,生產(chǎn)環(huán)境之間的遷移坦刀。

如果不需要遷移,或者遷移不頻繁蔬咬,虛擬機(jī)鏡像也行鲤遥,但是總是要遷移,帶著幾百G的虛擬機(jī)鏡像林艘,太大了盖奈。

第二種遷移的場景是跨云遷移,跨公有云狐援,跨Region钢坦,跨兩個(gè) OpenStack 的虛擬機(jī)遷移都是非常麻煩,甚至不可能的咕村,因?yàn)楣性撇惶峁┨摂M機(jī)鏡像的下載和上傳功能场钉,而且虛擬機(jī)鏡像太大了,一傳傳一天懈涛。

所以跨云場景下,混合云場景下泳猬,容器也是很好的使用場景批钠。這也同時(shí)解決了僅僅私有云資源不足宇植,扛不住流量的問題。


容器的十大正確使用場景

根據(jù)以上的分析埋心,我們發(fā)現(xiàn)容器推薦使用在下面的場景下:

部署無狀態(tài)服務(wù)指郁,同虛擬機(jī)互補(bǔ)使用,實(shí)現(xiàn)隔離性拷呆。

如果要部署有狀態(tài)服務(wù)闲坎,需要對(duì)里面的應(yīng)用十分的了解。

作為持續(xù)集成的重要工具茬斧,可以順利在開發(fā)腰懂,測試,生產(chǎn)之間遷移项秉。

適合部署跨云绣溜,跨Region,跨數(shù)據(jù)中心娄蔼,混合云場景下的應(yīng)用部署和彈性伸縮怖喻。

以容器作為應(yīng)用的交付物,保持環(huán)境一致性岁诉,樹立不可變更基礎(chǔ)設(shè)施的理念锚沸。

運(yùn)行進(jìn)程基本的任務(wù)類型的程序。

用于管理變更涕癣,變更頻繁的應(yīng)用使用容器鏡像和版本號(hào)咒吐,輕量級(jí)方便的多。

使用容器一定要管理好應(yīng)用属划,進(jìn)行health check和容錯(cuò)的設(shè)計(jì)恬叹。

?So,想體驗(yàn)容器進(jìn)行實(shí)踐演練可以前往華為云進(jìn)行操作體驗(yàn)同眯!華為云容器引擎绽昼,高性能、企業(yè)級(jí)须蜗、開放兼容硅确、簡單易用!?大有可為云容器明肮!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菱农,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柿估,更是在濱河造成了極大的恐慌,老刑警劉巖秫舌,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绣檬,死亡現(xiàn)場離奇詭異嫂粟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)星虹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宽涌,“玉大人,你說我怎么就攤上這事护糖。” “怎么了嫡良?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寝受。 經(jīng)常有香客問我,道長很澄,這世上最難降的妖魔是什么京闰? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮甩苛,結(jié)果婚禮上蹂楣,老公的妹妹穿的比我還像新娘。我一直安慰自己讯蒲,他們只是感情好痊土,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著墨林,像睡著了一般赁酝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旭等,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天酌呆,我揣著相機(jī)與錄音,去河邊找鬼搔耕。 笑死隙袁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藤乙,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猜揪,長吁一口氣:“原來是場噩夢啊……” “哼惭墓!你這毒婦竟也來了坛梁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤腊凶,失蹤者是張志新(化名)和其女友劉穎划咐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钧萍,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褐缠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了风瘦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片队魏。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖万搔,靈堂內(nèi)的尸體忽然破棺而出胡桨,到底是詐尸還是另有隱情,我是刑警寧澤瞬雹,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布昧谊,位于F島的核電站,受9級(jí)特大地震影響酗捌,放射性物質(zhì)發(fā)生泄漏胖缤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一狗唉、第九天 我趴在偏房一處隱蔽的房頂上張望敞曹。 院中可真熱鬧澳迫,春花似錦剧劝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽充坑。三九已至,卻和暖如春辈灼,著一層夾襖步出監(jiān)牢的瞬間巡莹,已是汗流浹背甜紫。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工棵介, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唠雕。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓岩睁,卻偏偏與公主長得像捕儒,于是被迫代替她去往敵國和親邓夕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 做容器的研究和容器化幾年了,從最初對(duì)于容器的初步認(rèn)識(shí)矿咕,到積攢了大量的容器遷移經(jīng)驗(yàn)狼钮,并和客戶解釋了容器技術(shù)之后熬芜,發(fā)現(xiàn)...
    流浪java閱讀 886評(píng)論 0 0
  • 好久沒有畫畫了涎拉,今天臨摹了一副很喜歡的插畫曼库,有好長一段時(shí)間手機(jī)壁紙都是她略板。 而且今天還用了水彩慈缔,真的不會(huì)水彩,弄得...
    Ringing閱讀 835評(píng)論 3 8
  • 長大了我們才知道爸爸媽媽說學(xué)習(xí)的時(shí)候是最好的時(shí)光执庐。 長大了才知道時(shí)間一去不復(fù)返穷躁,最寶貝的就是時(shí)間。 長大了才知道猿诸,...
    雨霖清宵伴閱讀 818評(píng)論 0 1
  • 大家有沒有看過奇葩說呢梳虽?有沒有感覺到,奇葩說的議題總是非常難以抉擇谷炸?正反兩方都說的很有道理禀挫。比如說:結(jié)婚該不該門當(dāng)...
    知識(shí)收容所閱讀 280評(píng)論 0 0
  • 第一章:此情可待成追憶 沿途風(fēng)景太多语婴,你路過了誰的風(fēng)景,又成了誰的風(fēng)景匿醒。 他又立了戰(zhàn)功凱旋而歸缠导,全城的百姓都為他歡...
    梅林桃花飛閱讀 132評(píng)論 0 0