今天是5月31日。如果把时间倒回167年前的今天——1859年5月31日伦敦泰晤士河畔挤满了仰着脖子的市民。在万众瞩目中威斯敏斯特宫塔楼上的大本钟Big Ben第一次正式敲响。那沉稳、宏大的钟声荡漾在伦敦上空标志着当时大英帝国工业与精密制造的巅峰。然而作为一名整天和底层代码、系统架构打交道的“老码农”每次翻看大本钟的建造史我看到的都不是什么工业奇迹而是一场史诗级的“需求变更”灾难以及一个极其敷衍、却硬生生挺过了100多年的神级临时补丁Hotfix。 甲方提了一个“无法拒绝”的非功能性需求大本钟在立项之初就遭遇了现代软件开发中最惨烈的“外行指导内行”现场。当时的项目负责人、英国皇家天文学家艾里George Airy提出了一个在19世纪中期堪称变态的非功能性需求Non-functional requirement“大本钟的第一次敲击必须精确到秒的五分之一。而且每天必须准时向格林威治天文台同步两次数据。”传统钟表匠们一听都疯了。在那个全靠齿轮和发条带动的机械时代气温变化、风力大小、甚至鸟类落在指针上都会导致误差。这相当于在没有网络和操作系统的硬件上要求实现微秒级的时钟同步。因为这个“变态需求”传统厂商纷纷跑路项目整整瘫痪了7年。直到后来一位名叫贝克特Edmund Beckett的业余钟表天才主业其实是个律师接了盘。他通过重构底层硬件发明了划时代的重力擒纵装置Gravity Escapement才勉强在物理层面上满足了甲方的精度要求。 集成测试系统还没上线核心“裂开了”终于大钟造好了。为了让钟声足够洪亮铸造厂铸造了一口重达16吨的超级大铁钟。然而在上线前的“集成测试”中因为铸造工艺不达标团队用大铁锤进行敲击测试时这口大钟直接裂开了一条大缝彻底报废。没办法团队只能连夜把废料熔了重新铸造了一口13.7吨的“轻量版”大钟这才赶上了1859年5月31日的“产品发布会”。⚡ 刚上线两个月严重的生产事故P0又来了5月31日首响成功后报纸上的赞美之词铺天盖地。但贝克特和维护团队还没高兴几天系统又崩溃了——由于负责敲击钟面的大铁锤重量超标为了让声音更响在连续运行两个月后这口新钟又特么裂开了一条缝大本钟直接罢工。如果这次再拆下来熔掉重铸政府的预算和面子都要彻底挂不起了。在极其绝望的绝境下现场的工程师们展现出了惊人的“地摊文学式 Debug”智慧。他们没有选择去重构整个大钟而是打了一个极其敷衍、甚至有点搞笑的补丁Patch原地旋转1/4圈修改配置他们把大钟原地横向旋转了90度让大铁锤以后只能敲击完好的那一面。物理减重降级运行把那个把钟敲裂的超级重锤换成了一个轻一半的轻量级锤子。切个口子阻断异常传播在那条裂缝的顶端硬生生切了一个小小的V字形缺口防止裂缝在震动中继续蔓延。 完美的Bug当缺陷变成标志性的Feature神奇的事情发生了。这个充满“妥协”和“凑合”的修补方案上线后大本钟重新开始工作。因为钟面带着一条被切开的裂缝在受到轻量级铁锤撞击时它产生了一种独特的、略带沙哑和浑厚的金属回音。这种因为Bug产生的不完美音色竟然意外地极具辨识度最终成为了大本钟最标志性、最受全球喜爱的“声音名片”。直到今天BBC 广播里播放的依然是这个带着裂缝的钟声。 架构思考接纳不完美在我们的开发生涯中每个人都追求过完美的架构高内聚、低耦合、100%的测试覆盖率。但现实往往是无情的。面对催着上线的业务、不断压缩的预算、以及随时随地在发生变化的外部环境很多时候我们不得不像当年修大本钟的工程师一样在系统核心里留下几个“转了90度”的临时补丁带着几条“裂缝”让系统上线跑起来。大本钟的故事告诉我们永远不要害怕系统不够完美。一个高可用性的架构核心不在于它永远不坏而在于在它坏掉裂开的时候你能不能用最快的速度、最小的代价去打个Hotfix让它继续带伤跑下去。有时候那些为了生存而妥协出来的“补丁”跑着跑着反而成了你系统中最稳固、最具有特色的核心Feature。最后聊聊你的项目里有没有像大本钟这样原本是个无奈的Bug最后却因为各种原因变成客户最喜欢的Feature的经历欢迎在评论区留下你的“神级Hotfix”故事
带有“裂缝”的完美系统:从大本钟的开源Hotfix聊聊架构师的生存智慧
今天是5月31日。如果把时间倒回167年前的今天——1859年5月31日伦敦泰晤士河畔挤满了仰着脖子的市民。在万众瞩目中威斯敏斯特宫塔楼上的大本钟Big Ben第一次正式敲响。那沉稳、宏大的钟声荡漾在伦敦上空标志着当时大英帝国工业与精密制造的巅峰。然而作为一名整天和底层代码、系统架构打交道的“老码农”每次翻看大本钟的建造史我看到的都不是什么工业奇迹而是一场史诗级的“需求变更”灾难以及一个极其敷衍、却硬生生挺过了100多年的神级临时补丁Hotfix。 甲方提了一个“无法拒绝”的非功能性需求大本钟在立项之初就遭遇了现代软件开发中最惨烈的“外行指导内行”现场。当时的项目负责人、英国皇家天文学家艾里George Airy提出了一个在19世纪中期堪称变态的非功能性需求Non-functional requirement“大本钟的第一次敲击必须精确到秒的五分之一。而且每天必须准时向格林威治天文台同步两次数据。”传统钟表匠们一听都疯了。在那个全靠齿轮和发条带动的机械时代气温变化、风力大小、甚至鸟类落在指针上都会导致误差。这相当于在没有网络和操作系统的硬件上要求实现微秒级的时钟同步。因为这个“变态需求”传统厂商纷纷跑路项目整整瘫痪了7年。直到后来一位名叫贝克特Edmund Beckett的业余钟表天才主业其实是个律师接了盘。他通过重构底层硬件发明了划时代的重力擒纵装置Gravity Escapement才勉强在物理层面上满足了甲方的精度要求。 集成测试系统还没上线核心“裂开了”终于大钟造好了。为了让钟声足够洪亮铸造厂铸造了一口重达16吨的超级大铁钟。然而在上线前的“集成测试”中因为铸造工艺不达标团队用大铁锤进行敲击测试时这口大钟直接裂开了一条大缝彻底报废。没办法团队只能连夜把废料熔了重新铸造了一口13.7吨的“轻量版”大钟这才赶上了1859年5月31日的“产品发布会”。⚡ 刚上线两个月严重的生产事故P0又来了5月31日首响成功后报纸上的赞美之词铺天盖地。但贝克特和维护团队还没高兴几天系统又崩溃了——由于负责敲击钟面的大铁锤重量超标为了让声音更响在连续运行两个月后这口新钟又特么裂开了一条缝大本钟直接罢工。如果这次再拆下来熔掉重铸政府的预算和面子都要彻底挂不起了。在极其绝望的绝境下现场的工程师们展现出了惊人的“地摊文学式 Debug”智慧。他们没有选择去重构整个大钟而是打了一个极其敷衍、甚至有点搞笑的补丁Patch原地旋转1/4圈修改配置他们把大钟原地横向旋转了90度让大铁锤以后只能敲击完好的那一面。物理减重降级运行把那个把钟敲裂的超级重锤换成了一个轻一半的轻量级锤子。切个口子阻断异常传播在那条裂缝的顶端硬生生切了一个小小的V字形缺口防止裂缝在震动中继续蔓延。 完美的Bug当缺陷变成标志性的Feature神奇的事情发生了。这个充满“妥协”和“凑合”的修补方案上线后大本钟重新开始工作。因为钟面带着一条被切开的裂缝在受到轻量级铁锤撞击时它产生了一种独特的、略带沙哑和浑厚的金属回音。这种因为Bug产生的不完美音色竟然意外地极具辨识度最终成为了大本钟最标志性、最受全球喜爱的“声音名片”。直到今天BBC 广播里播放的依然是这个带着裂缝的钟声。 架构思考接纳不完美在我们的开发生涯中每个人都追求过完美的架构高内聚、低耦合、100%的测试覆盖率。但现实往往是无情的。面对催着上线的业务、不断压缩的预算、以及随时随地在发生变化的外部环境很多时候我们不得不像当年修大本钟的工程师一样在系统核心里留下几个“转了90度”的临时补丁带着几条“裂缝”让系统上线跑起来。大本钟的故事告诉我们永远不要害怕系统不够完美。一个高可用性的架构核心不在于它永远不坏而在于在它坏掉裂开的时候你能不能用最快的速度、最小的代价去打个Hotfix让它继续带伤跑下去。有时候那些为了生存而妥协出来的“补丁”跑着跑着反而成了你系统中最稳固、最具有特色的核心Feature。最后聊聊你的项目里有没有像大本钟这样原本是个无奈的Bug最后却因为各种原因变成客户最喜欢的Feature的经历欢迎在评论区留下你的“神级Hotfix”故事