最近这一年里, 我谈论了太多devops, 就像几年前我们谈论了太多敏捷
DevOps 这儿… DevOps 那儿… but what is exactly DevOps is …
如果你打开百度, 搜索关键字 DevOps 你会得到
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
但是, 我们真的需要说得这样 概念化么? 它到底是什么, 它又如何在项目中落地, 它的核心思想到底是什么呢, 这几天这个问题一直在困扰我.
早在2010年, 当时我还是一个只有2年半工作经验的Junior developer, 我们有差不多130个人工作在一个网银系统项目中, banking 系统, 信用卡系统, 登录系统, core系统, 基于SOAP的webservice接口系统… 所有这些都必需编译并且集成到一起
那么在那个年代我们是如何把这些都组织在一起的? 我们使用 Hudson, 也就是Jenkins的前身, 每天下午3点之前每个模块的 BA 就会把自己模块对应的changes打上tag, 然后等待编译.
会有一个专门的团队在3点半的时候启动每天的构建工作. 在那个时候还没有DevOps这个词, 也没有什么敏捷的概念, 我们只是这样做了, 因为这个模式确实是行之有效的.
每天3点半都会进行构建、集成, 然后保证第二天每个模块的owner和developer都可以看到自己前一天的工作是否按预期正确运行在了整个系统上.
然后直到 2012年, 我从亚马逊上发现了那本著名的<持续交付>

我意识到 这不正是这几年我们一直在做的事情么?
当然也许DevOps的概念更大一些, 也许DevOps只是现代的版本的持续交付, whatever … 我们确实从这种模式中受益匪浅.
流水线改变世界
1910年,福特汽车在引入流水线生产之后,Model-T 的组装时间缩短了8倍,从12.5小时降到了1.5小时,这就是流水线改变世界的神话,造就了汽车上的国家!
那流水线怎么改变软件交付的世界呢?
马丁福勒大爷在2013年曾经写过这样一篇博客 <DeploymentPipeline>
One of the challenges of an automated build and test environment is you want your build to be fast, so that you can get fast feedback, but comprehensive tests take a long time to run. A deployment pipeline is a way to deal with this by breaking up your build into stages. Each stage provides increasing confidence, usually at the cost of extra time. Early stages can find most problems yielding faster feedback, while later stages provide slower and more through probing. Deployment pipelines are a central part of ContinuousDelivery.
是的, FAST … FAST 是DevOps 的核心价值, 这个世界上没有任何一个系统是没有bug的, 也就是说出错是一种常态, 不过你有能力做的更快, 就能更早发现问题, 就能更早快速做出相应, 就能更快得到Feedback.
所以不论你尝试如何构建你的 DevOps 工作流, FAST 都是你的核心命题.
那么如何才能做到更快呢?
在2012年, 你似乎无法找到一些特别合适的工具, 软件需要一个一个的安装配置, 虚拟机技术也不是特别完善(至少在生产环境还不是特别完善), 系统管理员往往使用Puppet或者Ansible之类的工具才能同时维护多个服务器.
看看现在, 环顾一下四周,你会发现有太多好用的工具可以选择
Jenkins 已经变得比以前更强大了, 你可以使用 Pipeline 来设计创建出更加复杂的构建集成工作流, Dockerhub可以让你方便的管理和维护你的软件发布包, Kubernetes类似的容器编排工具可以维护更加复杂和庞大的集群,基础架构即代码 如 Terraform 让你可以随时重新创建基础架构,例如在灾备环境重新创建生产环境. 那么终于是时候让所有的概念落地了.
可是好像似乎又缺少些什么, 现代版本的DevOps只是更好的 CI/CD 么? 它和敏捷开发又是什么关系呢?

也就是说DevOps实际上是CI/CD的一种延续, 延续到 运维 方面
在DevOps的工具链中, 我们还是用诸如 ELK、Sonar Qube 之类的工具进行一些 日志收集过滤、代码质量管理之类的工作。
总之,现代DevOps已经融合了很多思想和工具,这里我们更进一步的说,现代 DevOps 实际上是 敏捷开发,CI/CD ,编排工具 的混合产物。
我想到这里我已经把要说的都说清楚了,不过仅仅有DevOps并不能让你适应现代软件开发模式。
IaaS 云服务 + 微服务 才是最适合DevOps的软件架构, 云服务 让程序员突然有了爆炸式的能力去操作更多服务器,微服务的拆分模式也使DevOps可以操作的颗粒度进一步变小。
DevOps + IaaS + 微服务 才是未来。
软件正在吃掉这个世界,而容器正在吃掉软件。