开发应用,云端,运维
简介
一个软件从零开始到最终交付,会经历以下几个阶段:规划、编码、构建、测试、发布、部署、维护。其中规划、编码、构建属于软件开发工程师的工作;测试属于软件测试工程师的工作;发布、部署、维护属于软件运维工程师的工作,这三部分可以笼统地称为开发、测试与部署。
NoOps即No Operations无运维,是一种理念,也是一种新兴的IT趋势,正在推动一些组织超越DevOps提供的自动化,进入无需运维的基础架构环境。
软件行业研发模式的历史变革
回顾软件行业的研发模式,可以发现大致有三个阶段:**瀑布式开发、敏捷开发、DevOps**。
瀑布式开发
早期的瀑布式开发,即等一个阶段所有工作完成之后,再进入下一个阶段。这种模式比较适合理想化的项目(用户需求非常明确、开发时间非常充足),但是项目是不可能单向运作的,用户会有需求,产品也会有问题,需要反复迭代 。瀑布式式开发模式对于这种情况而言,太过笨重,因此软件开发团队引入了一个新概念——敏捷开发(Agile Development)。
敏捷开发
敏捷开发是一种**能应对快速变化需求**的软件开发能力,简单来说,就是把大项目变成小项目,把大时间点变成小时间点。
敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。而且,DevOps小步快跑的形式带来的版本变化是比较小的,风险会更小(如下图所示)。即使出现问题,修复起来也会相对容易一些。
敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是**它的效果仅限于开发环节**。研发们发现,运维那边,依旧是铁板一块,成为了新的瓶颈。运维工程师,和开发工程师有着完全不同的思维逻辑。运维团队的座右铭,是**“稳定压倒一切”**。运维非常排斥改变,而开发又必须要改变,导致矛盾的爆发。此时,DevOps概念出现了。
DevOps
DevOps,即Development和Operations两个词的组合。他在维基百科中是这么被定义的:一组过程、方法与系统的统称,用于促进**开发**、**技术运营**和**质量保障(QA)**部门之间的沟通、协作与整合。从目标来看,DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。
在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。
DevOps贯穿了软件全生命周期,而不仅限于开发阶段。
NoOps
随着云技术采用率不断上升,应用程序架构的抽象级别也有所提高——从传统的本地服务器迁移到了容器和无服务器部署。自动化技术也已经发展到了让人工流程不再是首选的地步,即使是备份、安全管理和补丁更新等与基础设施相关的活动也更多通过自动化来执行。
NoOps 是最早由 Forrester 创造的一个术语,旨在提高生产力并**比DevOps更快地交付结果**。在理想情况下,开发人员**永远不必与运营团队的成员协作**。相反,他们可以使用一组工具和服务,以安全的方式负责任地部署开发所需的云组件,包括代码和基础设施。
如果说DevOps是研发和运营的融合,从设计到交付,研发和运营工程师们共同协作完成了定义驱动服务生命周期的过程。那么NoOps则意味着无运营。它的理念是**移除平台所有的管理程序以此来减少研发人员与基础设施之间的碰撞和摩擦。**
相比DevOps,NoOps更加智能化。DevOps是自动化脚本运维,绝大多数DevOps工具链的功能都由自动化脚本实现,例如构建一个应用,或将代码部署到服务器上以及通过编程实现的基础设施配置;NoOps则是智能化运维,机器可以对已知的问题作出判断,从而使得人可以节约出时间解决未知的问题。
**与DevOps相比,NoOps更多是由技术支持的(尽管DevOps也是基于配套技术的成熟,但DevOps在运营模式上提出了一些新东西)。**人们对这一术语的看法褒贬不一,有人认为围绕该术语的炒作似乎集中在基础架构配置的自动化程度提高上,这与运营不同;也有人质疑自动化的稳定性,可靠性,弹性以及可实施性。
不论DevOps还是NoOps,最根本的驱动是:**用尽可能少的维护工作,去创建智能的基础设施,并将一切自动化。**
参考文献
DevOps到底是什么意思? - 知乎 (zhihu.com)
NoOps 来了,DevOps 工程师的未来在何方?_自动化 (sohu.com)
【转】DevOps的前世今生_星辰大海,脚踏实地-CSDN博客_devops是谁提出来的
什么是 NoOps?追求完全自动化的 IT 运营 - CIO频道_CIO时代网 - CIO时代—新技术、新商业、新管理 (ciotimes.com)