知识卡片

雪花服务器反模式,及谷歌用回滚而非禁止变更

结构图卡 · 2199

内容

软件定义的基础设施要避开”雪花”或”宠物”服务器——那种运行很久、没重装过、有独特配置、必须小心手动维护的服务器,”这个服务器已经运行两年了”这句话背后藏着风险:真宕机了谁能重建它?在软件定义世界,服务器或网络组件能像重新构建一个Java程序那样轻松自动重建,不用再害怕把实例搞乱。谷歌的路由配置案例展示了这种思路的实践:路由规则由包含数百个正则表达式的文件配置且处于版本控制下,即便审查也无法完全避免错误配置提交导致大规模服务瘫痪,谷歌的解法不是从此禁止修改这个文件(那样会拖慢速度),而是靠版本控制快速回滚到上一版本,并在代码提交管道里加自动化检查,在部署前就拦截语法错误或非法正则表达式。

结构图:

flowchart TB
  A["雪花服务器:运行久,手动配置,不敢重建"]
  B["软件定义基础设施:自动重建,几分钟完成"]
  A -.对比.- B
  C["错误配置提交"] --> D["谷歌方案:版本控制+快速回滚"]
  C --> E["提交管道自动化检查<br/>(部署前拦截语法/正则错误)"]
  D --> F["不是禁止修改,而是加速纠错"]
  E --> F

参考来源

- 位置:《架构师应该知道的37件事》第2章《架构》之"2.8 如果软件吞没了整个世界,最好使用版本控制"·"2.8.4 使用构建管道"与"2.8.5 质量检验自动化"(源文件:_epub-src/OEBPS/Text/chapter002.html) - 结论依据:原文说明"软件定义的基础设施避开了'雪花'或'宠物'服务器的概念……谷歌的解决办法不是一劳永逸地拒绝对这个配置文件的任何修改,因为这样会减慢速度。相反,问题很快通过回滚得到了解决……谷歌在代码提交管道里实现了额外的自动化检查",直接支撑本卡结构图。 - 原始内容:这个路由是通过一个包含数百个正则表达式的文件进行配置的。当然,这个文件处于版本控制之下,它也应该是这样的。