DevOps最佳实践(开篇)

十年工作以来,我一直工作在IT工作领域,从事的工作包括工程师,高级工程师,技术总监,产品总监,也包括有事业部总经理,集团副总裁等管理职能。每次职能提升,我更多的看到是跨部门协作和沟通的重要性和难度。如何处理部门间的工作分配、协同、甚至是整合,成了我日常工作的重要内容。

开发部的利益诉求,是保障产品功能得以快速上线,功能正常运行;运维团队的利益诉求是系统安全、功能稳定,系统高效。在运维的最佳实践中,大都会指明:『为了更好的保证数据安全和运维稳定,应该禁止开发人员直接访问和修改生产环境』。该实践说明运维原则的Why和What,但少有公司能解决How。在缺乏工具的时代,常常是开发人员完成工作后,将开发结果交给运维人员,运维人员再通过FTP等工具上传至生产服务器,完成部署和重启工作。而这个过程中,运维人员对上线的的服务不了解,承担不了上线过程的审核工作,只是机械的重复的完成了FTP、代码搬运、服务重启的执行工作。而开发人员也在惆怅说没有生产环境权限,对于部署中或部署后的日志访问权限受限,降低了服务故障的识别效率。

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。借助这一理论框架,可对公司的开发和运维方式建立一套解决方案。

我最早接触DevOps概念是2007年在『满星』任职时期。当时还不叫DevOps的概念,但开发、测试、运维的实际工作与DevOps的组织结构很相似。开发人员使用PHP进行开发,CVS用于代码管理,运维提供称之为『Code Ballinrobe Launcher』的WEB工具。 cheap NBA jerseys 在每次上线时,开发人员先声明需要增量发布的标记Tag,使用这个Tag对需要增量更新的代码进行标记;而后交付给开发团队进行代码走查,测试人员使用『Code cheap jerseys Lancher』将Tag文件签出,上线到测试环境进行回归测试。测试通过后,再将测试环境的代码rsync到生产环境完成整个上线过程。这套工具很好的释放了运维工程师,将上线工作交给了测试人员,因为测试人员有审核代码是否达到上线标准的权利。 wholesale NBA jerseys 2010年进入腾讯,广告平台部。我继承了满星的思路,使用Python开发了一个全新的发布系统,称之为『Code wholesale NBA jerseys Builder』,用来承载广告平台部门及其外包部门的代码管理和发布工作。然后DevOps的概念开始蔓延,capistrano、 Tasar?m Jenkins等各种辅助工具出现,并相互渗透整合,形成了DevOps的生态链。至此我也放弃了对CodeBuilder的继续维护,并切换到开源微服务阵营。

DevOps的技术理论和工具的不断完善,给自动化运维带来了福音。他不是一个新的产品活工具,而是提供了一个跨部门的管理框架。

之所以开篇写此系列,是希望能将我爬过山,填过的坑做一个整理,将过往的经验进行一次整理,形成一个DevOps的最佳实践。我尽量将『最佳实践』进行了抽象和整理,尽可能少的涉及到业务细节和开发语言细节,使其具有一定的适应性和简便性,但每一次实践都取决于特定时期和特定环境,实践是否能在读者的工作环境快速推进,需要读者根据当前的环境认真分析和决策。