全球效率最低的数据中心:搭建指南
一份纯属假设的指南,教您搭建效率最低的数据中心:一台被溺爱的服务器、RAID 0、把发热当成策略,以及一个监控自己的监控系统。
您要搭建的东西
本站的每一篇指南都在教您如何把事情做对:命令的先后顺序、正确结果应该是什么样子、有哪些失败模式并逐一点名。这篇指南不一样。今天,完全出于假设,我们要设计一座金钱、电力和自负所能造出的效率最低的数据中心。
我们需要一个衡量指标,所以借用行业自己的指标:PUE,即电源使用效率(Power Usage Effectiveness)——设施总耗电量除以真正到达计算设备的电量。一座超大规模数据中心的 PUE 大约为 1.1:几乎每一瓦都在做有用功。一间像样的企业机房能做到 1.5。我们的目标是 4.0 或更高,也就是说每有一瓦用于计算,就有另外三瓦白白消耗掉。我们会经常提到这个数字,就像正经指南经常提到备份一样。
选址:发热才是重点
在真正的数据中心里,制冷是最大的一项开销,所以我们的数据中心要在热力学的主场上和它硬碰硬。理想的位置是阁楼。朝南。最好还有一扇天窗,正好把阳光照在服务器上,让机器同时接收自身的废热和太阳的热量——这是您的电费单和一颗恒星之间的合作。
冬天,制冷靠开窗解决。真正的数据中心确实会使用室外空气——这种技术叫作自然冷却(free cooling),它是经过工程设计、过滤和湿度控制的。而我们会通过一扇窗户偶然地用上它,这扇窗户同时还会放进雨水、花粉,以及每个季度至少一只迷路的鸟。
若要追求真正的艺术境界,就装一台空调,然后在它的温控器两英尺外放一台电暖器,把电暖器设得比空调的目标温度高两度。现在两台机器会永远持续运转,处于完美的互相较劲之中。电力公司会在圣诞节给您寄贺卡。
一台服务器,很大,被溺爱
冗余会稀释感情投入。我们的数据中心里恰好只有一台服务器,而且它无比庞大,因为一台带 512 GB 内存的机器让人觉得像是基础设施,而四台小机器则让人觉得像是一份待办清单。
这台服务器有一个名字。不是主机名——是一个名字。通常叫甘道夫(Gandalf),或者奥丁(Odin)。您没法下线奥丁。奥丁已经连续运行五年了:
$ uptime
09:14:02 up 1847 days, 3:22, 1 user, load average: 6.41, 6.38, 6.40这个数字是一种骄傲,所以您会把它截图发出去,而每一个看到这张截图的攻击者也同样觉得它很了不起:1,847 天的正常运行时间意味着 1,847 天里的内核漏洞,无人修补。反正重启也是想都别想的事——一次重启会让您发现哪些服务是在 2021 年手动启动、从来没写进 systemd 单元的。没人记得是哪些。这台服务器如今在组织架构图里成了承重结构。
存储:速度,以及其他丢数据的方式
磁盘配置成 RAID 0,为了性能。那个零指的是允许损坏的磁盘数量。为了达到最大效果,把阵列条带化到来源各异的存储介质上:两块正经的 SSD、一块老化的机械硬盘,还有一根会议上发的 U 盘。整个阵列的可靠性恰好等于那根会议 U 盘,这正是设计所在。
备份由同一个阵列上一个名叫 backup_final_v2_REAL 的目录负责,里面装着上一套命名方案的 tar 包。异地备份则由一张写着“设置异地备份”的便利贴代表,从技术上说,当您把它贴在笔记本盖上带回家时,它确实存储在了异地。
正确的结果应该是这样的:df 报告 97% 的使用率,以及一个下个冲刺再处理它的计划。
网络:一切都只有一根线
DNS 服务器就跑在这台机器上,这样当服务器宕机时,它会连带着把您本该用来查明原因的那条 DNS 记录一起带走。这叫作整合。
防火墙在 2021 年被关掉了——本来是临时的,为了调试某个问题。调试结束了;防火墙却没有回来。路由器上的每一个端口都被转发到服务器上,“为了以后省事”,而路由器的管理面板可以从 WAN 一侧用出厂密码访问,方便远程管理。方便您,也方便别人。
服务器最近一直异常地热,就算按阁楼的标准也算热,而 top 显示最繁忙的进程是一个叫 xmrig 的东西。我们猜这就是我们在用的监控工具。我们没有装它——它是在端口被转发后不久自己冒出来的,我们把这看作生态繁荣的标志。它全天候地进行监控。
电力经由一串消费级插线板送达,这些插线板首尾相接的总长度超过了走到配电箱的距离——从某种意义上说这很高效,因为您会经常去光顾那个配电箱。
用复杂性实现冗余
在真正需要冗余的地方拒绝了冗余之后,我们现在要在不需要的地方加上它。公司主页——一个静态 HTML 文件——由一个十二节点的 Kubernetes 集群提供服务。这实现了工程师所说的“简历驱动架构”:页面加载依然只需 nginx 本可提供的那四十毫秒,但它现在可以以需要请顾问才能解决的方式出故障了。
为了隔离,集群本身运行在一个虚拟机里的一个虚拟机里的一个虚拟机中,每一层增加安全性的方式,就像松露鸡(turducken)每多一层就多一种禽类。联系表单由九个微服务组成。其中两个从未被调用过。有一个是承重结构,但没人知道是哪一个。
供暖即服务
现代服务器把电力转化为计算和热量,而我们打算把第二种产出最大化。搭建一台没有 GPU 的媒体服务器是经典玩法:用 CPU 转码一路 4K 流会把十六个核心跑满,并温暖一间小卧室,这是一台还能放电影的电暖器。有野心的运营者会进阶到用 CPU 运行大语言模型——一台带 API 的、七百亿参数的电暖器,产出 token 的速率最好按季节来衡量。
监控系统监控自己
可观测性很重要,所以我们部署了一个自托管的正常运行时间监控——就装在它所监控的那台服务器上。当奥丁死掉时,监控也随之死掉,而精妙之处就在这里:没有告警触发。没有告警就意味着没有事故。没有事故就意味着完美的正常运行时间,从测量结果上看是这样。月度报告从未这么好看过。
为了完整起见,告警邮件通过一台同样跑在奥丁上的邮件服务器转发。于是整条告警链路完全自成一体,就像一条吞食自己尾巴的蛇完全吃饱了一样。
令人不安的部分
下面是我一直拖着不想写的这一节。以上这些没有一样是虚构的。那台被溺爱、不可替代的服务器,把备份放在同一个卷上的 RAID 0,“临时”关掉的防火墙,为一个页面服务的 Kubernetes 集群,监控自己的监控系统——这些我在生产环境里每一样都见过。其中一些就是今年见到的。有一两样,在我早年的日子里,是我亲手搭的。
真正的效率是什么样子?很无聊,正因为如此它在当下输掉了争论,却在十年的跨度里赢了:一个您从来不用去想的 PUE,因为别人已经把它工程化好了。按工作负载而不是按主人的自我形象来选型的机器。在爆炸之前就考虑好的波及范围。通过定期恢复来测试的备份,有日历提醒,没有任何逞英雄的成分。乏味的冗余——两台便宜货每次都胜过一台宏伟的机器,在我所有被叫起来处理的故障里,每一次都是如此。
而您能运营的最高效的数据中心,是那台您根本不去运营的。VPS 把电力、制冷、冗余和凌晨三点的硬件故障交给了那些大规模、乏味地处理这些事情的人,这是基础设施能获得的最高赞誉——它还给您留下了真正有趣的部分,也就是在它之上运行您自己的各种服务,跑在一台您丢得起的机器上,而这种机器才是您唯一应该拿来做实验的那种。
FAQ
这些事情我到底该不该做?
不该。本指南的每一节都是有据可查的反模式,代价是一个又一个赔进去的周末。如果您现在的架构和其中超过两节相符,请直接跳到本 FAQ 的最后一个问题——并按给出的顺序处理,因为这个顺序就是分诊顺序。
到底多少的 PUE 才算好?
超大规模数据中心的 PUE 大约为 1.1,运营良好的企业机房能做到 1.4 到 1.6,而一个没有制冷、还上演着电暖器较劲大戏的壁橱,PUE 真的可能超过 3。您在家里根本没法和 1.1 有意义地竞争,这正是向能做到这一点的人租用算力的那个悄无声息的经济学论据。
用服务器给建筑供暖是真事吗?
是真的——前提是做得得当。有好几个国家的区域供热项目通过热交换器回收数据中心的废热,并按设计、带着工程和合同,把它输送到住户家里。上面讽刺的并不是服务器的热量能温暖房间;而是偶然地这么做,还把这个偶然叫作策略。
我的服务器已经长这样了。我该先做什么?
今晚就做备份,备到不是这台服务器的某个地方,然后做一次恢复测试——一个没测试过的备份只是一个传闻。第二,打补丁,以及您一直在回避的那次重启,选在一个有计划的时间窗口里做,这样您能在盯着的时候知道哪里会出问题。第三,拆掉单点故障:把 DNS 和监控从这台机器上挪走。其他一切都可以等一个更从容的星期;这三件不能等。