1. DevOps 的本质
DevOps从本质来讲只是倡导开发运维一体化的理念(MindSet)。这个理念的提出是为了解决很多企业面临的转型挑战,也就是将业务数字化,并且缩短数字化业务上线的周期,快速试错,快速占领市场。
DevOps并没有改变固有的软件生命周期:需求,设计,开发,测试,交付。但伴随着基础设施,软件设计方法等的改变,软件开发的思路,或者方式产生了比较大的变化。
DevOps带来的最大好处是,软件生命周期数据链路的打通
这不仅仅是运维和开发的结合。从顶层视角看,这是业务和生产的紧密结合。以前从业务和开发是脱节的。想要查看需求的实现进度,需要大量的人工汇报,更别提运营了。而现在以一个微服务实现一个特性的粒度来看,可以从需求,开发,测试,部署一直追溯到这个特性运营情况。这也是DevOps成为数字化企业基因的原因,业务和生产实现了完美的结合。
从敏捷实践的角度来讲,你会发现开发组织中参与者好似生物体中的神经元,大家各司其职,自成一体,接受反馈,并向外主动反馈。团队的自组织使得工作更加自然,能产生更大的效能。由以前的项目经理驱动,改为自我驱动的协作方式。每个人都可以给相关的团队以及责任人提需求,大家有机的协调在一起。
这里给大家分享一个改造案例,公司A存在的问题:
改造步骤:
从以上的例子可以看出,一个好工具的运用会对工作产生积极的影响,但是更核心的是人做事思维,以及人与人之间的协作方式才会体现DevOps的好处,我想从这点大家可以看到为什么DevOps是一种Mindset。
微服务只是一种设计思路,或者说他给出了如何用正确的方法来进行SOA的实施。理论上来讲他的确和DevOps没什么关系,但是从如何实践DevOps的角度来讲,微服务是非常有意义的。此外,随着诸如Spring Cloud以及微软Fabric等SDK的完善,微服务开发模式也逐步完善,实现了概念的落地
Docker可谓是一种敏捷化的虚拟化技术(较之虚拟机而言)。其实微软Fabric或者CloudFoundry也都脱离开容器的概念提供了微服务开发的解决方案,所以这两者并不是强绑定的关系。但是容器用不可变配置架构实现了微服务从开发到运维的质量保真度,这恰好解决了粒度小,数量多的微服务所带来的运维难题。再加上K8S,Swarm等容器云的支持,docker容器已经形成了事实上的标准。
如何利用这个强大的运行环境帮助企业敏捷,推进业务数字化,并且加快业务的投产? DevOps为上面所说的开发模式提供了软件生产线。
所以总结的来讲,企业业务敏捷是DevOps发展的直接推动力,容器云,以及微服务为DevOps提供了技术可行性。而敏捷帮助提高DevOps工作效能。
对于团队的拆分,这个问题真的要结合产品规模来看。团队的拆分有很多办法,贝索斯说的two pizza team,是建议一个团队中的人尽可能少,不要超过两个Pizza能吃饱的规模。用敏捷实践来讲,可以分为多个特性团队,以及维护团队,不同的团队各司其职,合理分工。在我以前的实践中,三个人可以做一个Feature,来交付一个月迭代的工作量。
当然将原有的巨石应用分割成更小的微服务是挑战很大的事情。因为理论上的微服务的设计对现有的团队组织结构,以及工程师设计能力都带来了一定的挑战。有些组织按照DDD(领域驱动的设计)的方式去实践微服务,会发现以前一个应用的复杂度变得很高,对项目管理来讲也是一件头疼的事情。现在有个比较新的看法就是,大家宣称做微服务(MicroService)的时候,实际上做的是迷你服务(MiniService)。迷你服务的粒度较之微服务的粒度更粗一些,关注度由一个域Domain,变成了能力。一个迷你服务提供一种能力,这种能力的提供也许是跨越多个域的。
最好的方法是以一个团队能承担的任务划定微服务的界限比较好,这样以来,不论是任务管理,代码构建,产品部署都会比较好做。
更关注服务的能力,这样也会减少因为跨域而带来的复杂事物处理
我认为DevOps概念对市场的教育工作已经完成了,并且它宣传在国内有点泛滥的趋势,甚至一些以前做项目管理工具的厂商也宣传他们在做DevOps。究其原因在于DevOps的概念太大,几乎可以成为软件工程的代名词。
至于落地的痛点,我觉得有以下几个:
开启DevOps工具和文化缺一不可。DevOps的最高目标是让组织内的人都具有相同的工作理念,最终形成一种工作文化。而有些倡导者谈到如何去培养这种文化就显得有点空谈了。我认为在形成DevOps文化的过程中,敏捷实践必不可少。过去的敏捷实践更多的是在开发阶段,而现在DevOps的理念下,其实可以很顺畅的将部署阶段的事情也纳入敏捷实践中。让合适的人去做合适的事。当然团队文化的改变需要一个过程。
我认为以敏捷方法为核心配合以下三个方面来开启DevOps。
其实工具和文化最终的落实还是要靠人的提高,特别是通过上一段举出的例子。
DevOps会重新塑造IT组织的研发系统,从工具到文化,再到方法。因此参与这个生态系统的所有人都应该关注。