阿里云持续交付-快速可靠地交付高质量软件

简介: 拥有3万多人的阿里巴巴,线上有上万个应用,上亿的用户即时在线,每天有几百个应用在线上更新,就像在时速200公里的高速公路上横穿马路维修栅栏一样,时刻保持着心惊胆战,而保护这个过程的体系就是阿里巴巴持续交付工具与实践。

文/戴蒙


拥有3万多人的阿里巴巴,线上有上万个应用,上亿的用户即时在线,每天有几百个应用在线上更新,就像在时速200公里的高速公路上横穿马路维修栅栏一样,时刻保持着心惊胆战,而保护这个过程的体系就是阿里巴巴持续交付工具与实践。


现代开发企业中如何做好持续交付是一件异常重要的事情,在互联网企业中更是如此。而阿里巴巴在这么多年的研发管理基础上,对如何做好持续交付提出了一套全新的模型与实践。


阿里技术保障部产品专家戴蒙在“2016云栖大会上海峰会”专场《“互联网+”架构及实践专场-企业级信息系统云化演进之路》中分享了阿里云持续交付打造高质量交付和高质量软件的经验。


本次演讲深度分析了阿里式的持续交付理论,同时分享如何通过工具提升研发管理实践效果。交互无小事,任何与客户有关的都是大事,做好了研发管理才能平安如意,如同登陆在月球虹湾里那么高效安稳。


以下为整理后的演讲实录。


为什么会有持续交付的思考?


大家知道双11当时每秒钟十几万次的交易量,我们这时候去做软件更新时一定是要做到持续的,不会中间中断,代码更新完就马上要上线的,而不是说任何的操作要隔上几个月、几天才能去更新,这肯定是不行的。我们到底怎么去解决这些问题?我们总结出影响发布质量的关键因素,分为两大块:


  • 未发生故障

  • 发生故障


未发生故障的时候,我们应该做code review、测试、灰度、发布;在发生故障之后,我们先要去应用定位,然后做应用回滚,然后做故障定位,定位完成之后是修复。在持续交付里面这几个关键因素都会用到。


持续交付是什么?


持续交付包含几个方面:集成、持续、部署、交付。


集成是什么呢?我们认为在一起就是集成,就是代码放在一块,你的逻辑放在一块就叫集成。只有不停的集成才是一个持续集成。我们有时候会产生这样的问题,一个人在部署的时候另外一个人在测试,有可能就会产生冲突,所以部署是保证集成独立性的关键要素。多次的集成产生一次的交付。如果前面不做集成的话在做交付的时候会不会很担心?所以只有在多次集成之后才会去做这次交付。


习惯养成


持续交付里面很多内容是我们的一个习惯,怎么去养成这些习惯呢?就是人在做一些事情的时候,或者是在做集体的运动当中是有心理过程的。1967年美国有一个高中老师做了一个叫做“第三次帝国”的实验,就是他为了证明集体主义养成习惯是非常快的。第一天,他做的是来上课的时候让所有的学生起立坐下,他说起立的时候就起立,他说坐下的时候就坐下,一共花了5分钟。然后让所有的学生到教室外面,他做了示意之后学生进来之后再坐下,在这个过程中鸦雀无声。就是说人类的习惯开始可能只需要5分钟,养成这个习惯只有用了3天。怎么样去养成一个习惯是非常容易、非常惯性的一个事情,我们通过一个良好的工具、一个良好的计划是可以养成我们持续交付中应该去做的事情。影响发布质量的关键因素就是我们应该要去养成的习惯。


不好的持续交付线


ba042a2bb101f3a8b2d502ba8990f1359103a5b5
图1最简单、最缩小的一个持续交付的过程


图1中会看到这样几个节点,第一个节点是代码提交、编译、单元测试。代码提交之后并不能在旁边坐着喝一杯咖啡,其实这个过程是不对的,你的反馈量是不够的,只有把编译和单元测试都放在一块的时候才可以。第二个节点是我们的部署环境和集成测试,部署环境和集成测试为什么单独分开是有问题的呢?部署和集成测试应该是在同一个活动中的,部署会影响集成测试。任何一个集成测试环境,在别人会随意点到你这个部署造成你的环境崩溃的情况下,整个测试是不安全的,我们希望活动间不相互影响,所以这两个环节应该并在一块。


好的持续交付线


48a16920a91d583e64a46f11bb19d6378f043d82
图2好的交付线框架图


如何去养成一个好的交付线?其实很简单,图2中,在第一个节点我们应该把代码检出,和我们的编译、单元测试放在一块,第二个节点就是我们的部署和集成测试,第三个节点是部署冒烟环境和冒烟测试,第四个节点是部署生产环境和冒烟测试。


8fffac54122d98fca3ccbeaf1990bd6d2828096e
图3持续交付线的数据理论


在好的交付线基础上我们提出了一套理论,我们可以看到整个持续交付的过程里面有几个点:原子级活动,覆盖面越来越大,代价越来越高,频度越来越低。最终根据这四个原则我们一直不停的去做持续交付的话会出现一个数据,就是持续集成的次数肯定会大于等于持续部署的次数,最终会大于持续交付的次数,即图3中 M大于等于N大于等于1。如果这里面的数据是趋向于相互都相等的,就是说代码提交后直接到交付了,这个过程一般是不太正常的,很难达到这个过程,中间还是会有一些集成和测试的过程。


持续交付工具


在开发企业中会去做包括TDD、敏捷开发这些过程的一些事情,做这些事情是为了什么?肯定是为了提供一个高质量的软件马上去交付到我的线上或者是交付到我的服务器中,我们中间会应用一些工具。


敏捷宣言:个人和互动高于流程和工具;工作软件高于理解文档;客户协作高于合同协商;变化响应高于计划遵循。


我们既然要做到敏捷宣言里面敏捷开发的一些过程,就需要用到持续交付的工具,持续交付的工具需要包含几个部分:项目管理、代码托管、构建管理以及持续发布,最后形成持续交付线。


9bf03c470331b58e8831f019ae0b08ed1dfb0bf8
图4代码管理


项目管理需要动态性的文档。我们在网页上有一些内容,页面上会有相应的标签提示你是什么样的内容,我们的任务墙上会产生相应的故事卡,就是敏捷开发里面我们谈所谓的故事,我要分解出最终能够实现的故事,打通它的特性。我们认为所有的人员都应该在一份文档中去观察、修改、编辑你的内容。传统的开发模式里面我们会分角色,这个事情在敏捷开发里面其实是强烈反对的,我们更多希望他是一个角色的同步,大家应该在能力和角色上是打通的。我们通过这份文档让所有人习惯于在一份文档中更新信息,造成信息的统一性,最后在人员的能力上进行一个打通。


沟通


在我们的软件开发过程中沟通是非常重要的环节。第一是我们的面对面沟通,第二是电话沟通,第三是即时消息,第四是邮件。在我们的持续交付里面我们也都提供这样的功能,包括现在在市面上有一些做项目协作的软件或者是平台,大家都是追求怎么样提高我们的开发效率,就是提高我们的沟通。


034dc44f7df25dd549bb75f139fb0fbae7471f46
图5代码管理系统图


a238eb36d922ba63dfc2a8fa4b2f297a857b441d
图6代码库


阿里巴巴现在提供了一套代码管理的服务:


  • 集合编译、测试、发布等插件;

  • 支持所有Git命令,兼容所有Git工具;

  • 私有Git仓库,存储任何类型的源代码及文件;

  • 在线浏览和管理代码,提升研发效率。


这套服务非常高可用,而且是无限存储。比如说我们的OSS、对象存储、高速带宽,我们是在线浏览的,我们可以进行一些在线操作,我们是协作开发的,我们任何的信息都会及时沟通交流,最后统一入口。


c89a800adbead7f8a4c11204fa942be89f3dc2c7
图7构件管理系统图


99d4b08e613504d6a1985e940c0baf76c9272f4a
图8构件管理


阿里云构件仓库实现高速并且稳定的Maven镜像管理服务,每天与其他中央库同步,提供高速稳定的网络和服务。可以通过构件服务上传、下载插件或依赖包,这使得在构建时可以快速下载依赖包,也可以上传依赖包提供给其他开发者使用。


整个持续交付应该是一套完整的系统。我们做到的备份效果是非常好的,会达到1:9的备份,我们还提供一个构件的服务,构件也会达到1:3的备份。而且我们的上传非常简单。


建立反脆弱系统


5373b190c425c800b4166f5bd16a99f5c3d04c80
图9持续交付系统


636a7bdc5515d8bfc4a197d21207b929c26cdb37
图10持续发布线模板


为什么要做持续交付,还有一个非常重要的点——人肯定会产生意外的情况,整个世界都会有意外的情况,我们怎么在产生意外事件时保护你的代码和开发?我们就应该用到持续交付系统,(上图)就是我们的持续交付系统,我们会非常快速高效的让软件放到线上。而且我们现在还提供了几种服务,我们可以通过ECS的部署,我们还有容器的服务,我们可以部署到容器上,而且我们可以通过阿里云的容器非常简单快速的上传下载。同时我们还提供了一个审批的服务,现在持续集成的软件里面其实没有这一步。


云协作从这里开始


持续交付平台(CRP,Continuous Rlease Plaftorm)提供软件生命周期全环节服务,包括项目管理、需求管理、缺陷管理、代码托管、构件管理、开发环境管理、持续交付线、构件管理、依赖管理、测试管理、一键部署、监控管理、团队协作等。让您的软件简单、快捷、安全、高效的交付。


df341ec0bedf46529489577684f6a0ff47685f07

阿里云持续交付平台:https://crp.aliyun.com/


扫码关注阿里技术保障公众号,有更多技术干货分享,更有机会赢取精美礼品。

ea14ec7fb062eab8a29333c7a100d227a258a14a
目录
相关文章
|
2月前
|
云计算
电子书阅读分享《阿里云计算巢加速器:让优秀的软件生于云、长于云》
电子书阅读分享《阿里云计算巢加速器:让优秀的软件生于云、长于云》
46 1
|
5月前
|
弹性计算 运维 安全
阿里云国际站:阿里云容器Serverless形态交付算力怎么样?
@luotuoemo飞机@TG 阿里云国际站:阿里云容器Serverless形态交付算力怎么样?阿里云容器服务是阿里云提供的高性能、高可靠的容器应用管理服务,能够支持用户以容器的方式运行和管理应用程序。并且,阿里云容器服务还融入了Serverless技术,可以按需提供计算资源,使得用户能够更加专注于应用的开发和运营,降低运维成本。
|
7月前
|
弹性计算 Cloud Native 云计算
全新发布 | 阿里云计算巢软件分销中心正式上线
本次发布会将于2023年9月21日14:00在阿里云开发者社区、阿里云官方钉钉视频号、阿里云开发者微信视频号同步直播,阿里云弹性计算产品专家徐子超和长虹佳华云生态商业部总经理章宇共同出席并带来精彩分享,欢迎各位扫描下方海报中的二维码/点击阅读原文直达发布会预约入口,第一时间了解计算巢最新资讯。
全新发布 | 阿里云计算巢软件分销中心正式上线
|
7月前
|
弹性计算 Java 芯片
阿里云张伟分享 | 软件跨架构迁移(x86->ARM)的原理及实践
2023年8月31日,系列课程第四节《软件跨架构迁移(X86 -> ARM)的原理及实践》正式上线,由阿里云弹性计算架构师主讲,内容涵盖:ARM与x86架构的差异分析;软件跨架构迁移的原理;软件迁移策略制定、环境准备、执行、测试优化及持续部署与维护等;以及软件迁移的全流程解读。
阿里云张伟分享 | 软件跨架构迁移(x86->ARM)的原理及实践
|
8月前
|
存储 缓存 Linux
阿里云云存储网关(CSG)软件版顺序写模式使用教程
阿里云云存储网关(CSG)软件版是一款安装在阿里云用户机器上的云存储网关产品。本文介绍了如何使用CSG软件版的特殊工作模式——顺序写模式,以及相关注意事项。
|
8月前
|
弹性计算 人工智能 算法
阿里云张伟:软件跨架构迁移(X86 -> ARM)的原理及实践|阿里云弹性计算技术公开课直播预告
针对阿里云倚天实例的软件迁移,阿里云为开发者提供了迁移工具EasyYitian和性能调优工具KeenTune,能够帮助用户解决软件迁移评估分析过程中人工分析投入大、准确率低、代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点,实现业务在ARM ECS的快速适配。EasyYitian支持主流开发语言,通过系统自动化扫描可以一键生成分析报告。KeenTune通过AI算法与专家知识库的有效结合,为软件应用提供动态和静态协同调优的能力。
阿里云张伟:软件跨架构迁移(X86 -> ARM)的原理及实践|阿里云弹性计算技术公开课直播预告
|
10月前
|
人工智能 大数据 新制造
任我行软件与阿里云深化合作
任我行软件与阿里云深化合作
114 0
|
10月前
|
数据采集 缓存 大数据
大数据软件、阿里云大数据快速解决海量数据
大数据软件、阿里云大数据快速解决海量数据
|
11月前
|
Devops 持续交付
《阿里云产品手册2022-2023 版》——DevOps 持续交付
《阿里云产品手册2022-2023 版》——DevOps 持续交付
124 0
|
11月前
|
物联网
《阿里云产品手册2022-2023 版》——IoT边缘现场计算:云边协同软件获得首批可信云认证
《阿里云产品手册2022-2023 版》——IoT边缘现场计算:云边协同软件获得首批可信云认证
134 0

热门文章

最新文章