热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

研发管理---(1)持续交付

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

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

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

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

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

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

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

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

  • 未发生故障
  • 发生故障

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

持续交付是什么?

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

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

习惯养成

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

不好的持续交付线


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

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

好的持续交付线


图2好的交付线框架图

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


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

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

持续交付工具

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

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

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


图4项目管理

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

沟通

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


图5代码管理系统图


图6代码库

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

  • 集合编译、测试、发布等插件;
  • 支持所有Git命令,兼容所有Git工具;
  • 私有Git仓库,存储任何类型的源代码及文件;
  • 在线浏览和管理代码,提升研发效率。

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


图7构件管理系统图


图8构件管理

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

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

建立反脆弱系统


图9持续交付系统


图10持续发布线模板

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

云协作从这里开始

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


推荐阅读
  • 本文深入探讨了Redis中的两种主要持久化方式——RDB(Redis Database)和AOF(Append Only File),并详细解析了两者的实现机制、优缺点以及在实际应用中的选择策略。 ... [详细]
  • Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
    go,通过,map,filter,foreach,等,流,式,ap ... [详细]
  • 自SQL Server 2005以来,微软的这款数据库产品逐渐崭露头角,成为企业级应用中的佼佼者。本文将探讨SQL Server 2008的革新之处及其对企业级数据库市场的影响。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • 本文深入探讨了Scala中的隐式转换机制,包括其在类扩展、隐式解析规则以及隐式参数和上下文绑定等方面的应用。通过具体示例,详细解释了如何利用隐式转换增强类的功能。 ... [详细]
  • 本文旨在介绍在iOS平台进行直播技术开发前的准备工作,重点讲解AVFoundation框架的基本概念和使用方法。通过对AVFoundation的深入理解,开发者能够更好地掌握直播应用中的音视频处理技巧。 ... [详细]
  • API网关作为微服务架构中的关键组件,扮演着系统与外部世界交互的唯一接口角色。它不仅封装了系统的内部复杂性,还为不同客户端提供了个性化的API接口。本文将探讨API网关的重要性及其核心功能。 ... [详细]
  • 本文记录了Android学习的初期阶段,包括Android的基本架构、Dalvik虚拟机与JVM的区别、ADB工具的使用以及应用程序的打包安装流程。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
  • Docker入门与实践指南
    本文介绍了Docker的基础知识,包括其作为开源应用容器引擎的特点,以及如何利用Docker将应用程序及其依赖项打包成轻量级的容器镜像。同时,还详细讲解了Docker的核心概念、安装过程及基本命令操作。 ... [详细]
  • 深入解析Apache SkyWalking CVE-2020-9483 SQL注入漏洞
    本文详细探讨了Apache SkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。Apache SkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。 ... [详细]
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • 本文通过一个简单的 C++ 示例,深入分析了当使用 `vector::resize` 方法调整向量大小时,对象的构造函数和析构函数被调用的具体情况。示例代码展示了如何创建一个包含自定义类的对象的向量,并通过调整其大小来观察构造和析构的过程。 ... [详细]
  • IoT开发指南:基于Android Things的树莓派3开发环境搭建
    本文将指导您如何准备必要的硬件与软件资源,以及如何在Raspberry Pi 3上安装和配置Android Things操作系统,包括详细的步骤说明和常见问题解决方案。 ... [详细]
  • 本文提供了手势解锁功能的详细实现方法和源码下载链接。通过分析手势解锁的界面和逻辑,详细介绍如何在iOS应用中实现这一功能。 ... [详细]
author-avatar
手机用户2502906401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有