工程师思维:冗余|冗余越多,容错能力越强
1. 导读
《兵法》云:多算胜,少算不胜,而况于无算乎。构建的冗余越多,容错能力越强,成功概率越高。
2. 心理实验:赶飞机
我们先做一个头脑实验。假设你要赶飞机,从家里到机场是一个小时的车程,机场安检需要半小时,飞机提前半小时关舱门,那你应该什么时候出门?
如果一切顺利的话,预留两小时肯定够了。但路上可能会堵车,我们需要再预留半小时。经验告诉我们,这样还不够,因为存在未知的风险。我曾经坐上出租车很久了,才发现吃饭的家伙忘带了,我的电脑包居然忘家里了。为了对冲这些未知的风险,我们需要再预留半个小时,所以你应该提前3个小时出门。
3. 未知之未知
人类的认知是有边界的,这个边界可以分为三层:
- 已知的已知:我们知道我们知道的。比如我们知道宇宙有黑洞、暗物质;
- 已知的未知:我们知道我们不知道的。比如我们知道我们对黑洞、暗物质的了解很少;
- 未知的未知:我们不知道我们不知道的。比如宇宙中还有哪些不为人知的秘密,我们对此还没有形成概念,更别提从原理上去解释。
对于已知的已知,我们有能力驾驭,对于已知的未知,我们有机会防范,而对于未知的未知,我们连问题本身都不知道,又该如何防御呢?答案是构建冗余。
4. 冗余是生命之本
人体的感官左右对称,运动和骨骼系统也是左右对称,生殖和内分泌系统也是左右对称。人体的代偿能力,则进一步强化了这种设计。身体某些组织或器官持续受损,在没办法恢复原样的情况下,人体会调用没有受损的部分,加快代替、补偿受损的部分完成工作①。例如,一个肾在损伤或被切除后,另一个肾可以承担起全部的工作。心脏或大脑的某条主要血管堵塞后,身体会刺激周边的小血管扩张、增生,形成新的供血网络。
人体通过对称的结构,并配之以代偿能力,通过足够的冗余,提高了在自然环境下的生存能力。冗余带给生命的力量是惊人的。有一种治疗难治性癫痫的手术叫大脑半球切除术,病人在术后经过有计划的康复训练,另一侧的大脑就可以代偿,替代切掉的脑组织完成任务,病人依然可以像正常人一样生活。
5. 冗余是商业之本
在生物制药行业,有一个关于“10,10,10”的统计数据,也就是用十亿美金、花十年时间去研发一款新药,最后成功上市的概率是10%。生物制药企业的前期投入很大,建厂、盖实验室、招募科学家,都需要钱。实验室里成功拿出候选分子后,临床研究才是真正的吞金兽。所以,任何一家生物制药企业都必须解决“高投入、高风险、长周期”的问题,而解决之道就在于冗余:
- 多条产品线,例如肿瘤、眼科、代谢、自我免疫。这些产品线中如果有一条产品线出了大药,其收益就可以覆盖其他产品线的投入;
- 多个候选分子。每条产品线同时推进多个候选分子,且不同的候选分子处在不同的阶段(研发、一期临床、二期临床、三期临床),提升整体成功率;
- 临床数据有冗余。候选分子进入临床后,通常后期的数据相比前期会有打折,但如果前期的数据扎实且优秀,后期数据即便有打折,也会同样优秀,成药的概率也很大。
通过三层冗余,生物制药公司构建起稳健的管线(Pipeline),再加上快速试错机制,实现风险的有效控制。
如果你觉得这个例子离你太远,我们可以做个类比。假设每个孩子成才的概率彼此独立且都是50%,而一个孩子成才了父母就算成功,那么,如果你有一个孩子,你成功的概率是50%,有两个孩子,成功的概率升至75%,有10个孩子则升至99.9%。
6. 冗余是立国之本
6.1. 明朝九边镇守体系
古代中原王朝立国,会依据山脉、水文构建多道防御体系,包括:
- 依托黄河、长江天险修建工事,例如秦汉的函谷关、隋唐的潼关,南京的石头城;
- 在崇山峻岭间修筑长城,例如我们现在看到的明长城;
- 依托山脉修建关隘,例如秦岭山脉的剑门关、恒山山脉的雁门关、燕山山脉的居庸关。
中原王朝深知北方骑兵快马弯刀、来去如风,一条防线不足以完全抵挡骑兵的进攻,所以在构建国防线时,通常会部署多道防线,避免一条防线被击溃或者绕过之后,骑兵直接进入华北平原。明朝的“九边镇守体系”就是在这个背景下产生,是中国历史上规模最大、组织最严密的边防战略工程。
“九边镇守体系”沿长城一线设置了九个军事重镇②。由于自大同南下是蒙古骑兵进入北京最快的路径,明朝构筑了两道防线:宣府镇、大同镇负责外长城防线,山西镇负责内长城防线,后者作为前者被突破后的第二道防线,共同拱卫京师。“九边镇守体系”确保了北京的政治稳定性,这套系统在明朝立国近200年后才真正被挑战。
即使游牧骑兵成功突破长城防线,兵临京师城下,京师高大宽厚的城墙也是难以攻克的。京师的城墙有三道,起到层层防御的作用,为边将勤王提供缓冲时间:
- 外城:最外层,直接暴露在敌军面前,最先受冲击;
- 皇城:中间层,京师第二道防线;
- 宫城(紫禁城,现在的故宫):最内层,城中城,最后受冲击。
总之,国防、城防都需要一定的冗余。
6.2. 北宋立国之艰难
明朝的“九边镇守体系”有个前置依赖:燕云十六州必须在中原王朝手里。燕云十六州即今天的北京、天津、河北北部及山西北部,横跨燕山山脉与太行山脉,山势险要,仅有少数关隘可以通行。把住这些关隘,就能阻挡北方骑兵南下。十六州往南是一平如砥的华北平原,那里一马平川、无险可守。
自后晋皇帝石敬瑭将燕云十六州割让给契丹之后,长达400年的时间里一直在胡人政权手里,中原王朝失去了燕山山脉(河北)和太行山脉(山西)的天然屏障,华北平原直接暴露在北方骑兵的铁蹄之下。北宋立国之艰难可想而知,“大河北岸的敌骑,长驱南下,更没有天然的屏障,三四天即到黄河边,而开封则是豁露在黄河南岸的一个平坦而低洼的所在。所以一到真宗时,边事偶一紧张,便发生根本动摇。”③
北宋唯一的天险就是黄河,国都汴京(河南开封)距离黄河只有50公里,北方骑兵一旦过河,一日可抵汴京城下,后世因此感慨北宋“有国无防”。至于靖康之难,北宋亡国,部分原因可以归结为冗余缺失。
7. 冗余足够才能稳:双十一技术实战
我参加了阿里巴巴2012~2020年的九届双十一大促活动。双十一技术挑战最大的是11.11零点的3分钟,这3分钟的瞬间流量是双十一当天流量的3倍,是平时流量的30倍,能否抗住这3分钟,极其关键。为此技术上做了多层冗余设计,提供多层次的容灾、容错能力,共同保障系统稳定性。
电商的后端服务器一般都采用如下的结构:手机App&浏览器 --> 接入层网关 --> 应用服务器。
接入层网关首先有同城互备能力,也就是在一个城市有两个数据中心,如果其中一个数据中心不可用,可由同城的另一个数据中心接管流量。接入层网关还同时在多个城市部署,任一城市的节点不可用之后,其他城市的节点可以按比例分担前者的流量。
接入层网关根据下游应用服务器的能力,对用户流量做限流,设计容量之外的用户请求会被网关直接拒绝。业务服务器也会检测自身的流量,如果发现超出设计容量,也会拒绝服务。
最后,所有的服务器都会对物理网卡、CPU、内存做实时检测,如果发现服务器的带宽、CPU、内存超过阈值,则在更底层拒绝服务。
8. 没有冗余很难赢:阿里履带战略的挑战
阿里的履带战略由马云提出,其核心逻辑是:通过不同业务板块的“轮流领跑”,确保企业整体始终处于上升趋势。为此马云将阿里的业务划分为不同梯队:
- 第一梯队(成熟期):淘宝、天猫。它们是公司的“现金奶牛”,负责产生利润来养活后面的业务;
- 第二梯队(接棒期):蚂蚁金服。当电商增长趋稳时,支付与金融业务开始接棒成为新的增长引擎;
- 第三梯队(孵化期):阿里云、菜鸟网络、达摩院。这些业务在初期不追求利润,甚至需要长期亏损(烧钱),但它们决定了10年后的竞争力。
这个战略如果顺利推进,阿里的前途将一片光明,市值突破万亿美金指日可待,但这个战略是有前置依赖的:
- 第一梯队在第二梯队接棒之前,地位必须稳固,否则会出现青黄不接的情况;
- 第二梯队在第一梯队不再增长之后,必须及时接棒,否则第三梯队就要承压,甚至要替第二梯队补位;
- 第三梯队在10年后必须像10年前的第一梯队、今天的第二梯队一样,占据着经济发展和科技发展的C位。如果出现偏差,则后继无人。
所以这套战略要求业务板块之间做到严丝合缝,履带才能正常运转,但现实却非常的严峻:
- 阿里的电商业务被拼(多多)抖(音)快(手)蚕食,市场份额迅速下降;
- 蚂蚁金服上市受阻,直接打乱了既定节奏,第三梯队从孵化期提前进入接棒期;
- 第三梯队的重点是阿里云,阿里云被字节跳动的火山引擎正面挑战。
从2020年开始,阿里经历了艰难的调整,市值也在剧烈波动,好在阿里家底雄厚、现金充足,未来依然可期。
9. 结语
如巴菲特所言,我们不知道我们不知道什么,所以我们不仅要看到已知的风险,还要看到未知的风险,而冗余就是对抗未知风险最好的办法。
最后,给大家讲个小故事,2011年京东电商强势崛起,阿里巴巴在这个背景下成立了一淘,专门负责站外搜索,与此同时阿里也加强了淘宝的站内搜索,这里的站内是指阿里体系之内,站外是指阿里体系之外。这个布局很有意思:如果淘宝胜出了,意味着流量都在站内,不需要一淘;如果一淘胜出了,意味着流量都在站外,那淘宝就彻底败了。马云为啥要两头押宝呢?
10. 声明
您看到的文章是我根据20年的工作、生活感悟而创作的,它是一个系列,旨在提供理解历史和当代的思考模型,从而更好解决现实问题。每周都在更新,如果你喜欢,记得多多关注。你的关注,我的动力!
- 工程师思维:反噬|为何成功成了失败之母;
- 工程师思维:杠杆解|如何以小代价拿到大收益
- 工程师思维:冗余|冗余越多,容错能力越强
11. 引用材料
①:薄世宁,《薄世宁医学通识讲义》;
②:图片来源,地图帝的个人主页;
③:钱穆,《国史大纲》;
