第 2 章 · 服务器第 1 页,共 4 页
服务器是一台什么样的电脑?
第 1 章把百家菜服务器画成了一个框。这一页把它打开,看里面的处理器、内存、硬盘和网络各做什么,一个请求怎样用到它们,以及它们的快慢差了多少。
为什么需要
第 1 章里,你的手机向百家菜的(server)发出(说明想要什么的消息),服务器发回(里面是结果)。百家菜是本课程虚构的家常菜谱网站,放在一台租来的电脑上。每天 17:30 到 18:30,晚饭前打开菜谱的人最多,页面越来越慢,偶尔打不开。要弄清为什么,先看看这台电脑里有什么。
服务器并不是一种特别的机器。它就是一台电脑,里面装的东西和你的笔记本电脑是同一类;不同的是,它一直开着、连着网,运行着专门等请求的程序,请求一到就处理,再发回响应。「服务器」有时也指这些程序;这一章说的服务器,指这台电脑。
怎样做
打开这个框,里面主要有四样:
- 网络:网卡把电脑连上网,请求从这里进来,响应从这里出去。
- (CPU):按步骤执行程序。百家菜服务器的处理器有 4 个核心,每个都能单独执行程序,所以能同时处理几个请求。
- (RAM):放正在用的程序和数据,存取很快,一断电就清空。这台有 16 GB。
- (disk):长期保存全部的菜谱、照片和程序,断电不丢,但存取比内存慢得多。这台是 500 GB 的(SSD),用芯片保存数据,没有会转动的零件;另一种机械硬盘靠转动的盘片读写,读零散的小块数据时还要慢约一百倍。
服务器上同时运行着几个程序,各管一类请求:网页服务发出菜谱页,菜谱搜索按名字找菜,照片服务发出成品照片。这种专门负责一类功能、通过(服务器公开的请求清单)对外提供的程序,叫(service)。它不是日常说的客服或服务态度,而是一个程序。
下图演示一个请求怎样用到这几样组件。
一个请求在机器里:用到的组件依次亮起
先看这里选一种请求,按「下一步」看哪个组件亮起;再换成「只在硬盘上」播一遍,比一比两种情况的读数。
| 已经在内存里 | 只在硬盘上 | |
|---|---|---|
| 用到的组件 | — | — |
| 读一次数据 | — | — |
百家菜服务器内部的示意图:上方一排是服务器上运行着的三个服务,下面的大框是服务器,里面有网络、处理器、内存和固态硬盘四样组件。每一步用到哪样组件,写在图下的说明里。
服务器的配置和上面的三个服务都是为百家菜虚构的。
内存和硬盘有三点不同:
- 快慢:是十亿分之一秒,微秒是百万分之一秒。随机读一次内存(到任意位置取一小块数据)约 130 纳秒,实测在 115 到 180 纳秒之间;随机读一次固态硬盘约 100 微秒,约是读内存的 770 倍。
- 断电:内存一断电就清空,硬盘上的数据还在。
- 大小和价钱:这台有 16 GB 内存、500 GB 硬盘。按微软 Azure(出租电脑和在线服务)公布的价格,同样大的空间,内存的月租是固态硬盘的二十到将近四十倍。
所以程序和数据平时存在硬盘上,要用时再读进内存。GB 是一种:KB、MB、GB、TB 每往上一档约大一千倍,1 TB 约是 1,000 GB。
你平时说的「手机内存 256G」,指的是长期保存照片和 App 的存储空间,相当于这里的硬盘;日常这样叫,有的手机规格页也写作「机身内存」。这一章的内存,专指规格页上另列的「运行内存」:一部手机存储 256 GB、运行内存 8 GB,照片放在前者里,关机不会丢;后者才是这里说的内存。
纳秒、微秒和毫秒(千分之一秒)相邻两档都差 1,000 倍,人对这么短的时间没有感觉。比较这样的数,常按十倍一档来数:相差十倍算一个(order of magnitude),相差一千倍是三个。下图把机器里的时间放大成人的时间。
时间放大镜:把机器里的时间放大成人的时间
先看这里先猜一猜读一次固态硬盘放大以后有多久,再换几种倍数看看。
按十亿倍放大,读一次内存(约 130 纳秒)变成约 130 秒,两分钟多。读一次固态硬盘(约 100 微秒)会变成多久?
时间放大镜的示意:一条按十倍一档排的刻度尺,上面标出四件事在机器里用的时间,下面写着放大以后的时间。同样的内容列在下面的表里。
| 这件事 | 机器里 | 放大以后 |
|---|---|---|
| 1读一次内存 | 130 纳秒 | 约 2.2 分钟 |
| 2读一次固态硬盘 | 100 微秒 | ? |
| 3从美国东部到西欧来回一次 | 83 毫秒 | ? |
| 4从美国东部到东南亚(新加坡)来回一次 | 224 毫秒 | ? |
放大以后的时间,是机器里的时间乘以放大的倍数。这一页的倍数和放大以后的时间都是用公开的数推算的,用到的数见下面的资料来源。
按十亿倍放大,读内存两分钟多,读固态硬盘一天多,跨大洲来回一次却要好几年。读内存和跨大洲的来回差约 64 万到 172 万倍,也就是大约六个数量级。
这个放大镜有一处不成立:放大只保留了倍数,人并不真要等这么久。读一次固态硬盘实际只要 0.1 毫秒,人察觉不到;人感觉得到的慢,是许多次这样的操作加在一起。
代价是什么
代价是要在快、大、便宜和断电不丢之间取舍:内存快,却小、贵,一断电就清空;硬盘大、便宜、断电不丢,却慢几百倍。内存装不下全部数据,要读的数据只在硬盘上时,请求就慢下来;第 5 章讲缓存时,会细讲怎样把常用的结果留在更快的地方。
每样组件也都有上限:核心就那么几个,同一时刻能处理的请求有限;内存就那么大,放不下的只能留在硬盘上。服务器还必须一直开着:一断电或重启,内存清空,程序和数据都要重新读进来。
资料来源
以下资料均于 2026-10-22、2026-10-23 和 2026-10-25 访问。
- What is a web server?
- VII. Port binding
- Semiconductor glossary: DRAM
- What is an SSD?
- napkin-math
- A Look into Intel Xeon 6's Memory Subsystem
- Azure network round-trip latency statistics
- SI prefixes
- Why does Explorer use the term KB instead of KiB?
- HUAWEI Mate 70 规格参数
- vivo X200 专业影像旗舰
- Dsv5 size series
- Esv5 size series
- Azure 零售价格接口:美国东部 D2s_v5、E2s_v5、D96s_v5 三种虚拟机的价格
- Select a disk type for Azure IaaS VMs - managed disks
- Azure 零售价格接口:美国东部 P30、E30 两种托管磁盘(1,024 GiB)的价格