☁️ 第四章 构建云服务的技术
📄 一句话概括

虚拟化的【方便】不在省钱,在快:一台服务器从【订货等六周】变成【点一下三分钟】;而真正改变行业的是它可以批量做——同一套模板克隆 20 台只要十分钟,于是【一次要很多台机器】这件事第一次变得可行。

📝 本节和前面几节的关系

上一节(4-3)讲了虚拟化【是什么】和【它把机器变成了资源】。这一节接着往下问一句:变成资源之后,为什么就【方便】了?

教材这个标题的副题是【大量服务的实现】——这五个字是关键。虚拟化的价值不在于能把一台变成两台,而在于它把【得到一台服务器】变成了一次可以重复一万遍的操作。一次操作和一万次同样的操作,是两种完全不同的事——后者才需要自动化、才需要编排、才可能出现云。

一、方便在哪三处

把【物理机 → 虚拟机】的变化拆开,方便落在三处:

维度 物理机时代 虚拟化之后 为什么这是质变
获得 采购、到货、上架、装系统 从模板起一台,几分钟 从【项目】变成【操作】
复制 一台一台装,装完还不完全一样 克隆,完全一致 从【手艺】变成【工序】
回收 报废或闲置,占着机位 关机即归还资源 从【资产】变回【资源】

三处里最容易被低估的是第二处【复制】。

物理时代,两台服务器【配置几乎一样】是一个需要努力达成的目标——不同的人装、不同的时间装、装完还各自改过。虚拟化之后,克隆出来的机器是逐字节一样的。这件事直接带来了两个后果:

  1. 测试环境可以和生产环境完全一致——于是【在我这儿是好的】这句借口失效了
  2. 横向扩容变成了一件确定的事——第 8 台和第 1 台完全没有差别,不会出现【就那一台特别慢】

二、【大量服务的实现】:批量化改变的是什么

这是本节的核心。虚拟化让【拿到服务器】这个动作变得便宜之后,很多原来不成立的做法就成立了:

做法 每台要 6 周时 每台要 3 分钟时
给每个客户单独开一套环境 不可能 可以
每次上线都新起一套完整环境,测完就删 不可能 可以
临时起 50 台跑一次批处理,跑完释放 不可能 可以
每个开发人员一套独立环境 排队等 各来一套

看最后一行:这一栏里的四种做法,都是【用量起伏很大、生命周期很短】的场景。物理机时代它们全都做不了,因为设备的生命周期(几年)和使用需求的生命周期(几天)差得太远。

虚拟化把这两个生命周期解耦了——机器的生命周期是几年,虚拟机的生命周期可以是几小时。这是云能做到【弹性】的机制层面的原因,也是 3-2 那篇【想到就可以立即做到的系统】的技术底座。

三、动手 Demo:切成 8 台,新服务器 3 分钟到位

看到什么算成功:

==================================================================================================
【Demo 4】为什么方便:一台机器切成 8 台,新服务器 3 分钟到位
==================================================================================================
  场景:一台 32 核、512 GB 内存的物理服务器,切成 8 台虚拟机,
        每台分 4 核、64 GB。

    划分核对:8 × 4 核 = 32 核,正好用完
              8 × 64 GB = 512 GB,正好用完

  这件事在物理时代做不了——你没法把一台服务器掰成八台卖。
  虚拟化之后,它变成一次【分配操作】。

  再看时间账(这就是 4-4 标题里【大量服务的实现】的意思):

  动作                          物理服务器            虚拟服务器
  --------------------------------------------------------------------------------------------
  采购与到货                    4~6 周                不需要
  上架、布线、通电              半天                  不需要
  安装操作系统                  1 小时                3 分钟(模板)
  克隆 20 台同样配置            20 小时               10 分钟
  回收再用                      报废或闲置            关机即归还
  合计(含采购)                约 6 周               约 13 分钟
  --------------------------------------------------------------------------------------------
  注意最后一行:物理的 6 周里,绝大部分是【等】。
  虚拟化消掉的正是这段等待——这才是它被叫作【方便】的原因。

  但要记住代价:8 台虚拟机共用一套物理资源。
  物理机一停机,8 台一起停;这叫【故障域没有变小】。
  所以真正生产用的虚拟化平台,必须配共享存储与 HA 迁移(4-14 会讲)。

读结果:

30 秒实验

打开任意一家云服务商的【镜像】或【模板】页面(没有账号也可以看文档),做两件事:

  1. 看它提供多少种预装好的操作系统镜像(通常几百到上千个)。
  2. 看有没有【自定义镜像】或【快照创建镜像】这类功能。

做完这个你会明白:云服务商卖的不是【一台机器】,而是【一台机器的一个模板】。你选镜像的那一下,做的正是本节说的【克隆】——只不过克隆源不是你的机器,而是它预先准备好的。这就是虚拟化在商业上的直接体现。

常见误区

  1. 错误:虚拟化最大的好处是省钱。——纠正:最大的好处是【把等待消掉了】。省下的机器确实是钱,但真正改变业务的是【从想法到能用只要几分钟】——这件事让很多以前不敢做的尝试变得可行(3-2 里算过那笔 20 天对 23 分钟的账)。省钱是结果之一,不是主要矛盾。 如果只看省钱,很容易得出【规模足够大时自建更便宜】的结论而错过重点。

  2. 错误:虚拟机克隆出来的 20 台完全一样,所以它们的行为也完全一样。——纠正:机器一样,连上去的东西不一样。IP 地址、主机名、存储挂载、连接的后端服务,这些都要在起机器时分别配置;如果不配,20 台会抢同一个 IP、连同一个数据库、写同一个目录。所以【克隆】之后必须接一步【个性化】——这也正是后面 4-8(基础设施代码化)要解决的问题。

  3. 错误:既然开机器这么快,那就不用管已经开了多少台了。——纠正:快恰恰是风险来源。开机器只要三分钟,而记得关掉它、记得它是什么时候开的、记得它是谁开的——这三件事没有任何技术帮你做。于是会出现大量【没人记得的机器】在持续计费(4-8 的 Demo 里就有 5 台这种机器)。开得快必须配上一个能查清家底的东西,否则省下来的钱会从另一个口子漏走。

  4. 错误:虚拟机可以随便迁移,所以物理机坏了也不怕。——纠正:能迁移的前提是【存储不在本机】和【目标机有资源】。如果虚拟机的磁盘文件就在那台物理机的本地盘上,物理机一坏,虚拟机也带不走——这正是 4-14 要讲共享存储的原因。而且目标物理机必须有足够的剩余资源接住它;集群里每台都跑满了,谁也没地方接。

自测三问(点开对答案) 1. 教材这个标题的副题是【大量服务的实现】,为什么用【大量】而不是【快速】? —— 因为**量的变化会改变做法,快只改变时间**。快一倍、快十倍,你还是只能一次做一台;但**当【做一台】的成本降到接近于零,做一万台就变成了一个新选项**,于是才出现了【每个客户一套环境】【每次上线新起一套】这类以前想都不敢想的模式。**这跟 1-12 里云计算的历史是同一件事:集中化的关键不是机房大,是自动化让边际成本趋近于零。** 2. 【克隆出来的机器完全一致】这件事,为什么对运维特别重要? —— 因为它把【排障】从【找不同】变成了【找相同的之外的东西】。物理时代机器各不相同,出一台机器有问题,第一件事是**逐项对比它和别人有什么不一样**——这个过程极慢且经常没有结论。克隆之后,**所有机器在起始状态上是一样的**,所以问题一定来自【之后的配置或环境】。**这是运维效率的一次质变,而不只是省时间。** 3. 为什么说【开机器变快】需要配一个【查清家底】的机制? —— 因为**快意味着动作多,动作多意味着混乱积累得快**。成本会在三个地方悄悄漏掉:没人记得的闲置机器、开重了的机器、用完没释放的临时环境。**管理成本的上升速度不会低于使用成本的下降速度**——这是 3-12 那节课讲【长期支出】时最重要的一条:云的成本治理不是把价格谈下来,是**先把不该开着的关掉**。

相关笔记