云原生代表技术(1)- 不可变基础设施
云原生不可变基础设施
我本地跑的好好的,为什么到你这里不行了?
测试环境是对的啊,生产环境怎么不行了?
前几天还可以,怎么今天不行了-系统打补丁了?
可变基础设施
从基础设施的角度来看,“不可变”更倾向于传统的运维视角。例如,主机部署的是 Apache,现在想换成 Nginx,则需要先卸载掉 Apache,然后再重新安装一个 Nginx,然后重启让系统对这次变更生效。在这个过程中,基础设施为了满足业务需求,进行了一次或多次变更,装有 Apache 的 Linux 系统这就是一个可变的基础设施。
可变的基础设施通常会导致以下问题:
重大故障时,难以快速重新构建服务:持续过多的手动操作,并且缺乏记录,会导致很难由标准初始化的服务器来重新构建起等效的服务。
不一致风险:在服务运行过程中,持续地修改基础设施配置,会像程序变量因并发修改引起的状态不一致风险。这对服务器修改而言,同样会引入中间状态,导致出现不可预知的问题。
Chad Fowler :要把一个不知道打过多少个升级补丁,不知道经历了多少任管理员的系统迁移到其他机器上,毫无疑问会是一场灾难。
不可变基础设施
不可变基础设施的核心思想是任何基础设施的实例一旦创建之后就变成只读状态。类似 Java 中 Final 变量,赋值后不可变。
如需修改或升级,应该先修改基础设施的配置模版(例如 yaml 配置),修改配置模版之后使用新的实例进行替换。
“容器如果出现问题,我们不会在容器内修改解决,而是在容器构建阶段去解决”。
从容器的角度看,镜像就是一个不可变基础设施,正是容器技术的出现使不同环境的标准化配置成为可能,我们可以快速拉起成千上万一模一样的服务,服务的版本升级、回滚也成为常态,进而不可变基础设施也逐步变成可能。
评论