软件开发生产线 CODEARTS-交付在云端-全云DevOps实践:实践:小步快跑,收支相宜

时间:2024-04-30 15:47:25

实践:小步快跑,收支相宜

我们根据在各产品线转型的经验,第一步一定会选一个标杆产品,这个标杆产品一般来说会是一个服务化产品,或者是一个Cloud Native原生的产品。对架构解耦实现云服务化,对工具实现上云,对运维进行云提升。这是我们选取试点服务的方法或者准则、经验。

选好了一个服务后,就需要按部就班地转型。怎么做?实施敏捷的时候,敏捷有很多实践,要小步快跑,不断地见到成效。在进行迁移的时候也面临同样的问题,因为这本身也是一个项目,不可能一蹴而就,不是阶梯状的陡升。通过不断提升每一步的工具能力,来实现整体交付能力的提升。同时把整个转型工作的风险降到最低。

能力转化就如同是一个金字塔,金字塔尖一般来说是非常不容易达到的境界,金字塔的底端是入门团队需要做的事情。金字塔下面是沙子,第一件事情是打破思想,是我要做这件事情,要上云。这里一般是指上公有云,因为私有云的模式很难达到各种应变能力。

一般来说代码上云,就使很多企业避而远之,因为他们要的是代码的安全性。上图中右边每个层级列了两行,描述做这件事情主要的目的是什么、主要涉及到的工具是什么。代码上云主要的目的就是解放思想,把代码放到云端代码托管服务上来,把资产,例如软件开发的文档、积累的知识放到这里。

第二是管理上云,让我们的软件开发过程更加开放透明。有很多团队每周会发一个电子版进展表格,从一周的频度来说它是开放的,但是每天而言,它仍然是封闭的系统。把管理放到云端,目的是实现更好的开放协作。需求管理工具要有看板、相应的测试管理人员。

前两步实现之后,必然对效率有了要求,这个时候要构建自己在云端交付的能力,一般来说涉及的是构建、部署、流水线和自动化测试,当这些能力达到之后,这一步追求的提质增效的目标基本达成。

金字塔的顶端是开发上云,把所有的工作迁移到云端,目的是探索创新。此处为什么要把IDE迁移到云端?因为在云端可以得到更好的快速获取环境的能力,可以获得更好的协作能力、试错能力。当这些能力叠加在你面前的时候,你会发现在本地创建一个非常好用,但是搭建起来非常复杂的环境,不再有那么大的吸引力了,你会追求开发上云的境界。

下面给大家介绍几个在云化工具链转化过程中比较好的实践:

  • 第一个实践,DevOps讲究的就是快速迭代、快速交付。它的主要收益不是为了快速的交付价值,而是为了帮助组织不断的纠正错误。产品经理抱怨交付团队交付效率永远达不到要求,就是因为管理过程中会存在各种各样的问题。所以每周一定要有一个迭代回顾,通过迭代回顾把迭代过程中的问题全部列出来,争取在下一个迭代中去改变一些,通过不断的改变,团队的效率得到提升,冗余的行为被去除。这是快速迭代敏捷开发的实践。

  • 第二是微服务解耦。下图中左边部分,所有的服务都耦合在一起,虽然每个服务有自己的泳道,但发布的时候必须携手一起发布。例如一个很简单的服务,只有前台和后台,用于查询数据和刷新数据。经常会有前台升级的时候,要求后台跟着一起升级,后面后台升级了之后,前台工作了。这种情况就是解耦不充分造成的。一般来说,如果做得好会有特性开关、合适的导流、灰度测试等等。右边是一个比较好的例子,每个微服务有自己独立的泳道,同时已经实现了自己独立的交付节奏。

  • 第三是持续交付流水线。这里列了一个流水线的基本流程,下面几点是我们总结出来的比较有意义的实际操作:

    流水线一定要体现出管理理念,流水线分广义和狭义,狭义指操作序列,从开始执行到结束,总体来说只执行的是操作序列一些任务的堆积,不是管理理念的构成。还有一种广义的流水线,从需求进入管道之后,整个管理起来,并且可视化,广义流水线决定了你交付价值的真正速度。

    任务要自动化执行,还要有质量门禁,这并不是华为的独创,实际上在所有业内的云交付公司都采取了这种方式。华为公司提供的质量门禁是基于Task的输入为大家设定的阈值。实际上质量门禁设置的最高境界是提供一个开放的茬口,在这里一切服务都可以作为门禁,它可以是一个手工的步骤,可以是一个服务请求的数据,也可以是一个测试系统的报告等等。这种开放的质量门禁才能够最大限度的体现出管理理念。

    最后一个叫做质量门禁的集中管控,流水线放在个人的手里,执行流水线的同事通常会由于权限过高或者发布压力,把流水线的门禁关掉或者故意设得比较低。一定要从企业或者组织的高度对流水线的门禁有一个较高的要求,这种情况下质量才能得到比较好的保障。

  • 第四个实践叫做生产环境的自动化。出现了比较重大的质量事故后,当我们去追溯时发现,问题往往是由一两个工程师一个多余的操作造成的。怎么杜绝这个事情?只有自动化。只有没有人参与的过程才是不会犯错误的。在生产环境的自动化保证了高质量向用户交付的基本要求。

    首先,自动化的变更指的是当你决定向云端发布一个新版本的时候,从版本流出一直到线上功能的上线,直到用户可用的过程、审批必须都是自动化的,而不是说有手工环节在里面,只有这样,交付的前置时间才会缩到最短。

    紧接着是灰度发布,任何一个发布对用户都有影响,不一定友好。只有找一部分用户先来试用新的功能,才能降低发布风险。这里有两种,一种是特性,一种是升级的部署。同时还有失败回滚,当部署的新版本发生故障时候,你如何按照精英团队的标准,在一个小时以内把它回滚到健康的版本,保证它的能力。

  • 第五,用户级灰度发布。我们通常会采用很多种技术,一般是采用流量分配的技术,我们一般会控制流量分配,在这个技术过程中,我们会保证一些用户使用到新版本,这个过程仁者见仁,智者见智,概念非常多,不赘述了。

  • 第六是生产在线测试。如果是金融系统,涉及到钱,应该有相应的管理成本配置,否则怎么保障线上的系统是正确的?线上系统势必要做测试,任何系统的模拟数据都无法与真实数据相比,哪怕在真实系统只花一分钱,模拟交易量都不能替代它。应该用管理成本设置一个账户,在里面实际的实现一些线上的支付,只有这样才能保证线上系统是真正可用的。华为线上有非常丰富的测试手段和机制,这里也提到了,告警机制是非常重要的。实现线上测试的目标是什么?第一是保证线上的质量,第二是对用户的承诺,我们交给用户的是一个服务,而不是光盘,这个服务必须是可用的,当它不可用时,要先于用户发现并解决它,这样的服务才是可靠,可信赖的。

support.huaweicloud.com/reference-devcloud/devcloud_reference_040503.html