将应用程序迁移至云端在不知不觉中已经走向普及化、商品化,不仅仅是大企业可以实现,对于注重应用程序灵活性和资源应用的小企业,这也是一项很好的选择。在 QCon New York 2016大会 上,ThoughWorks公司云实践领导人Kief Morris给出了题为 “实现基础设施即代码” 的演说,他分享了如何充分利用基于云端的基础设施的一些关键原则和建议。
为了引出后面的讨论,Morris首先阐述了使用云基础设施的动机和挑战。通常情况下,公司会着重于速度——用最快速度获得一个最小化可行的产品投放于市场,之后再慢慢改进它。云技术为这种做法扫除了很多障碍,但与此同时仍然存在一些风险,比如在安全性、性能或是稳定性方面的风险值得大家注意。
总体目标必须在提高速度的同时,仍有所保留。需要快速修复一切会影响产品质量的东西,而不是在故障发生之后再进行修复,并且在最后拿出的是总体质量很高的产品。
Morris接着提出了,仅仅用鼠标点击搭建服务器还是远远不够的。这往往会导致产生大量服务器,并造成配置漂移。由于不一致的服务器很难自动化维护,要维护这些服务器需要手动完成,这就会造成更多的不一致。
基础设施即代码就是在这种环境下引入的,它可以解决这些问题,并搭建严格定义的服务器:使用类似Puppet或者Chef工具的“无人自动化”模式。这些工具可以按进度自己运行,而不需要人工介入做出修改。在底层模板和配置,即使是很小的问题也需要得到妥善修复,最后才能产生不变的或是高度集成化的服务器,而不需要手动维护。在不同环境下搭建服务器的时候也必须借鉴这个方法。尽可能多地在不同阶段重复使用模板和配置。
自动化操作节约了大量人力劳动,Morris还提到了使用持续交付对于软件质量保证起到很大的作用。通过自动化交付,引入管道化步骤检验服务器配置的正确性,保证每一个安全要求都得到满足,所以在最终产生产品之前,每一个变化都会在不同阶段进行测试。通过使用自动化手段,可以有效地管理过程。
Morris讲述了更多的优势,但是它还是有一些缺点缺陷的。正如在其他被多个团队开发和维护的系统一样,你必须关注到其中的整合点、瓶颈以及相互之间的依赖。比如说,你需要提供为服务测试实例并利用消费者或是合同来促进测试,这可以确保所有服务按照计划合作工作。如果部分的模板或是配置像共享库一样使用,在交给其他团队之前还需要进行彻底测试。
Morris在最后还是强调了人们从自动化开发系统中可以获得的根本利益:
请注意,很多QCon大会的演说会在会后几周内在InfoQ网站上免费提供。
查看英文原文: Kief Morris: Implementing Infrastructure as Code
感谢张龙对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。