晚上六点四十,你站在龙餐馆门口。
这是我们的店,开在街角,一层大堂十四张桌子,楼上还有两个包间。此刻它正处在一天里最要命的时刻:门口排着七拨人,手里攥着叫号的小票;大堂里几乎坐满,服务员端着托盘在桌与桌之间穿行,像在走一条只有他们看得见的路;后厨那扇总是半开的门里,炒锅"哗"地一声腾起火,油烟被抽走,一盘鱼香肉丝在三十秒后被推到出菜口。整个空间嘈杂、滚烫、忙乱,但它没有崩。
你在这一行干了很多年。你写过订单系统、调度器、消息队列,凌晨被报警短信叫醒过,盯着监控大盘看请求一点点堆积然后雪崩。你太熟悉一个系统在高负载下会怎么死。可你大概从没意识到:眼前这家你天天路过、进去吃碗面就走的店,就是一个活着的、跑了三十年、几乎从不"宕机重启"的分布式系统——而且它比你线上那套服务古老得多、皮实得多。
把餐馆当成一个系统来看
我们先换一副眼睛。别把它看成"一个吃饭的地方",把它看成一台正在运转的机器,看它内部有什么在流动。
门口那七拨客人,是一条队列——排着队等着被处理的一串请求。你点的菜,是一份订单,它会被拆成一道道任务派到后厨。传菜员端着托盘走的那条路,是数据从后端流回前端的链路。后厨的火、砧板、洗碗池,是几台并行工作的处理单元——各自能干的活不一样,快慢也不一样。
你看,一旦这么看,熟悉的东西全冒出来了:有请求进来,有队列在排,有资源在被抢占,有任务在流水线上一站站往前走,最后有结果被交付出去。一家餐馆,本质上就是一个把"原料+人+时间"实时转换成"一桌满意的饭"的处理系统。
说人话:这本书不是教你开餐馆。是说——你脑子里那些关于系统怎么转、怎么堵、怎么崩的知识,原封不动就能用在一家餐馆上。反过来,餐馆里那些看得见摸得着的现象,又能帮你把抽象的系统概念想明白。餐馆和你写的服务,是同一件事的两个样子。
为什么餐馆是最好的那个"系统标本"
能被叫作系统的东西满世界都是:一座城市的交通、一条工厂流水线、你身体里的血液循环。可它们要么太大你走不进去,要么藏在皮肤底下你看不见。餐馆特殊在哪?
- 它完整。从原料进门,到一盘菜端上桌,到脏盘子被洗干净归位,一个完整的生产循环就在这一个屋子里发生,没有哪一段被藏起来。
- 它可见。队排在哪、菜卡在哪、哪个环节的人在冒汗,你站着看半小时就全懂了。你线上那套服务的"内部状态",得靠一堆监控仪表盘去猜;餐馆的状态,肉眼直接可读。
- 它是实时的。一份订单晚十分钟,客人会当场翻脸;一台炒锅坏了,后果立刻在门口的队列上体现出来。没有"离线批处理"可以慢慢补,反馈快得残酷。
正因为完整、可见、又实时,餐馆是普通人唯一能整个走进去、用眼睛从头看到尾的复杂系统。它是一个摆在你面前的标本——只不过这个标本是活的。
三个贯穿全书的问题
接下来一整本书,我们就守着"经营龙餐馆"这一件具体的事,反复追问三个问题。它们朴素得像废话,但一家店的生死全在这三句上:
- 它为什么能转起来?七拨人排队、十四桌同时催菜、后厨就那么几口锅,这么大的乱局,凭什么最后每桌都能吃上饭、店还能赚钱?中间一定有某种秩序在托着它。
- 它为什么会崩?平时好好的,一到周五晚上就出菜奇慢、客人骂街、服务员崩溃。崩不是随机的,它有固定的引爆点和固定的引爆方式——找到它,才谈得上防它。
- 怎么让它更好?同样的桌子、同样的厨师,凭什么隔壁那家一晚能多做一倍的客人还不出错?好不是靠更拼命,是靠改对了地方。
这三个问题,你在做系统时天天在问:为什么这套架构撑得住、它会在哪一步先垮、加机器还是改代码才真正有用。只是这一次,答案会以"一盘菜多久上桌"的形式,活生生摆在你眼前。
我们打算怎么一层层拆开它
拆一个系统,得有顺手的工具。好在你早就有了——你脑子里那套概念,拿来对着餐馆用,严丝合缝:
- 菜单不是一张清单,是这家店对外暴露的接口——你只能点上面有的东西,就像你只能调它开放的那几个功能。
- 后厨是一条装配线——备料、烹饪、装盘,一份订单在上面一站站流过。
- 每张桌子是一个不断产生新请求的队列,谁先做、谁后做,是一道调度题。
- 整家店的产能,往往被某一个环节死死卡住——那口炒锅就是这个系统的瓶颈,是所有能力的真正上限。
- 高峰期,就是这个系统在过载——请求进来的速度超过了它处理的速度,延迟开始滚雪球。
- 提前切好的配菜、熬好的高汤,是一种缓存——用事先备好的东西,换掉临场要花的时间。
这些词你都认识。但把它们一个个安到龙餐馆身上、看它们如何互相咬合、如何决定这家店今晚是赚是赔——那才是这本书要干的事。我们会一章拆一层,越拆越深,最后你会发现:让一家餐馆转起来的道理,和让一套系统跑起来的道理,是同一个道理。
那么,第一步呢?
此刻它已经在你面前哗哗地转了。可任何一个能转起来的系统,都有它被搭起来的第一块地基——那块地基决定了它日后能长多大、能扛多重、会在哪里先裂。
对一家餐馆来说,这块地基不是那口炒锅,也不是门口的队。是那张纸——菜单。它看着只是一张写着菜名和价格的清单,可它其实一次性锁死了后厨要备什么料、要几口锅、忙起来会先堵在哪。它是整个系统对外的第一份契约。
所以我们从它开始。下一章,我们把这张纸翻过来,看看它背面到底写着什么。