①整机虚拟化:一台电脑当多台用(1998)②VirtualBox:个人玩家的免费虚拟机(2007)③容器革命:Docker 只要应用不要整机(2013)④Kubernetes:容器的「调度大脑」(2014)⑤今天:容器成了软件交付的标准

打开网易新闻 查看精彩图片

VMware、VirtualBox、Docker、Kubernetes……把「一整台电脑」越装越轻

你有没有想过:一台服务器是怎么同时跑起几十个互不相干的系统?又或者,为什么现在上线一个软件,从早些年的「装半天、配一晚上」,变成了现在的「推一下就好」? 答案,藏在「虚拟化」这条技术线上。 早年间,一台物理服务器往往只配跑一个应用——邮件归邮件,数据库归数据库。结果就是机房里堆着成百上千台机器,每台 CPU 利用率不到百分之十,像一群空转的暖炉,吃电、吃空间、还吃运维。虚拟化要解决的,正是这个「浪费」:能不能让一台电脑,同时当好几台用? 二十多年走下来,这条线的方向始终是一个字——轻。从模拟整台电脑,到只打包一个应用,再到让成千上万个应用自动编排,我们一步步把「算力」变得像水电一样随取随用。

1998 年之前,在普通的 x86 个人电脑上跑「虚拟机」,几乎是个不可能完成的任务。大型机早就能分区,但 PC 不行——x86 架构从设计上就没给「同时跑多个系统」留口子。 VMware 的出现,打破了这个僵局。几位从斯坦福走出来的工程师,用一套叫「二进制翻译」的巧办法,绕开了硬件限制:他们在 Windows 之上套了一层软件,这层软件能模拟出一整台完整的电脑,里面再装 Windows、Linux 随便你。这就是「虚拟机」——名义上一台机器,实际跑出了 N 台。 对企业来说,这是一场及时雨。过去「一机一应用」,机房被利用率不到百分之十的服务器塞满;有了虚拟化,一台物理机轻松托管十台、二十台虚拟机,利用率直接拉到百分之六十到八十,电费、占地、运维成本断崖式下降。行业管这叫「整合」(consolidation),也是现代数据中心的起点。

打开网易新闻 查看精彩图片

一套硬件,跑出 N 台虚拟电脑

企业端的虚拟化被 VMware 点燃,可普通用户想「玩一把」,门槛不低——VMware 偏企业、要授权。转机在 2007 年:Sun 公司推出 VirtualBox,后来随收购归到 Oracle 名下,但一直是免费、甚至开源的。 它的意义,是把虚拟机从「机房里的奢侈品」变成「桌面上的玩具」。你想学 Linux 又怕搞崩自己的 Windows?开个虚拟机随便造;怀疑某个附件是病毒?丢进隔离的虚拟机里双击;想重温二十年前的老游戏、想在 Mac 上跑个 Windows 软件?一台 VirtualBox 全搞定。 比起 VMware 的「重」与「贵」,VirtualBox 胜在轻量和零成本,成了无数人入门虚拟化的第一站,也被开发者奉为「练手加测试」的神器。

打开网易新闻 查看精彩图片

免费 + 轻量,人人都能玩虚拟机

虚拟机解决了「一机多用」,但它有个绕不开的笨重:每台虚拟机都得带上一整套操作系统——内核、驱动、系统服务,动辄几个 GB,启动要按分钟算。明明只想跑一个小小的网站,却要先「搬来整栋楼」。 2013 年,Docker 把「容器」这件事做到了人人可用。容器的思路很聪明:它不模拟硬件、也不装完整系统,只把「应用本身加上它依赖的运行环境(库、配置、环境变量)」打包成一个轻量的镜像。镜像通常只有几十到几百 MB,启动是秒级,一台机器能轻松塞下上百个容器。 它终结了 IT 界那句千古怨念:「在我机器上明明能跑啊!」——开发在自己笔记本上打包好镜像,运维原封不动丢到任何服务器,环境一模一样。这就是 Docker 的口号:Build once, run anywhere(构建一次,到处运行)。部署软件,从此从「装半天」变成「搬箱子」。一句话记住它俩的区别:虚拟机是「连地基带装修的整栋楼」,容器只是「楼里一个标准化打包的箱子」——共享地基,但内容彼此独立、随拎随走。

打开网易新闻 查看精彩图片

打包应用不打包系统,秒级启动

容器又好又轻,可一旦多到成百上千,新的麻烦来了:这上千个容器该铺到哪台机器上?某台机器宕机了谁顶上?双十一流量暴涨,怎么自动加开几十个实例?靠人手动管,显然不现实。 2014 年,谷歌把这道题的答案开源了——Kubernetes,希腊语意为「舵手」,因为中间有 8 个字母,圈内简称 K8s。它背后是谷歌内部用了近十年的 Borg 系统,每天调度几十亿个容器,久经考验。 K8s 扮演的是容器的「调度大脑」、是停机坪的「塔台」:自动决定每个容器跑在哪、挂了自动拉起、流量大了自动扩缩容、更新时还能做到用户无感知的滚动发布。如今它几乎是「云原生」的事实标准,从创业公司到一线大厂的后端,几乎都离不开它。

打开网易新闻 查看精彩图片

成百上千容器,交给 K8s 调度

把这条线连起来看,演进逻辑一目了然:先模拟整台电脑(虚拟机),再只打包一个应用(容器),最后让成千上万个应用自动编排(K8s)。每一步,都在做同一件事——把「重」变「轻」。 今天的软件交付,已经是一条流水线:写代码、打包成镜像、推到云端、几秒上线。对比二十多年前,装一台服务器要插线、装系统、配环境、调网络,折腾大半天,简直像隔了两个时代。 不过你可能会问:容器这么轻,虚拟机是不是该退休了?并没有。容器图省事,代价是「共享宿主内核」——隔离性比虚拟机弱,一个容器出事容易连累一片;而虚拟机各自独立、还能跑不同的操作系统、安全边界更硬。所以今天真实的云端是「虚拟机打底、容器在上面跑」:先用虚拟机把一台大机器切成几台隔离的,再在每台里头塞满容器。轻和稳,一个都不少。 说到底,虚拟化这二十多年做的事,本质上是把「算力」从一台台具体的机器里解放出来,变成一种像水、像电一样,拧开龙头就有、随取随用的公共基础设施。这,就是「云」最朴素的样子。

打开网易新闻 查看精彩图片

镜像一推,全球上线

一句话总结:虚拟化越做越轻,本质是让「算力」像水电一样随取随用。

轻,是这条技术线写给效率的情书。

你第一次用虚拟机或 Docker,是拿来干嘛的?学 Linux、测病毒,还是跑老游戏?评论区聊聊~

「软件进化史」系列持续更新,下期带你聊聊驱动与运行库的进化史。

— 完 —