基础设施:从“雪花”到“凤凰”

云服务器将部署运维从购置、安装服务器中解放出来,但繁琐的软件部署仍旧困扰着运维人员,更别提配置漂移等麻烦事了。未来的方向在哪儿呢……

基础设施

可变基础设置

记得儿时回乡下的爷爷奶奶家,需要驱车经过一段长长的石子路,颠的好不痛快!如今却已通上了整齐的水泥路,不由得感叹国家的基础设施建设真是好!……扯远了

基础设施即供水、供电、道路等不实行实际业务,却作为工业化、商业化基石的设施。

在软件开发领域,服务器这一计算资源与网络资源的集合体(指代计算机、网络、操作系统在内的软硬件集合体),无疑承担了基础设施的责任。消费者并不直接消费服务器,而消费其上执行的程序所产生的价值。

当然,如同软件需要不断更新维护一样,服务器本身也需要不断维护。但是,正如道路修修补补,最后不得不拆了重建,服务器在不断运维的过程中,产生的各种临时的配置与更改,使得服务器的维护愈发困难,最终不得不推到重来。

这样在建成后不断更改的基础设置,即可变基础设施。可变基础设置在常年维护下,不断变化,变得独一无二,就像雪花——世上没有两片一样的雪花!作为艺术品,独一无二无疑是非常Cool的,但是,作为需要批量运维的工业品,这可就让人头疼了。

另一种选择

那么,有没有办法阻止服务器的不断演变呢?

显然,一旦服务器损坏,我们可以尝试维护,这样可以以较小的代价解决问题,但长远来看,服务器将逐渐变得个性化,不易维护;我们也可以选择仅保留服务器的蓝图,在损坏时按照蓝图重建,就能够保证服务器始终如一了。但是,重建整个服务器的开销是相当大的。我们需要缩小重建范围。

局部重置

见过修路的朋友可能知道,道路是分层的。对路的翻修,一般也局限于上面的几层,有时,仅仅重修路面即可达到预期效果。

正好,服务器也存在这种层次结构,我们也可以参照这种方法,进行低成本的局部重置。在服务器中,谁是路面,谁又是路基呢?

在传统的服务器中,程序直接运行在操作系统上,能够重置软件所处环境的方案,自然便是重装系统,也就是图中software的部分。

再进一步

但即使省去了硬件的配置,重置服务器仍旧是一件极其重量级的事情,且有时,仅仅想对某些软件进行重置,却不得不将整个系统牵连,未免有些小题大做。幸运的是,虚拟机技术给了我们新的可能。

在Hypervisor等虚拟化技术的加持下,我们得以在一套硬件设施上通过安装多套Guest OS,从而在操作系统层级上隔离不同应用。此时,虽然仍旧需要重置Guest OS,但所需配置的程序已然少了不少,再辅之快照,局部重置已成为可行方案。

新的可能

工业化对效率的追求是永远不会停止的。尽管今天虚拟机技术已然成为大多数公司托管服务器的解决方案,重置虚拟机也仅需要数个小时,但对于瞬息万变的互联网环境,仍旧是不可忍受的。

2013年,Docker开源,容器理念开始普及。

图中背着集装箱的鲸鱼,正是Docker的Logo。其理念正如其所背负的集装箱,即将软件及其运行环境,彻底封装。

什么个意思呢?我们不妨再考虑考虑修路的问题。不论如何缩减重置的范围,修路终究是件耗时耗力的事情——刨去旧的,制作新的,纵有蓝图,也需要适配路基。这是因为我们始终把道路看作艺术品,而非工业品

在工业化的角度看来,我们完全可以把路块看作同质化的零件,而完整的道路,仅仅是零件按照不同蓝图的组合。在某块损坏时,可以直接换上新的,而无需按蓝图整体重置;需要新的道路,仅需考虑如何拼装路块,而无需从零开始。

一旦将这种工业化的思维引入服务器,我们可以将同质化的软件作为零件,而完整的软件服务作为成品。

相对于虚拟机技术的封装Guest OS,容器技术仅封装软件及运行环境,容器能够在数分钟内完成撤除与重置,更为轻量与灵活。

当然,容器仍旧需要运行在一般的服务器上,虚拟机技术仍旧存在其用武之地,事实上,二者结合的很好,共同构成了现代服务器的一般架构。

不可变基础设施

一路走来,我们将需要运维人员不断维护,不断变化的服务器及其上的程序,替换成了一个个标准化的,不变的容器,完成了从个性化到工业化的转换。

前者,称为可变基础设施;而后者,则为不可变基础设施。

可变基础设施在长期使用中,会发生配置漂移等不可避免的熵增问题,也就逐渐成为所谓的雪花服务器;不可变基础设施,不对基础设施的老化采取修复,而是重置,宛若浴火重生的凤凰,即马丁口中的PhoenixServer

总结

不可变基础设施使得软件的维护很大程度上摆脱了人力的限制,为软件的规模的发展清除了瓶颈。

有了这样的工具,海量软件服务的维护成为可能,淘宝、搜索引擎等信息服务也才得以面对近乎无穷的访问与并发。

如果说软件工程对最佳实践的追求,带来软件开发走出刀耕火种的年代;那么,不可变基础设施的理念,无疑是软件工程领域的又一大革命。