写点什么

系统虚拟化已过时,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:1610512

评论

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

迎战大厂!“金三银四”和春招通过率达95%的Java面试要点集锦

Java 程序员 架构 面试

无线网络的用户隔离功能

聊聊园区网中的专网架构

冯骐

运维 网络 VRF 虚拟路由表

Nydia

9.hooks源码(想知道Function Component是怎样保存状态的嘛)

全栈潇晨

源码分析 React React Hooks

聊聊我对SCRM的理解

boshi

CRM 七日更

关于写作的一点小想法「Day 13」

道伟

28天写作

AI数学基础之:概率和上帝视角

程序那些事

人工智能 AI 程序那些事 概率论

《精通比特币》学习笔记(第二章)

棉花糖

区块链 读书笔记

通俗易懂!看了不会忘的网络面试知识点

编程 架构 面试

Kubelet从入门到放弃系列:GPU加持

DCOS

AI gpu Kubernetes 云原生

windows 搭建ftp服务

xiezhr

vsftpd ftp ftp服务 文件服务 3月日更

dubbo 源码 v2.7 分析:通信过程及序列化协议

程序员架构进阶

架构 RPC 七日更 dubbo源码 3月日更

项目汇报会复盘

Geek_XOXO

从JVM底层原理分析数值交换那些事

秦怀杂货店

JVM 交换数值

Elasticsearch Index Management 索引管理

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

Wireshark数据包分析学习笔记Day1

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

(28DW-S8-Day13) 在线教育班型和角色

mtfelix

28天写作

程序员成长第十九篇:要不要转管理岗?

石云升

程序员 28天写作 职场经验 管理经验 3月日更

科技强国梦的百度式注脚:扎根土壤、拥抱变局、眺望星空

脑极体

2021程序员春招必备:Java面试知识点+答案(7大分类 5000字解析)

比伯

Java 编程 架构 面试 程序人生

MySQL数据库的安装与使用

若尘

MySQL 数据库

Elasticsearch Analyzer 分词器

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

Java的锁

并发编程

2021抖音面经分享:Java进阶核心知识集/算法刷题宝典(金三银四必备)

比伯

Java 编程 架构 面试 程序人生

工作三年,小胖问我:什么是生产者消费者模式?菜到抠脚!

一个优秀的废人

Java 多线程 阻塞队列 生产者与消费者

翻译:《实用的Python编程》03_05_Main_module

codists

Python

不知不觉不假思索——可供性

Justin

心理学 28天写作 游戏设计

MySQL数据库DDL、DML详解

若尘

MySQL

【回溯算法】经典题:求目标和的组合方案 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

三十而已

ES_her0

28天写作 3月日更

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