云计算是目前计算机业界热门的方向,Cgroups作为一种有效的资源管理方案在云计算中得到越来越大的应用。下面简要介绍一下Cgroups在云计算中一些应用,欢迎补充。
首先,我们看一下Cgroups的娘家Google(Cgroups最早是Google工程师提出的)。在推出PaaS产品GAE几年后,Google终于推出了自己的IaaS的产品Google Compute Engine,跟Amazon进行全面的竞争。跟Amazon EC2采用Xen虚拟机不同的是,GCE采用的KVM虚拟机。KVM虚拟机是一种将Linux 内核当成Hypervisor的虚拟化技术,一个KVM虚拟机作为一个进程运行在Linux 内核上。由于KVM虚拟机是Linux的一个进程,因此Google采用了Cgroups机制来进行资源管理,控制每个KVM虚拟机可以使用的物理资源,报告CPU占用率,CPU核心,内存等。下面Google IO 2012的图可以说明这一点:
然后我们再来看Redhat的OpenShift。OpenShift是Redhat推出的PaaS产品。PaaS主要服务之一就是为App提供一个运行环境。为了保证服务质量,PaaS厂商都会采取一定的技术手段,保证不同的App之间不会互相影响。因此,App的运行环境一般是隔离,资源受控的。Cgroups作为一种资源管理方案,这里正是用武之地。
下面我们来一下Redhat官方doc上的一段话:The basic PaaS resource container is called a gear, which uses Security-enhanced Linux (SELinux), control groups (cgroups), quotas, and other Linux technologies to limit the amount of memory and disk available to what is called a cartridge。
cartridge是OpenShift为App提供的运行环境,而cartridge本身是出于一个叫gear的资源容器中的。而redhat则是通过selinux、Cgroups和quotas来构建这样一个安全隔离、资源受控的资源容器的。
最后我们再来看vmware的Cloud Foundry。Cloud Foundry是vmware推出的PaaS产品。Cloud Foundry中,DEA是App的运行环境,全称是DropletExecution Agent。一台虚拟机上会运行一个或多个DEA。一个DEA可以启动多个App(又称Droplet)。最初的时候,DEA是没有采用任何隔离手段的,用户的App是原生跑在机器上的。后来他们开发出了Warden,一个程序运行容器。这个容器提供了一个孤立的环境,Droplet只可以获得受限的CPU,内存,磁盘访问权限,网络权限。而Warden在Linux上的实现的底层机制就是Cgroups。利用Cgroups管理App可以使用的物理资源。
总结一下,Cgroups作为一种资源管理手段,可以在云计算的多个应用场景使用。
由于Cgroups是Linux内核提供的一种机制,开销很小,也不要对内核打额外的补丁,使用起来也很方便。对于IaaS厂商来说,需要强隔离,高灵活性(满足用户安装各种OS的需求),基于容器的虚拟化技术不能很好地满足要求,Cgroups却可以提供很好的资源控制,再结合传统系统虚拟化技术也能提供很好的解决方案,就如同GCE一样。
而对于PaaS厂商来说,只要是在一台机器(无论是物理机还是虚拟机)上部署多个App,就需要多个相互隔离,资源受控的运行环境。现在主流的PaaS厂商基本上都是支持在一台机器上部署多个App(Amazon Elastic Beanstalk是一个Instance上跑一个App,不需要考虑这个问题)。如果采用传统的虚拟化技术则有较大的开销,而有些PaaS本身就构建在IaaS提供的虚拟机上(这样以来虚拟化开销更大),因此必须考虑更轻量级的方案。基于容器的虚拟化技术正是这样一种选择,既能提供隔离性,又能进行资源控制,而且虚拟化开销很小。