第 2 章 · 服务器第 2 页,共 4 页
「云」到底在哪里?
百家菜放在一台租来的电脑上,人们把这叫作「放在云上」。这一页看云在哪里、租和自己买各要付出什么,以及一台大电脑怎样分给好几个程序用。
为什么需要
百家菜是本课程虚构的家常菜谱网站。站长没有自己买(一直开着、等别人来要东西的电脑),而是租了一台,人们把这叫作「放在云上」。你平时说的「云」,可能是手机里存照片的网盘,也可能是天上的什么东西。这样想的人不少:2012 年的一项调查问了 1,004 人,51% 以为恶劣天气会干扰云。
怎样做
第 1 章说过机房:集中摆放许多台电脑、供电和网络都很稳定的房间。集中摆放大量服务器的场所叫(data center),常常是一整栋楼,除了一排排服务器,还有稳定的电力、冷却、网络和安保。(cloud)通常指按需租用别人数据中心里的电脑和服务:要用就开,不用就关,用多少付多少。美国国家标准与技术研究院 2011 年给它下的定义,大意是:通过网络,随时从许多人共用的一大批机器、存储和网络里取用一份,要多少很快就能分到多少,用完很快交还。网盘只是云上的一种服务,百家菜租的服务器是另一种。
云由遍布世界的数据中心组成。亚马逊旗下出租电脑和在线服务的 AWS,有一项存放文件的服务叫 S3:2026 年 3 月,它分布在 39 个地区,每个地区都有好几处数据中心,存着超过 500 万亿份文件。
租一台和自己买一台,差别在哪里?在下图里比一比两种做法的准备时间和花费。
自己买还是在云上租:准备时间和花费
先看这里调节「要用多久」(滑块、预设或微调按钮都可以),找出从第几个月起,自己买开始比租省钱。
两栏对比的示意:左边是自己买,右边是在云上租。每栏写着准备时间,画着前期花费和每月花费的两根柱子,最下面是合计。
自己买
- 下单
- 等交货、装好、接上网
- 上线
- 前期:买机器
- 2,400 美元
- 每月:电费、网费、放机器的地方
- 每月 20 美元
12 个月合计:2,640 美元
在云上租
- 选好配置
- 开机
- 前期:不用付
- 0 美元
- 每月:月租
- 每月 100 美元
12 个月合计:1,200 美元
用 12 个月:在云上租合计 1,200 美元,比自己买的 2,640 美元少,租更省。
别忘了准备时间:自己买的那一个月里机器还没到,百家菜还上不了线;租的一分钟就能用。
图里的价钱和准备时间都是示意,不是真实报价;真实的差别要按具体的配置和用量一项一项比。
所以,用量起伏大、刚起步、只用一阵子,租更划算;用量长期稳定、规模又大,自己买可能更省。用量起伏大时,自己买得按高峰备够机器,平时多出来的那些闲着也照样花了钱;租的可以在高峰时多开几台,过后关掉,只为用到的时间付钱。租还快:要多一台,不必等交货,很快就能开起来。
云厂商手里是一台台很强的实体服务器,你租到的「一台电脑」,多半是从中分出来的一份:用软件把一台大电脑分成几台互不干扰的「小电脑」,每一台叫一台(virtual machine)。它用的是真实的、和,各自装着一整套(operating system),即管理硬件、让各个程序共用它的那一层软件,比如手机上的安卓、电脑上的 Windows。操作系统里直接跟硬件打交道的那一部分叫(kernel)。它和处理器的「核心」名字相近,却是两回事:内核是软件,核心是处理器里的硬件。
只想把几个程序分开运行,还有更轻便的办法:(container)。它把一个程序和它要用的文件打包在一起,与别的程序隔开;同一台机器上的几个容器共用这台机器的内核,不必各带一整套操作系统。这里的容器不是瓶子、箱子,而是打包、隔开程序的一种方式。在下图里调节程序的个数,比一比两种做法。
虚拟机和容器:每个程序各带一套操作系统,还是共用一套
先看这里选要分开运行几个程序,看两幅图里操作系统那一层各有几套。
用虚拟机
- 操作系统
- 操作系统:3 套,每台虚拟机各 1 套
- 每个程序随身带
- 一整套操作系统,连同内核。例如 Ubuntu 为云上虚拟机准备的整份镜像,约 621 MB
- 启动时要做的事(长短只是示意)
- 启动操作系统启动程序
用容器
- 操作系统
- 操作系统:只有机器上的 1 套;容器不带内核,也不各带一整套
- 每个程序随身带
- 程序和它要用的文件,不带内核。例如 Alpine Linux 给容器打底的最小镜像,不超过 8 MB,还不含你的程序
- 启动时要做的事(长短只是示意)
- 启动程序
镜像是装好了软件、拿来就能用的一整份文件;Ubuntu 和 Alpine Linux 都属于 Linux,服务器上常用的一类操作系统。两个大小不是同类:Ubuntu 那一份能直接开机,连同内核;Alpine 给容器打底的那一份只有程序要用的一些基本文件,没有内核。左图只算每台虚拟机里各带的操作系统;把机器分成几台虚拟机的那层软件没有画出来,有的机器为了运行它,自己还另装一套操作系统,也没有算进去。
两者常常一起用:在云上租到的多半是一台虚拟机,在里面再跑好几个容器,同样的硬件就能多跑几个程序。
不管是实体机器还是虚拟机,在一组相连的机器里,每一台常被叫作一个(node);图上的一个框,有时也叫一个节点。
代价是什么
租的代价首先是钱。用量长期稳定、规模又大时,租可能比买贵:做在线办公软件的 37signals 公司 2024 年说,它把程序从 AWS 搬到自己买的服务器上,买服务器约花了 70 万美元,每年的云账单从 320 万美元降到 130 万美元;剩下的是按合约存文件的费用,2025 年合约到期后,它把大部分文件也搬了出来。
上了云也不等于不会出故障:单个节点会坏,整个数据中心也会断电、断网。第 4 章和第 8 章讲怎样把节点和数据分散到几处,一处出事不至于全部停下。
虚拟机和容器也各有代价。每台虚拟机都带着一整套操作系统,占地方,启动时也要先把它启动起来;只为隔开一个小程序就开一台,很浪费。容器轻便,但几个容器共用一个内核,彼此隔得没有虚拟机那么严:一个容器里的程序有恶意或者出了错,更容易影响到同一台机器上的其他容器。AWS 的工程师在 2020 年的论文里写道,许多客户的程序放在同样的机器上,既要隔得严,又要轻便;为此他们做了很轻的虚拟机 Firecracker,只保留必需的几样设备,启动不到 125 毫秒。可见虚拟机启动慢,是因为一般的虚拟机要启动的东西多。
资料来源
以下资料均于 2026-10-22、2026-10-23 和 2026-10-25 访问。
- Survey: 51 percent think 'stormy weather' interferes with online cloud
- What is a data center?
- NIST SP 800-145: The NIST Definition of Cloud Computing
- Twenty years of Amazon S3 and building what's next
- AWS Fault Isolation Boundaries: Availability Zones
- What is a virtual machine (VM)?
- What is Linux?
- What is the Linux kernel?
- What is a container?
- Ubuntu 24.04 LTS (Noble Numbat) release [20261017]
- About Alpine Linux
- Nodes
- Our cloud-exit savings will now top ten million over five years
- It's five grand a day to miss our S3 exit
- Moving Mountains of Data off S3
- REL10-BP01 Deploy the workload to multiple locations
- Firecracker: Lightweight Virtualization for Serverless Applications
- Firecracker