4.4 使用可替换资源
组织在硬件上投入了大量的资金,并且开发了相应的实践来升级新版本的应用程序和配置。随着时间的流逝,最后导致不同的服务器以不同的配置运行。在这种情况下进行故障排查是一项非常烦琐的任务。有时,你不得不继续维护一些不再需要的资源,因为你不能确定应该关闭哪台服务器。
由于无法替换服务器,因此很难在服务器机群中部署和测试任何更新。将服务器视为可替换资源可以解决这些问题,这样可以更快地适应变化(例如升级应用程序和底层软件)。
这就是设计应用程序时应该始终考虑不可变基础设施的原因。
创建不可变的基础设施
“不可变”意味着在应用程序升级期间,不仅需要替换软件,还需要替换硬件。组织在硬件上投入了大量的资金,并且开发了相应的实践来升级新版本的应用程序和配置。
要创建可替换的服务器,需要确保应用程序是无状态的,并避免对任何服务器的IP或数据库的DNS名称进行硬编码。从本质上来说,就是要将基础设施视为软件而非硬件,并且不要对运行中的系统进行更新。你应该始终从黄金镜像启动新的服务器实例,在该镜像中,所有必要的安全性配置和软件都已经就绪。
在虚拟机的帮助下,不可变基础设施的创建变得尤为轻松。你可以创建虚拟机的黄金镜像,并使用它来部署新版本,而不必尝试更新现有版本。这种部署策略也便于故障排查,你可以关闭有问题的服务器并从黄金镜像启动新的服务器。在关闭有问题的服务器之前,应该对日志进行备份以便进行根因分析。如果所有的环境都是通过相同的基准镜像创建的,那么就可以确保整个环境的一致性。
金丝雀测试
在使用不可变基础设施进行滚动部署时,金丝雀测试是一种非常流行的测试方法,它可以帮助你确保旧版的生产服务器被安全地替换为新版服务器,而不影响终端用户。在金丝雀测试中,你需要将软件更新部署在新服务器上,并将少量流量路由到新服务器。
如果一切顺利,可以添加更多新服务器并将更多的流量路由过来,同时关闭旧服务器。金丝雀部署为生产环境的实时部署更新提供了一种安全的方式。即便出现问题,也只会影响少量用户,并且可以通过将流量路由回旧的服务器进行即时恢复。
在使用可替换资源进行部署前,解决方案架构师需要提前考虑如何设计。他们需要提前规划好会话管理,并避免服务器依赖于硬编码的资源。你应该始终将资源视为可替换的,并设计应用程序使其支持硬件的变更。
解决方案架构师需要对各种滚动部署策略的使用设置一个标准,例如A/B测试或蓝绿部署。应将服务器视作牛马,而不是宠物。基于这项原则,对出现问题的IT资源进行替换时可以确保你能够快速恢复故障,并减少故障排查时间。