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