专业书籍精读 · 持续交付 · 第 13 章

管理组件与依赖

Continuous Delivery · Ch 13 · Jez Humble & David Farley · 2010

EN →

这一章讲什么?

你手机里的 App 差不多每周都能更新一版。可写它的不是一个人,是几十上百号人同时在改同一堆代码。《持续交付》第 13 章问的就是:一群人一直在动手术,怎么让这套东西每天都处在「随时能发出去」的状态?答案有两半——大改造怎么在不停工的前提下做完,以及代码大到一个人构建不动时,怎么切开、切开之后又怎么拼回去。

打个比方

想象你要给一家天天照常营业的餐厅换掉整个后厨。不能在门口贴张「装修中,歇业三个月」——客人早跑光了。这一章讲的就是这两件事:怎么一边营业一边换厨房;以及厨房大到一个班组转不开时,怎么拆成几个独立的小档口,拆完又怎么保证一桌菜还能配齐、还能一起上。

旧世界为什么难

老办法是闭关:拉一支队伍单独去改,改三个月再合回来。听着挺合理,实际是场灾难——这三个月里别人也没闲着,等你回来,两边的改动早就对不上了。光「把两份对不上的东西并回一份」就要熬好几个通宵,而且并完谁也不敢拍胸脯说还能跑。分开得越久,合回去越痛,而且不是多一倍的痛,是好几倍。

第一招:先砌一道传菜窗口

既然「整个拿走再装回来」这么痛,那就别拿走。做法是先在老厨房前面砌一道传菜窗口:前厅从此只对着窗口点菜,不关心窗口后面到底是谁在做菜。窗口砌好之后,你就可以在它后面不慌不忙地搭新厨房——这期间餐厅照常营业,老厨房照常出菜。等新厨房能出全部的菜了,把窗口接过去;跑一阵子确认没问题,再把老厨房拆掉。

妙就妙在:整个过程里,这家店没有哪一天是「装修中」的。每走完一小步,第二天都能照常开门。

第二招:拆档口,和「螺丝对不上」的麻烦

厨房太大转不开时,就拆成几个自负盈亏的小档口,各自备料、各自出餐。好处很实在:改一个档口的菜单,不用惊动全店。

代价是没人管一桌菜配不配得齐了。更麻烦的是「螺丝对不上」:A 档口的菜谱写着要用「张师傅酱料 2.0」,B 档口写着要 1.0,可后厨架子上只能摆一瓶。这就是程序员天天在骂的依赖地狱。这一章给的规矩很朴素:菜谱上必须写死是哪一版酱料,绝不能写「用张师傅家最新的那瓶」——否则今天做得出的菜,明天就莫名其妙做不出来了,而你什么都没改。然后另设一个传菜台,专职核对「这几个档口、这几个版本,凑在一起是不是真能出一桌完整的菜」。

这里有个躲不开的代价

拆成小档口以后,整个后厨忙活的总时间通常是变多、而不是变少的——你换到的只是「改一个档口不用惊动全店」,多出来的那份核对成本总得有人付。所以这一章反复劝:能不拆就先别拆,等真的转不开了再拆。

一句话记住

要让一套天天有人改的软件随时都能发出去:大改造别闭关,先在原地砌一道「传菜窗口」慢慢换;代码大到转不开才拆档口,而且拆完必须写死每个零件的版本,再加一道专门核对「这几版凑一起行不行」的关卡。

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