DevOps最早在2009年被人提出,愿景非常美好,但真正实施起来困难重重。
随着近几年微服务、容器等技术的兴起,使得企业对DevOps的需求更加迫切,实施变得更加容易,DevOps越来越被接受和重视。
同样,为了应对业务的敏捷发布,应用平台的弹性诉求,商业环境的变化,云原生时代已到来,云原生技术已经应用到企业核心业务。
云原生与DevOps是什么关系?其技术优势如何与DevOps结合,才能更加高效便捷的实施呢?云原生时代下,DevOps的落地会遇到哪些困难?华为云是否有一些实践方案去应对?
华为云社区邀请到了华为云DevCloud首席技术布道师徐毅,听他讲述云原生技术下的DevOps实践,深入了解集华为30年研发经验的华为云DevCloud是如何践行DevOps理念的。
众所周知,很多变革都始于技术。技术经由积累产生势能,这些新的技术释放出很强大的生产力并带来创新,满足用户和客户新需求的爆发,从而需求驱动技术的迅速普及和优化,最终带来商业的繁荣。
云原生应该是云化的延伸。在云的发展初期,并非所有的产品技术都是云原生的,随着云计算技术的不断发展,云原生的应用和系统能够更好的满足需求侧在功能和非功能各方面的诉求。从云到云原生这个过程来看,在当下创新加速的VUCA时代,也带来了一系列的变化:
需求变化快,但方向暂不清楚,这就需要IT信息化支撑业务创造的过程更灵活、反应更快速;
在业务板块创造出来之后,会面临着业务使用的强度和频率是不固定的,所以就需要支撑业务供给的灵活性和快速响应的速度;
当下的用户需求和业务的颗粒度,随着市场发展越来越小,所以能够迅速把握市场动态、完成业务创造、提供业务这个全过程周期的速度也变得非常重要,还需要够拉通整个组织。但不同职能组织都有自己的不同目标,无法做到说改变就改变。
云原生技术的发展,使得各个职能组织去支持、去改变的难度越来越低、投入越来越小,大家更愿意拉通和协作,从而在商业侧能够给企业带来更大的竞争优势。
首先要掌握架构解耦、云端弹性等相关技术,具备研发能力,这是第一要素。
第二,把技术能力运用起来在平衡中去解决业务问题,不能太过于完美主义。例如面对一个遗留系统,是一步到位解耦完毕还是循序渐进呢?分析业务现状的问题并针对性地应用云原生技术能力去解决,去创造价值,是第二个关键要素。
第三是团队通力协作的能力。作为团队的基础,团队的每个成员都具备充分的技术能力,这样团队的能力可以等同于团队成员的合力。团队成员之间通过协作能够产生的化学效应,不只是1+1=2的效果,它将会带来乘数甚至指数级的效应。
第四是组织变革能力。新组织可以直接招募具备云原生技术的成员组建团队,这样带来的好处就是大家没有遗留系统,理解业务即可。如果是一个现成的组织,那么团队成员既要边学习和掌握新技能,边继续发展业务,就如同“给行驶中的汽车换轮子”。这时就需要一种软实力来打消大家的顾虑,推动往云原生的交付模式转变。
按照CNCF的说法,容器、微服务等被认作是云原生技术。DevOps主要是指一种工作方式或模式,它帮助拉通整个价值创造过程中各环节的人和组织,通力协作缩短价值创造的周期时间。在这个过程中,就需要从人、工具和流程方法三个维度去改变。
如何区分普通DevOps和云原生DevOps,主要看一个组织在应用DevOps的过程中,是否使用云原生技术开发应用或者系统。 举例来讲,DevOps开发一个传统的单机应用,不需要开发人员掌握容器或微服务等技术,对部署和发布的自动化要求也不高,或许也不需要灰度发布、应用监控等功能,往往只需应用几个DevOps工具就能够满足需求。
当然,它是被定义为DevOps,所以代码提交之后的编译构建、测试、打包、安装启动等,都要能够以全自动化的方式完成,无需人工干预,那这个应用的研发过程就是一个普通的DevOps。
云原生模式严格意义上来说,是整个应用的生产过程都在云上, 需求在云端的系统上管理,代码存放和评审、测试用例都在云上进行,甚至日常交流、开会等方面也都在云上进行,这就是比较彻底的云原生DevOps。这时就需要一个可以拉通各个环节的云原生DevOps工具的平台,我们称之为一站式云原生DevOps平台。
应该说是未来的趋势。个人开发者可以利用云厂商提供的便利,以极低的成本,去学习和实践云原生DevOps开发的全过程,掌握运用各种云原生技术,去创造价值。同时,开发者要从自身的长远发展出发,自己的未来自己做主,不要仅仅依赖于工作中实践,可以考虑去主动的投资学习。毕竟自身能力的提升是带来更大回报的最常见手段,其他手段都依赖于能力的提升。
在云原生2.0的趋势下,越来越成熟的云原生技术化解了开发者的诸多难题,开发者突破个人职业瓶颈的核心关键是掌握1+N关键能力,就是1个DevOps平台加上N套技术栈,再配合云原生提供的开发能力,开启第二曲线。想了解更多,可以直击文章《云原生开发者须具备的1+N技能,开启第二曲线》中做了详细的解读。(相关阅读:云原生开发者须具备的1+N技能,开启第二曲线-云社区-华为云)
要说DevOps如何解决实际开发运维中遇到的问题,首先我们应该先分析当下开发运维会遇到哪些问题,简单列举几个点:
第一个问题:现在市场需求变化很快,产品要快速响应,频繁地进行版本更迭。
当下很多项目都在使用微服务框架,其中一个好处是可以减少变更影响的范围,但微服务其实对运维的要求相对变高了,因为之前你只负责一个单体服务的发布,现在你要负责多个微服务的发布,传统组织结构以及运维方式很难满足,这其实也是促使DevOps诞生的一个主要因素。DevOps是可以通过一系列的自动化工具,将很多以前需要手工操作的流程变成自动化的。比如发布包的构建、部署任务参数配置等等,然后对各个服务按照不同场景,做出不同的发布策略,进行自动化的发布,加速产品新特性的上线。
第二个问题:产品上线后,数据运营和分析。
这点容易被忽略,很多人认为DevOps就是自动化工具链,其实数据分析、运营也是DevOps中很重要的一部分。 DevOps文化中,度量是很重要的一环,这个度量不是说向老板汇报用的,而是通过数据去了解各个服务的运行情况、用户的使用情况等,然后根据分析结果对产品进行优化改进。传统的运维模式很难建立这种反馈机制,不搞清楚市场或者用户群体感受的开发,很容易闭门造车,而DevOps则是提倡在运营环节建立反馈机制来解决这个问题。
其他方面问题:比如基础设施、网络、场地等方面的投入,相当于把资源托管,让开发者更多的聚焦于新特性的交付。以上这些其实都是DevOps解决实际生产中的问题的例子。
测试阶段遇到延迟的问题是说很多时候安全测试在整个软件生命周期中做得比较晚,导致很多漏洞之类的没有测出来。这个问题其实很好解决,首先可以从单元测试入手,在新特性开发之前,根据验收标准写好单元测试,等到功能开发完成直接进行单元测试,这样就会减少测试的延迟。
DevOps也主张将测试环节尽可能地嵌入到流水线中,华为云DevCloud提供了代码检查功能,检查代码的漏洞。还有就是现在很多项目都在用微服务框架,微服务框架中服务与服务之间是通过API进行交互的,那我们也可以将接口测试作为一个主要安全管控手段,将他纳入到持续交付流水线中,每次执行流水线时,自动进行接口测试。
华为云积极地参与业界相关标准和能力模型的共建共创,作为重要参考来构建DevOps相关产品。业界主流是根据DevOps的自动化程度将它划分成三个阶段:
保证代码时刻可以进行构建的持续集成;
将代码自动化部署到类生产环境进行测试的持续交付;
将最新的代码直接自动化部署至生产环境的持续部署;
其中,持续集成自动化程度相对会低一些,持续部署自动化程度是最高的。但更多的时候需要结合业务场景去选择是持续集成、持续交付或是持续部署,并不是所有的场景都必须做到持续部署。如果条件允许的话,一定是自动化程度越高,就意味着交付频率越快。
华为云提供的云原生DevOps体系框架叫做HE2E,即华为端到端(End to End)DevOps框架。是结合了华为30年研发经验并集合了业界先进的实践所形成的一套可操作可落地的敏捷开发方法论。HE2E围绕一个名为凤凰商城的电商平台项目,按照DevOps方式完成从提交代码到流水线部署上线的全过程,项目使用了微服务、容器等多种云原生技术,其中DevOps部分依托于华为云DevCloud。
在这个实践中,开发者可以通过华为云DevCloud的项目管理功能进行敏捷项目管理。项目的示例代码也是通过华为云DevCloud的代码仓库codehub,项目使用微服务架构,前后端分离,并且可以通过华为云DevCloud进行云端构建实现持续集成,将前后端打成Docker镜像放到云端镜像仓库,供部署使用。
从集成到部署,还可以通过DevCloud的流水线功能串联起来,在流水线中配置构建、部署任务实现云原生的DevOps,这个流程和现在很多企业的实际开发场景也吻合。
最后,对于开发者来说,DevOps是神秘的,自己可能没有精力或资源搭建DevOps工具链,其实这部分可以通过H2E2——相当于是用华为云搭好的一套架子,直接使用华为云DevCloud体验云原生的DevOps。
花粉社群VIP加油站
猜你喜欢