虛擬機(jī)已死 容器才是未來(lái)?
也許有人會(huì)說(shuō) docker pull/push 多方便啊,docker build 多方便啊,可不要忘了,vm image storage 早在 openstack 里就解決了,自己處理也不是個(gè)大事,vm image build 也有 Hashicorp 的 Packer 工具代勞,不是個(gè)事。Docker 自豪的官方 docker registry 其實(shí)大家最多用用 base os image,那些 app 級(jí)別的出于信任以及定制考慮都會(huì)自己 build。而 Docker 自豪的 layered storage 也是無(wú)數(shù)血淚,aufs & overlayfs 坑了多少人?容器社區(qū)最近還特崇拜 immutable deployment,以把容器根文件系統(tǒng)弄做只讀的為榮,全然不管有緊急安全更新或者功能修正怎么處理——什么,你要說(shuō) docker rm && docker run 再起一批不就完事么?真有這么簡(jiǎn)單就好了。
像 Linux kernel 和 git 那種才是正經(jīng) unix 設(shè)計(jì)的思想,分層堆疊,底層提供mechanism,高層提供 policy,各取所需,可惜人總是易于被洗腦,在接受各種高大上policy的時(shí)候全然忘了mechanism還在不在自己手里。
回合二:正確性之爭(zhēng)
強(qiáng)隔離、full OS 體驗(yàn)、保留 mechanism,這才是正道。另外容器還隱藏了一個(gè)坑,/proc/cpuinfo和free命令輸出是host os的,這坑了無(wú)數(shù)探測(cè)系統(tǒng)資源自動(dòng)決定默認(rèn)線程池和內(nèi)存池大小的程序,尤以Java最為普遍。
回合三:性能之爭(zhēng)
容器粉絲津津樂(lè)道——啟動(dòng)容器快,容器的開(kāi)銷(xiāo)少。這兩點(diǎn)確實(shí)如此但好處真的有那么巨大么?誰(shuí)有事沒(méi)事不停創(chuàng)建虛擬機(jī)?誰(shuí)的虛擬機(jī)生命周期平均在分鐘級(jí)別?誰(shuí)的“用完全啟動(dòng)時(shí)間”平均在秒級(jí)? 至于說(shuō)到虛擬機(jī)浪費(fèi)的資源太多,其實(shí)也就是個(gè)障眼法。理論上服務(wù)器的資源利用率平均不應(yīng)該超過(guò) 80%而實(shí)際上絕大部分公司的服務(wù)器資源利用率應(yīng)該都不到 50%,大量的CPU、內(nèi)存、本地磁盤(pán)都是常年浪費(fèi)的,所以 VM 的額外開(kāi)銷(xiāo)不過(guò)是浪費(fèi)了原本就在浪費(fèi)的資源罷了。就單機(jī)的巔峰 I/O 能力來(lái)言,VM 確實(shí)不敵容器。但平時(shí)根本就用不到巔峰狀態(tài), 原本一個(gè) VM 里多進(jìn)程干的事,非得搞多個(gè)容器跑,這容器開(kāi)銷(xiāo),這人力開(kāi)銷(xiāo)怎么算?
關(guān)于容器還有一個(gè)幻想,那就是可以在物理機(jī)上直接跑容器,開(kāi)銷(xiāo)巨低、管理巨方便,用專(zhuān)用物理機(jī)方式提供多租戶(hù)強(qiáng)隔離。前面兩點(diǎn)上面已經(jīng)駁過(guò)了,話說(shuō) 還有人用 openstack 管理 docker 容器呢。 我只是說(shuō)一下第三點(diǎn),在一臺(tái)物理機(jī)上直接跑容器的一個(gè)最容易被忽視的問(wèn)題:現(xiàn)在用來(lái)提供云服務(wù)的物理機(jī)一般都是硬件超級(jí)牛逼,跑上百個(gè)容器都沒(méi)問(wèn)題,但問(wèn)題在于用戶(hù)很可能只需要幾個(gè)容器,所以要么跟人共用物理機(jī),要么浪費(fèi)資源白交錢(qián)。哪怕用戶(hù)需要上百個(gè)容器,出于容災(zāi)考慮,也不可以把上百容器部署到一臺(tái)物 理機(jī)上,所以還是要么跟人共用物理機(jī),要么浪費(fèi)資源。
方案
以上是我的觀點(diǎn),我并不是“容器黑”,而是“實(shí)用白”。AWS、Azure、GCE 都主推在虛擬機(jī)上跑容器,按虛擬機(jī)收費(fèi),這非常明智的解決了問(wèn)題:老的純 VM 基礎(chǔ)設(shè)施不用動(dòng),計(jì)費(fèi)照舊,單物理機(jī)可以被安全的多租戶(hù)共用,資源隔離有保證(起碼比共享內(nèi)核強(qiáng)多了),把容器管理軟件如“kubernetes”給用 戶(hù),既滿足用戶(hù)的容器需求,又不擔(dān)心容器的多租戶(hù)問(wèn)題。
所以我認(rèn)為:以 VM 為基礎(chǔ),以容器為輔助點(diǎn),要買(mǎi)就買(mǎi) VM,自己管理容器,別買(mǎi) CAAS 直接提供的容器,別看不到底下物理機(jī)或者虛擬機(jī)。用 VM 還是用容器,冷靜考察自己的應(yīng)用上容器是否有好處。最后,殘念,VM 開(kāi)源管理軟件能搞個(gè)比 OpenStack 簡(jiǎn)單的東西嗎?
評(píng)論