写点什么

系统虚拟化已过时,Containers 将主导未来的云架构?

  • 2013-07-03
  • 本文字数:2465 字

    阅读完需:约 8 分钟

近日,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

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 实例。


感谢 CodeBox,淘宝仲明,毕玄,淘宝正明和海洋之心为本文提供线索与帮助。

2013-07-03 03:1610318

评论

发布
暂无评论
发现更多内容

【kafka运维】Topic的生产和消费运维脚本

石臻臻的杂货铺

kafka kafka运维 10月月更

数通路由交换之网络基础(一)

Python-派大星

10月月更

有奖测评 | 今天种下{1},明天就会收获一片{11.11}——程序员日暨11.11狂欢季来啦

京东科技开发者

云主机 测评 双十一 京东云 程序员日

Vue的开发模式与webpack🔥

渔戈

前端 Vue3 10月月更

以指标驱动业务决策,Kyligence 亮相 Gartner IT Symposium/Xpo™ 峰会

Kyligence

数据分析 指标中台 OLAP技术

《Go语言学习路线图》让你少踩坑,高效学,Let’s Go!

王中阳Go

golang 学习方法 技术专题合集 10月月更 “程”风破浪的开发者

直面数字化挑战,戴尔PowerEdge R750最全面的通用服务器

科技热闻

MASA Framework 缓存入门与设计

MASA技术团队

.net MASA Framewrok MASA

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

阿里前端二面高频react面试题

beifeng1996

React

openGemini内核源码正式对外开源

华为云开发者联盟

数据库 物联网 华为云 企业号十月 PK 榜

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

HummerRisk V0.4.1发布:新增依赖文件检测功能,优化 AWS 检测规则组,优化资源态势等内容

HummerCloud

云计算 云安全 云原生安全 10月月更 安全合规

即时通讯技术文集(第3期):高性能网络编程系列 [共14篇]

JackJiang

网络编程 即时通讯IM

软件测试 | 测试开发 | 校招面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

测吧(北京)科技有限公司

测试 测试开发

常见的网路设备和网络参考模型,以及常见的网络层协议及数据通信过程

Python-派大星

10月月更

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

DOM,Diff算法与Key机制

beifeng1996

React

React源码分析4-深度理解diff算法

goClient1992

React

Python列表和元组有什么区别

芥末拌个饭吧

后端 python 3.5+ 10月月更

计算机网络 ,什么是Internet?什么是协议?TCP/UDP的区别以及优缺点 分组交换与电路交换的区别以及优缺点

Python-派大星

10月月更

全彩LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

vue这些原理你都知道吗?(面试版)

bb_xiaxia1998

Vue

输入到页面展现到底发生什么?

loveX001

JavaScript

Java中的super和this关键字详解

共饮一杯无

Java 10月月更 super和this关键字

Go语言入门—06切片

良猿

Go golang 后端 10月月更

7 步保障 Kubernetes 集群安全

SEAL安全

Kubernetes 云原生 Kubernetes 集群 企业号十月 PK 榜 审计日志

前端经典面试题合集

loveX001

JavaScript

软件测试 | 测试开发工程师必读经典好书清单

测试人

软件测试 测试开发 测试工程师 测试书籍

软件测试 | 测试开发 | 测试开发工程师必读经典好书清单,抽奖赠书送福利!

测吧(北京)科技有限公司

测试

2022年第六届数据质量管理国际峰会重磅开启

数据质量管理智库

数据 数据隐私 数据安全 峰会 数据质量

系统虚拟化已过时,Containers将主导未来的云架构?_Linux_sai_InfoQ精选文章