专业书籍精读 · System Design Interview 卷二 · 第 5 章

设计监控告警系统

System Design Interview Vol 2 · Ch 5 · Alex Xu & Sahn Lam · 2022

EN →

这一章讲什么?

公司墙上那块大屏,密密麻麻全是曲线:机器烫不烫、下单慢没慢。半夜手机突然响,说某台服务器不行了——这一章讲的就是那些曲线怎么被收集起来,以及半夜决定该不该把你叫醒的那套东西,怎么从头造出来。

先说个怪事

公司的核心存储系统出故障了,你想打开监控看看哪儿出了问题——结果发现监控系统本身也打不开了,因为它的数据正好就存在那套刚挂掉的存储里。

这就是监控系统的第一条铁律:报警器不能接着火房子里的电。它必须比它盯着的一切都更结实、更独立。Google 自家的监控系统为了躲开这个死循环,宁可把数据全放进内存——贵得离谱,但值。

旧世界为什么难

一台机器出问题,你登上去看一眼就知道。一万台呢?而且这些数字一秒不停地往外冒:每台一百个指标、每十秒报一次,加起来每秒一百万个新数字,日夜不休。

更麻烦的是这活儿形状很怪:写进来的量大得吓人、而且雷打不动;看的人却很少——大屏没人盯着的时候它照写。普通数据库按「读写差不多」设计,扔进这种场景会被活活压垮。

它到底怎么做到的

一、怎么收。要么每台机器门口挂块小黑板写上当前的数,巡逻员定点挨家挨户去抄(谁家门没开,顺手就知道这家出事了);要么每台机器自己派个小跟班,主动把纸条送到收发室(躲在防火墙后面的、或活不了几分钟的临时任务,就只能这样)。

二、怎么存。接连报上来的数其实长得特别像:时间一秒一秒匀着走,数值常常一动不动。那就别抄全文,只记「跟上一条差多少」——像记账不写「余额 10032、10032、10033」,只写「不变、不变、加一」。同一份数据能瘦掉十倍不止。

三、老数据怎么办。上周三下午三点零七分的 CPU 到底多少,一年后没人关心。所以近几天留全本,超过一个月的压成每分钟一个摘要,再久的压成每小时一个,像把日记逐渐缩写成年终总结。代价很实在:那个一闪而过的尖峰,被摘要抹平之后就永远找不回来了。

四、什么时候叫醒你。一个机房掉线,一千台机器同时喊「我不行了」。每条都发一次,你的手机会在三十秒里响一千次——然后你把它静音了,下次真出事也听不见。所以叫醒你之前,得先把同一件事的一千声喊叫拢成一条。

该怎么记住它

监控系统不是「一个看图表的网站」,是一条从一百万台设备通到你手机上的流水线:前半截拼的是怎么把海量数字又快又省地咽下去,后半截拼的是怎么在真出事时准确吵醒一个人、又不在没事时烦他。

一句话记住

监控系统是个写得多、读得少的怪系统:靠「只记变化量」把数据压小、靠「老数据缩写成摘要」把成本压住、靠「把一千声重复的喊叫拢成一条」把人保护住。还有一条铁律——它绝不能依赖它自己正在盯着的那套系统。

想进到具体机制、量级和示意图? → 切到精读版