DevOps正在成为软件交付的最佳模式

2018-06-12 11:31 6465 7
本帖最后由 Floyd-tiger 于 2018-6-12 11:31 编辑

在软件行业蓬勃发展的背景下,软件交付质量正在面临巨大的挑战,越来越多的企业开始向DevOps转型。作为一种新概念,DevOps难以给人一种全面、直观的感受。
考虑到很多服务商都会咨询到DevOps的概念,今天我们就来聊一聊DevOps,希望能加深大家对它的理解,在转型过程中越来越顺利。
一、软件研发趋势
随着软件市场的不断扩大以及客户对软件质量要求越来越高,软件研发正在面临各种各样的挑战。
面对这些挑战软件研发正在不断的发生变化:
1.    软件部署由过去的分散小规模转为集中大规模、客户期望更快更新更好的特性和服务、传统软件服务商向sass服务和云服务转型。
2.    在云计算,大数据等开源项目中,多语言混编成为常态。python、go、Ruby等新型语言已经在开源社区广泛使用。
3.    企业软件交付需要应对市场、协作、开放、与安全多重挑战,来看一下
1>交付频率高、研发周期短
2>市场变化快、产品盈利窗口变窄
3>国际化、跨地域协作多、研发平台复杂
4>平台开放能与其他平台对接或者数据交互,数据在传输和存储上要求安全并且可靠
面对这些挑战,软件需求方和软件提供方需要更好的协作以共同把握软件的需求、进度、质量以及风险。
在这样的背景,下DevOps逐渐成为企业软件交付的重要模式,并被高度关注。
二、DevOps起源
DevOps源于Google、Amazon、Facebook等企业实践。2008年patrickDebois在“Agile 2008 conference”首次提出DevOps术语,由Flick展示的开创性的“一天10次部署”、基础设施即代码、敏捷基础设施、敏捷系统管理、亚马逊的平台即服务等理念相辅相成,让DevOps成为IT业界潮流。
DevOps是为了解决什么问题?
Dev(开发)和Ops(运维)之间存在很多问题,如果你在做开发或者运维这些问题或多或少都会遇到,我们一起来看一下:
1.    Dev和Ops具有不同世界观:运维人员要求稳定可靠,认为变更充满风险,开发人员则被鼓励频繁发布新代码,认为运维部门对流程的坚持,阻碍了开发的速度。
2.    开发和运维之间的脚本、配置、过程和环境存在差别:它在我的机器上没有问题!常常听开发人员这样说。其实运维团队确实遇到了麻烦。
3.    沟通壁垒:开发和运维团队通常处于公司组织的不同部门,通常有不同的管理者,通常是不信任的关系,并且通常工作在不同的地点。
DevOps在很大程度上能够用解决上述问题,那么DevOps具体是什么?我们一起来看一下DevOps定义。
三、定义DevOps
我们从多个方面来分析一下DevOps具体定义
1、DevOps具体是什么?不同岗位的人看来是不一样的
研发工程师:DevOps是一组技术和工具
咨询师:DevOps是一种新的软件开发模式
HR:DevOps是一个组织和职位
大师:DevOps是一种文化和理念
企业高管:DevOps是一种全新的商业模式和管理体系

DevOps本质是一种理念
DevOps是软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集
合,它是人们为了及时生产软件产品或服务,以满足某个业务目标,对开发与运维之间相互依存关系的一种新的理解

2、这部分就是对DevOps的具体定义
DevOps是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间
·       部署对系统的变更时,质量很重要:保证方法上有生产环境前跑通自动化测试用例,先让一小部分用户对生产环境的变更进行测试,对新部署的代码密切监控
·       交付机制是高质量的:交付机制应具备高度的可靠性和可重复性
·       两个时间很重要:一是开发人员提交新开发代码的时间,二是代码部署到生产环境的时间;
·       目标导向:不拘泥于实践的形式或者是否使用工具,目标是减少从提交代码到部署到生产环境之间的时间;
·       不局限于用户测试和部署实践:在需求阶段就包含运维人员的视角是非常重要的。
3、DevOps还有一些要素,这些要素在支撑着DevOps
·       文化:建立一体化的全功能团队,打破开发与技术运营隔阂;
·       自动化:自动化一切可以自动化的;
·       精益:以精益的方式小步快跑,持续改善;
·       度量:建立有效的监控与度量手段快速获得反馈,推动产品和团队的持续改进;
·       分享:不同职能、不同产品之间分享经验。
4、DevOps是敏捷理念从开发领域向运维领域的延伸
在DevOps方法论指导下,运维人员和开发人员是你中有我,我中有你的,所有运维人员不仅要参与到软件开发的整个流程,还需要具有一定的敏捷理念。
·       计划阶段:运维人员为开发人员提供需求,并制定发布计划;
·       编码/构建/验证阶段:Scrum、极限编程和精益生产、持续集成、自动化测试等;
·       部署阶段: 开发团队负责部署、监控部署过程、以及部署后的运行。

以上所述就是我对DevOps的基本理解,大家有什么看法可以一起交流。个人认为学习新技术最好的方法就是分享和交流。

您需要登录后才可以回帖 登录 | 立即注册