系統(tǒng)虛擬化過時(shí) Containers主導(dǎo)未來?
近日,Linux Journal上發(fā)布了一篇文章,“Containers—Not Virtual Machines—Are the Future Cloud”,引起了業(yè)內(nèi)的廣泛討論。作者David Strauss是Pantheon公司(一家做Drupal PaaS服務(wù)的供應(yīng)商)的CTO,他認(rèn)為,VM的好處在于可以上下擴(kuò)展,可控的計(jì)算資源,安全隔離,并可以通過API進(jìn)行部署;但其缺點(diǎn)在于,每一臺(tái)VM都消耗了一部分資源用于運(yùn)轉(zhuǎn)一個(gè)完整的操作系統(tǒng)。所以,另一種方式更適合一個(gè)云平臺(tái),就是Linux Containers。
Containers可以作為OS層面的虛擬化的一個(gè)替代方案,你可以在一個(gè)宿主機(jī)上運(yùn)行多個(gè)隔離的系統(tǒng)。在單一的操作系統(tǒng)下運(yùn)行container更加高效,因此,container將會(huì)替代VM,成為未來云計(jì)算基礎(chǔ)架構(gòu)中的主導(dǎo)技術(shù)。
Container并不是一項(xiàng)新鮮技術(shù)。根據(jù)2009年在IBMdW上的“LXC: Linux container tools”一文當(dāng)中的介紹:
Container這項(xiàng)技術(shù)發(fā)展已久,Solaris Zones和BSD jails都是非Linux系統(tǒng)上的containers實(shí)現(xiàn)。Linux上的container技術(shù)也已經(jīng)有很多實(shí)現(xiàn),如Linux-Vserver,OpenVZ和FreeVPS。雖然以上這些技術(shù)都進(jìn)入了成熟期,但他們都沒有打入Linux內(nèi)核的mainstream。
另一方面,由IBM開發(fā)者Daniel Lezcano研發(fā)并維護(hù)的Linux Resource Containers項(xiàng)目則通過大量努力進(jìn)入了Linux內(nèi)核的mainstream,從而為更加成熟的Linux container解決方案提供了一個(gè)公共的支持平臺(tái)。
Oracle Technology Network上在2012~2013年間發(fā)布了一個(gè)系列文章,The Role of Oracle Solaris Zones and Linux Containers in a Virtualization Strategy,內(nèi)容比較新一些。其中對(duì)Linux Containers是這樣介紹的:
Linux Containers從根本上提供了原生的性能,你可以實(shí)時(shí)進(jìn)行資源分配的管理。Linux Container當(dāng)中運(yùn)行的二進(jìn)制程序?qū)嶋H上是直接在宿主機(jī)的內(nèi)核上運(yùn)行的一個(gè)普通的進(jìn)程,跟其他進(jìn)程沒什么兩樣。這同時(shí)也意味著CPU和I/O的規(guī)劃更加公平,而且可以進(jìn)行微調(diào)。Container下拿到的磁盤I/O性能是系統(tǒng)虛擬化所無法比擬的(即使在Xen下使用paravirt模式也無法達(dá)到)。你可以在Linux Container當(dāng)中運(yùn)行磁盤I/O較重的應(yīng)用,如數(shù)據(jù)庫(kù)。
跟系統(tǒng)虛擬化和Oracle Solaris Zones不同的是,LXC無法運(yùn)行其他非Linux系統(tǒng)。不過,你可以在同一個(gè)宿主機(jī)內(nèi)核下的不同containers里面運(yùn)行不同的Linux發(fā)行版。
這個(gè)名為lxc的項(xiàng)目是這樣描述自己的:
lxc Linux Containers
container namespace cgroup virtualisation
LXC是針對(duì)Linux Containers的用戶空間控制包。這是一個(gè)輕量級(jí)的系統(tǒng)虛擬化機(jī)制,有時(shí)被描述為“chroot on steroids”(類固醇上的chroot,意思是功能類似chroot,但比chroot提供了更多的隔離功能)
LXC基于chroot實(shí)現(xiàn)了完整了系統(tǒng)虛擬化,并在Linux現(xiàn)有的進(jìn)程管理架構(gòu)上添加了資源管理和隔離的機(jī)制。
lxc的實(shí)現(xiàn)為:
通過cgroup實(shí)現(xiàn)的“進(jìn)程管理組”進(jìn)行資源管理;
通過為clone(2)系統(tǒng)請(qǐng)求添加的flag實(shí)現(xiàn)資源隔離,可以為PID、網(wǎng)絡(luò)路由等創(chuàng)建數(shù)種新的命名空間;
提供了數(shù)種不同的隔離機(jī)制,如devpts文件系統(tǒng)下可以使用“-o newinstance”的flag。#p#
LXC將上述Linux內(nèi)核機(jī)制結(jié)合在一起,提供了一個(gè)用戶空間層面的container對(duì)象——一個(gè)輕量級(jí)的虛擬系統(tǒng),對(duì)系統(tǒng)、應(yīng)用的資源有完全的隔離和掌控。
如果以上內(nèi)容聽起來比較難以理解,CodeBox提供了一個(gè)更容易理解的解釋:
一般說來,VM是指全虛擬化/半虛擬化,即傳統(tǒng)意義上的虛擬機(jī),其機(jī)制是虛擬出硬件來,guest os跑在這些虛擬硬件上。
而container是在OS級(jí)別的資源隔離和命名空間,本質(zhì)上guest和host是一個(gè)OS。container 是namespace+cgroup,有些公司僅僅用cgroup做資源的隔離,比如說:
你在一臺(tái)機(jī)器上同時(shí)運(yùn)行MySQL和Apache,你又怕他們相互影響,所以用cgroup就可以很方便地設(shè)定MySQL用40%的cpu和2G的內(nèi)存,Apache用60%的cpu和1G的內(nèi)存。就是所謂的資源隔離。
相比系統(tǒng)虛擬化技術(shù),Container技術(shù)的優(yōu)勢(shì)在于省資源。然而在2005年,這項(xiàng)技術(shù)在安全隔離和資源隔離方面還無法滿足需求。根據(jù)David的描述,當(dāng)時(shí)的chroot是這樣的:
“nice”模式下,贏者恒贏,弱者拿不到資源。“fair”模式下,內(nèi)核又太平等,饑餓的非重要任務(wù)往往和饑餓的重要任務(wù)分到了一樣的資源。內(nèi)存和文件描述符(file descriptor)提供的功能太簡(jiǎn)陋,在正常運(yùn)行和崩潰之間完全沒有緩沖區(qū)。
而與此同時(shí):
當(dāng)時(shí)的Linux如果想把80%的CPU分給應(yīng)用A,20%的CPU分給應(yīng)用B,VM是唯一的解決方案。內(nèi)存、磁盤I/O、網(wǎng)絡(luò)I/O和其他可分配資源也是同樣。而且,VM在效率上一直在提升,現(xiàn)在使用VM造成的CPU消耗只有很少的幾個(gè)百分點(diǎn)。
但是即使如此,VM畢竟還是會(huì)造成資源消耗,而且還有較長(zhǎng)的OS啟動(dòng)的等待時(shí)間。比如,256MB的內(nèi)存運(yùn)行一個(gè)應(yīng)用是足夠了,但由于OS跟應(yīng)用搶資源,導(dǎo)致RackSpace不得不放棄了256MB內(nèi)存的實(shí)例。使用VM部署一個(gè)新的應(yīng)用,平均需要5~10分鐘的等待時(shí)間。
如果用container,256MB的內(nèi)存就夠用了,而且部署新應(yīng)用的等待時(shí)間只有5~15秒。
David還表示,containers將進(jìn)入下一個(gè)紅帽企業(yè)級(jí)Linux的大版本,即RHEL 7。
應(yīng)用方面,目前在國(guó)外,Heroku和Cloud Foundry都用到了containers:Heroku上的一個(gè)dyno實(shí)際上就是一個(gè)container,而Cloud Foundry則專門開發(fā)了Warden用于containers的管理。
國(guó)內(nèi)的阿里、騰訊、搜狐等,也都已經(jīng)開始在內(nèi)部使用container構(gòu)建云平臺(tái),尤其是阿里與騰訊,使用規(guī)模已經(jīng)不小。根據(jù)章文嵩博士的介紹,2011年底開始建設(shè)的、基于container的阿里T4云,截止到2012年底已經(jīng)部署了200臺(tái)左右的物理機(jī),instance的規(guī)模達(dá)到了兩千以上。2013年,阿里T4的instance規(guī)模已經(jīng)達(dá)到了四千,正計(jì)劃將T4的規(guī)模繼續(xù)擴(kuò)大到千臺(tái)以上規(guī)模的物理機(jī),并逐漸將核心的交易、商品業(yè)務(wù)遷移到該平臺(tái)上。
騰訊方面,其開放云PaaS平臺(tái)CEE現(xiàn)在已經(jīng)達(dá)到2000多個(gè)container實(shí)例。





















