原文链接: http://martinfowler.com/bliki/SnowflakeServer.html

保持生产环境服务器正常运行可能是一件非常繁琐的事,你必须保证你的操作系统和应用运行的环境被及时的修补以确保是最新版本。被托管的应用需要被经常升级。应用所处的环境也需要实时调整来配合应用有效运行即与其他系统正常通信。这些操作都依赖于命令行,GUI,或者编辑配置文件。

导致的结果就是“雪花服务器” ———— 对数据中心带来不好的影响

雪花服务器的第一个问题就是很难被复制。如果你的服务器硬件有问题,这就意味着你很难启动另一个服务器来提供相同的服务。如果你需要一个集群,你不能保证你启动的所有instance都是同步的。你不能复制一个产品环境来测试。当你的产品环境挂了,你将无法在你的开发测试环境重现这个错误。

给你的雪花服务器创建镜像或许是一个解决方案,但是镜像往往会打包很多你不需要的配置,更别说错误也会被一同打包。

然而,雪花服务器真正的脆弱,是在你需要改变他们的时候。雪花服务器很快就会变得难以理解和难以更改。对服务器的细微更改可能会引起一连串的连锁反应。你不确定配置的那一部分是重要的,哪些是遗留的。它的脆弱导致长时间,压力巨大的调制和debug。你需要手动流程和文档来支持你需要的更改。这也是为什么我们通常会看到很多重要的软件会运行在一个非常老旧的操作系统里。

避免雪花服务的一个好的方式是以某种自动化的方式掌握整个运维过程的配置。Puppet和chef都可以做到这点,你可以用修改配置文件的方式将修改应用到你所有的环境中。

自动化配置管理的的好处不仅是你可以重新build一个新的server,更重要的是你可以很容易知道你对一台服务器进行了什么样的配置,从而可以很容易更改。更长远的看,既然配置文件是文本格式,你可以把它纳入版本管理,就实现了基础设施即代码的好处。

应用部署需要遵循一个简单的准则:完全自动化,所有改变纳入版本管理。
通过避免雪花服务,可以带来的好处是你可以完全复制你的产品环境来进行测试,减少配置误差导致的缺陷。

一个很好地方式确保你不会陷入雪花服务器的困境就是使用凤凰服务。对配置进行版本管理是持续交付的重要部分。