如果你对devops的概念不是很了解的话,没有关系,可以先跳到维基百科阅读一下DevOps条目。有了模模糊糊的概念之后, 我们先抛开所有市面上对于devops的各种夸大和炒作,首先来思考一下为什么近年来会出现这么一个职位。
在软件开发中,一个人可以孤军奋战身兼数职:产品设计,开发,测试,运维等等。无需考虑多人协作带来的沟通成本,很好地控制项目进度。
可惜,这种美好景象仅在小项目或者项目初期会出现,一个优秀的产品往往是由众多子项目组成,是一个庞大的系统工程,需要多人的协作才能使之如期交付。
在一个公司的研发部门中,每一个项目常常会涉及到开发团队,测试团队,运维团队。项目leader在设计好架构和确定技术路线之后,会将开发任务按功能和模块分给开发团队,开发人员完成开发后,交给测试人员进行测试,反复迭代直到通过集成测试完成预期目标,交给运维团队去完成产品的交付或上线。期间会有项目经理持续跟踪进度。是曾相识么,这就是软件公司以及互联网公司中最常见的软件开发的场景了。
这个过程看上去不是挺不错的么,有什么问题?
问题很大,就像是在谈现实和理想。
首先,技术主管给出的架构并不是那么合理,并且也没有做到把业务完全解耦和模块化,在开发过程中,才发现那些看似相互独立的开发工作,还有强依赖关系。
接着,在给出的技术路线中使用了一些很cool的语言,开发框架,设计模式,但是暗中布满了密密麻麻还没跌过的坑,留下了运维隐患。在随后的线上运维中,相关的开发/运维人员发现了一些很诡异的现象却只能抓耳挠腮。
然后,开发人员的水平参差不齐,在随手写出惊为天书的代码的同时,还免费附赠了一堆已知和未知的bug,导致后人在接替工作或维护的时候,几乎看不懂前人留下的神奇符号,然后就是重构,重构,重构。
同时,代码的版本管理毫无章法,最终在部署的时候出现了大量问题。
随后,测试人员拿到刚出炉的代码后直呼开发人员坑爹却没能力挽狂澜擒下所有臭虫,留下了一些未知的bug,这些彩蛋将会伴随着运维人员手机上的午夜凶铃逐一浮现。
终于到了集成的日子,每个小组拿着子系统/模块/组件ABCDE进行整合,跑集成测试的时候发现了各种不可预料的问题,原定本周交付的项目突然变得无法预期。
最后,代码终于到了运维人员的手里,接力棒到了最后一公里,这里将会是最混乱的战场:运维人员参考开发人员给出的部署文档,进行部署,可惜有些开发人员的文档写得很烂,更多的是不写文档,跑过来递给运维人员一支芙蓉王,你只需要执行我精心准备的start.sh就可以运行了。接着,运维人员对软件进行编译,打包,有时被后面虎视眈眈的项目经理逼得丢弃了节操,怎么快捷就怎么来,KPI is more important,直接上源码。在经过几次测试后,胆战心惊地把软件交付给了客户,或是将服务上线。
那么,接力棒传送就此结束了吗? 在随后的日子里,运维人员每晚都会被该死的报警短信吵醒,为了业务赶紧恢复正常,开发人员测试也没写赶紧把bug hotfix了,有的甚至直接在线上环境就进行了修改。
接着大家就睡觉了,一觉起来的时候已经忘记了昨晚发生的一切,直到某日,开发人员把新的升级包部署上去,结果旧bug又复活了,同时新版本又引入了新的bug,服务无法正常启动。运维人员需要进行回滚操作,但是预先就没有考虑回滚策略,只好手动进行回滚操作,却发现数据库表格式居然也变了…
另外一边的世界是客户的浏览器:503 Service UnAvailable。 卧槽,这是什么破网站。
然后Boss在听完业务部经理的汇报后,怒气冲冲地召集了研发部的所有老大们。研发,测试,运维的老大们开始了激烈的相互吐槽...
温馨提示:答案为网友推荐,仅供参考