知识卡片
雪花服务器反模式,及谷歌用回滚而非禁止变更
内容
软件定义的基础设施要避开”雪花”或”宠物”服务器——那种运行很久、没重装过、有独特配置、必须小心手动维护的服务器,”这个服务器已经运行两年了”这句话背后藏着风险:真宕机了谁能重建它?在软件定义世界,服务器或网络组件能像重新构建一个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)
- 结论依据:原文说明"软件定义的基础设施避开了'雪花'或'宠物'服务器的概念……谷歌的解决办法不是一劳永逸地拒绝对这个配置文件的任何修改,因为这样会减慢速度。相反,问题很快通过回滚得到了解决……谷歌在代码提交管道里实现了额外的自动化检查",直接支撑本卡结构图。
- 原始内容:这个路由是通过一个包含数百个正则表达式的文件进行配置的。当然,这个文件处于版本控制之下,它也应该是这样的。