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