云原生落地:企业级DevOps实践
上QQ阅读APP看书,第一时间看更新

1.8.3 不可变基础设施的优点

在看不可变基础设施的优点前,我们先分析一下可变基础设施有什么问题。

·服务器维护日趋复杂,逐步变为“雪花型”服务器。可变基础设施中的服务器可能会受到配置偏差的影响,在未记录的情况下,即兴更改会导致服务器的配置变得越来越不同,这些不同会像雪花一样越积越多,不同服务间的差异可能越来越大,进而运维也会越来越困难。

·线上问题排查困难。在服务运行过程中,持续地修改服务器会引入中间状态,从而导致不可预知的问题。我之前帮别的团队定位线上问题时发现,堆转文件中提示的报错信息是56行,然而在代码仓库中56行对应的是一个空行,确认了好久才发现,生产上部署的代码是某一次为了修改Bug直接替换的class文件,导致与主干代码不一致。

·容灾后的快速恢复极其困难。老服务一旦发生故障,很难快速重新构建。由于之前持续做过太多的手工操作,而且缺乏记录,这很容易造成生产环境运行的服务与代码仓库中严重不一致,可能使得GitLab中的代码无法直接运行,只能依靠复制生产环境运行的War包来重新拉起。

与上述问题对应的就是不可变基础设施的优点。

·一致性。在不可变基础设施下,所有的配置都通过标准的描述文件(如YAML、Dockerfile)来统一定义,不同的Pod都是按照同样的定义来创建的,可以说是完整复制。不同服务器间配置不一致的情况基本不会出现。

·简单清晰。运维人员不会再去维护冗长繁多的服务器列表,查找对应服务的服务器IP,只需要维护好应用的描述,老服务有异常时直接停掉,快速使用新的服务取代即可。

·自动化快速容灾。当线上服务压力增大或使用率过低时,不可变基础设施可以快速进行弹性扩缩容、升级回滚,应对突发问题也更加快速和自动化,极大地提升了持续部署的效率。