云栖君导读:本期的分享我们邀请到了阿里巴巴研发效能事业部的董越老师,他是阿里巴巴内部培训百年技术课堂的著名讲师,他讲的《百技课程-代码服务》是每一位入职技术童鞋必修的一门课,我们也将这种阿里内训技术首次面向业界公开,希望可以影响更多技术人。这节课分享中提及的阿里技术人使用的产品Aone也于2017年正式上阿里云,以云效的产品名面向业界开发开放。

讲师简介:董越,高级产品专家。在软件研发管理领域钻研十余载,是《未雨绸缪——理解软件配置管理》等书的作者或译者。2014年加入阿里,目前从事阿里巴巴软件研发协同平台(Aone/云效)的产品设计工作。

概述

同学们好。为了让新同学能够比较快速的开始在阿里巴巴研发环境下的开发,我们设计了几门课程。其中,本节课程是百技课程-代码服务的接续课程,介绍源代码写好后,如何发布上线的内容。这包括:从源码到上线、质量检测的多种方法、流水线三个部分。其中每一部分,在本文中都是概要性的介绍,并给出相应的参考文档,作为进一步学习的资料。

学习了这门课程,大家就知道了在阿里写完源代码之后,要做哪些事情,使用什么工具,就能把软件安全发布上线。

从源码到上线,事情可不简单


问大家一个问题,什么叫程序?或者说,什么叫软件?好像这里面有歧义。有时候指的是源代码。有时候指的是安装包或者安装光盘,比如,“我下载了一个软件。” 而有时候指的是已经安装好随时可以运行的程序。比如手机上新装了一个应用。还有的时候指的是正在运行中的,正在提供服务的程序,比如一个网站。

有这些不同的含义,其实反映了一件事情:单纯的源代码,其实还不能提供服务,不能为用户带来价值。只有源代码被构建打包,并且被部署运行起来,才能为用户带来价值。

那么,如何才能部署运行起来,为用户提供服务呢?这很麻烦吗?是的,这很麻烦。

想象一下,你是一个初创企业的CTO。忽然天上掉馅儿饼,掉下来五个Git库,源代码已经写好,而且一点儿毛病没有。每个Git库能编译成一个war包。你需要把每个war包部署到100台服务器上,总共需要500台服务器。哦对了,随着用户使用,会不断追加新功能,产生新版本,需要更新服务器上的软件版本。

假定你不是在阿里巴巴。假定也没有阿里云。假定你只是有很多钱可以雇到合适的人。你想想一共有多少事情要做?

要买服务器。哦不,先要买或者租机房。风火水电要搞稳妥。要接好网络。每台机器要装好操作系统的合适版本。不止是操作系统,还有相关基础软件。还有路由。还有数据库,还有监控系统,还有日志收集系统。中间件也是必须的。哦,域名还忘了申请了……

这些搞定了,才能安装那些war包。这么多台,肯定不能一台一台操作,累死了,得有个批量操作的方法。可这方法怎么弄呢?另外,考虑到将来要更新软件版本,所以这还不是一次搞定的事情。那更是得批量操作了。更新版本的时候,还有个麻烦事,不能一下子都停机啊。那不就事故了。所以得分批来。比如,先更新20%的机器,再更新20%,如此一共五批弄完。

往细节看,其中更新某一台机器,其实都是个挺复杂的过程。首先下载新的war包到这台机器,然后开始替换过程。先得把流量切走吧,切流量前,还得先把监控报警关上。流量切走了,就可以停止当前war包的运行。然后用新的war包代替旧的war包,启动试试看。如果通过了一些基本的自动检测,说明新war包大体上能运行,于是就开始切流量回来,最后把监控报警恢复。忒麻烦!!

还好有工具帮忙


怎么办?用趁手的工具啊。正是为了提高大家的工作效率,让大家能够集中精力在具体业务本身的研发上,阿里巴巴集团多年以来建设了一整套基础设施。

在交付层和运维层,都有大量的基础设施。但这些,大家可能感受不深。因为对于一个应用来讲,它最关心的事情,基本都是通过Aone暴露出来的。Aone也就是最上层研发层的主要工具。

回到前面讨论的场景,把完美的源代码发布上线这个过程,那么大体步骤应该是:

第一步,把运行环境初始化好。这一步目前同学们基本可以在Aone上一站式完成了,就是在Aone上注册一个新应用,然后根据向导指引,把上线任务一项一项配下来。当然还有些内容比如数据库还需要访问其他系统申请配置,将来我们努力做成一站式配置好。

第二步,根据源码构建出压缩包(基本就是把war包压缩一下),然后把压缩包部署到各目标服务器上。这一步,可以在Aone上一键完成。将来更新版本也一样。点一下按钮,所有事情都做完。这就是用Aone的好处。

阿里巴巴相关术语

为了使用Aone,我们得了解一些Aone的关键概念。其实是在阿里巴巴开发时,大家一开始约定俗成的概念,后来固化在Aone上。我们一个一个来看:

应用:Git库里装的是源代码,这是程序的一种形态。那么运行中的程序叫什么呢?在阿里巴巴,我们管它叫应用。一般来说,一个Git库,构建生成一个包,产生一个应用,在若干台服务器/虚拟机/容器中运行,在测试、线上环境中运行。一般应用跟Git库是一比一的关系不过也有各种特殊情况,比如一个Git库里有多个应用。所以,我们确实需要应用这个概念。另外,应用不仅包括了应用主包(通常是war包打成tgz包),也包括了运行所需环境的配置,比如tomcat版本等。

二方包:三方包,指的是来自阿里巴巴外部的,开源或商业的包,比如jar包、rpm包等。而二方包,则是指来自阿里巴巴内部的,通常是其他团队的包。也就是说,一个团队研发出这个二方包,公布出来,供各团队使用。当然,也可能就是供团队自己使用。反正,只要是来自阿里内部的,上传到Nexus或Yum这样的包的仓库的,就都算二方包。

产品/产品线/产品树:应用是从部署运维的角度看运行中的程序。产品是从使用者的角度看运行中的程序。通常产品由一到多个应用组成。产品进而构成产品线,这样一级一级的上去,形成了一棵树,叫产品树。产品树的根节点,就是阿里巴巴。产品树的第一级展开,是各个BU。

变更:在外面的世界,现在变更通常是指线上运行环境的变化,比如更新了软件版本,比如扩容缩容等运维操作。在阿里巴巴,变更也有这个含义。但是在阿里巴巴,变更还有一个含义,软件研发过程中的含义。通常我们把一条feature分支就对应到一个变更。于是也常管这条feature分支叫变更分支。从这个角度看集成,就是把若干变更攒到一起,通过各种质量检测后,部署上线。

发布:发布,release,这个词常常是指软件版本公布出来供使用。但在阿里巴巴,这个词不仅对应于部署到线上环境,即使是部署到测试环境,也叫发布。换句话说,发布基本上就是部署的代名词。比如每个变更觉得自己OK了,就点一下变更详情页面上的“提交待发布”这个钮,标记一下。然后,在集成测试环境(也就是日常环境)对应的流程阶段的详情页面,就能看见这个变更。再选中它,然后点击“提交发布”这个钮,就与其他变更分支一起合并到发布分支,并部署到测试环境啦。

技术发展趋势


发布部署方面,在阿里巴巴,时下最重要的变革当然是Docker化啦。这方面的文章很多,比如阿里人,请用AliDocker、以及具体指导T4 应用迁移 docker 发布。

那么这一波浪潮之后,下一波浪潮会是什么呢?有可能是Serverless架构。这方面,外面的文章也很多,大家可以翻翻看。

提高质量的多种方法


刚才我们给的是一个天上掉馅儿饼的例子,忽然间得到了完美的源代码,然后考虑构建并部署上线。现实世界中哪儿有这样的好事儿啊。代码里面肯定有bug啊。那么,怎么能够有效率地把问题找出来,修复好?具体有哪些方法?

按四个象限梳理

为方便梳理,我们划一个横轴,一个纵轴,然后按照得到的四个象限,梳理各种质量保证方法。这里所说的横轴,在最左边,是源代码。在最右边,是运行中的程序。这里所说的纵轴,在最上边,是自动化,在最下边,是人工。

先看左半部分。左下角,人工的对源代码的检测。这主要对应的是代码评审。我们在代码服务这门课上介绍的。此外,安全评审有时也有人工介入。

左上角,自动的对源代码的检测。代码规约的自动检查工具,就落在这里。事实上,还有不少工具也落在这里,论品牌,有Sonar、PMD等。论方法,有圈复杂度等。所有这些自动检测,被称之为Static program analysis 或 Static code analysis,静态程序分析/静态代码分析。

这方面,在阿里巴巴有工具支持,对应的是Aone的实验室这个功能。可以通过实验室,接入各种静态程序分析工具和方法。实验室的前身是CISE。现在CISE也仍然是实验室背后的引擎。所以有时候听别人说CISE的时候,你就知道其实指的就是实验室啦。

再来看右半部分。右上角,是自动的对运行中的程序的检测。这也就是常说的自动测试啦。在阿里巴巴,也是主要由Aone的实验室来向大家提供相应服务。这包括单元测试/集成测试;接口测试/Web UI测试;功能测试/性能测试,等等。

右下角,是人工测试。虽说是人工测试,工具也同样可以提供支持,主要是管理测试用例。相应的工具是Aone中的测试用例管理。

测试环境隔离技术


不论是自动测试还是人工测试,只要是需要先把应用部署到测试环境,那就跟测试环境的管理有关系了。测试环境的管理,我们专门讲一讲测试环境隔离技术。

想象一下,你开发了一个feature,也就是一个变更。为了让它比较靠谱再送去集成,你需要对它进行测试。单元测试当然好,但是是不够的。需要尽可能模拟真实环境进行测试。那么问题来了,如何尽可能模拟真实环境?比如,为每个淘系的工程师另搭一个淘宝测试用?这费用咱真花不起……

怎么解决这个问题?阿里巴巴用了一个聪明的方法,测试环境隔离。让大家共享一个测试环境,但又仿佛每个人都是独占它的,互相不干扰。

具体说来,假定搭起一套测试环境,需要1000台机器,分别运行应用ABCDE……。这个环境我们称作日常测试环境。每个应用的版本呢,我们姑且称之为A0、B0、C0、D0、E0……

现在假定甲这名同学在开发A这个应用的一个变更,在开发过程中,现在产生的应用版本是A1。于是把A1部署到单独一台机器上,并用一些神奇的技术(通过中间件等)与刚才说的日常测试环境连通。于是,在甲这名同学看来,他所面对的系统是A1、B0、C0、D0、E0…… 而且仿佛他独占了这个系统。

类似的,如果乙这名同学为了一个feature,在开发A和B分别拉出变更分支,产生A2、B2。那么A2、B2将分别被部署到单独的机器上,然后它们一起与日常测试环境连通。于是,在乙这名同学看来,他所面对的系统是A2、B2、C0、D0、E0…… 从乙的角度看,他仿佛独占了整个测试系统。甲和乙在测试时,不会互相干扰。

有了这样的解决方案,就同时达到了两个目标:尽量模拟真实的环境;用不高的代价。

关于测试环境隔离技术,这里只是简单介绍下原理。

阿里巴巴相关术语

项目环境:就是前面说的,测试一个feature所需的测试环境。可能对应一个应用上的一个变更,也有可能对应多个应用。项目环境使用了上面讲的测试环境隔离技术,背后接的一整套测试环境,是日常环境,详见下面。

日常环境:就是集成测试环境。把各个变更攒在一起,然后部署到这里,看是不是能work。

预发环境:这个环境比日常环境更接近真实环境。事实上,从网络隔离的角度,它不是在测试网,而是在生产网。它所连接的数据库,也通常就是线上运行使用的数据库。一般来说,是先在日常环境测试,通过了再到预发环境测一下。

正式环境:正式环境就是生产运行的真实环境,向广大用户提供服务。

流水线:所谓流水线,通俗的讲就是把不同的工作按一定顺序串起来。为什么要串起来呢?

首先,有些工作天生就是有先后顺序的。如果想部署,总得先构建吧。所以构建-部署,就是天然的工作顺序。如果每次都是先点个按钮做构建,等构建结束后再点个按钮做部署,那好像有点儿笨啊,不如点一个按钮,把这两件事按顺序都做了。

其次,为保证质量,我们想往流程里面加规则和卡点。比如,必须通过代码评审和安全评审,才允许合并代码。这些质量保证性的工作,还有可能有不同的顺序和频率。典型的,单元测试和静态程序分析应该早做,频繁的做。而整个链路的测试,比较费劲,频率可以相对低些。因此,这些工作也是流水线中的环节,并且可能以不同频率执行。不同频率这个事儿,就是持续交付这个流行词儿中所说的不同stage(阶段)不同频率。

Aone提供了把不同的工作串接的能力,也就是流水线的能力。在分支模式下,每个环境,比如日常、预发、正式,分别对应一条流水线。在Git Flow和自由模式下,你甚至可以把所有工作内容,从代码提交到最后正式发布,做到一个流水线里。看着代码过一道道“关口”,然后发布上线,还是很爽的。

结语

以上,概要介绍了从源代码到上线的基本的构建部署过程,讲解了各种质量保证方法及其工具支持,讲解了流水线把流程作业连接起来自动运转。这些能力合在一起,就实现了对持续交付的一整套工具支持方案。当然,如果你问DevOps的工具支持方案,我也会说,以上几部分,构成了DevOps的工具支持方案…… 名字是次要的,关键是帮上广大研发同学的忙,高效且稳妥的开发和发布。

这节课只是概要介绍。更多内容,阿里内部的童鞋可参考老A小谈的玩儿转项目环境这场,或文字版开发如何玩转Aone项目环境。

备注:外部的童鞋可以使用Aone的云上版本云效,体验一个阿里技术人工作的一天!

end

支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos

一位程序员的阿里面试之路

阿里云技术专家仲肥:了解并使用Redis 4.0

由浅入深:教你如何构建一个行人目标检测模型(Python)

更多精彩

阿里巴巴内训讲师分享:阿里技术人的第一节课相关推荐

  1. 阿里技术人的第一节课

    为什么80%的码农都做不了架构师?>>>    摘要: 本期的分享我们邀请到了阿里巴巴研发效能事业部的董越老师,他是阿里巴巴内部培训百年技术课堂的著名讲师,他讲的<百技课程-代 ...

  2. 阿里合伙人范禹:常挂在阿里技术人嘴边的四句土话

    "橙长一刻" 分享阿里人的成长故事 「橙长一刻」第 9 期,本期分享嘉宾是阿里合伙人范禹,在阿里内网同学们给他贴的标签是"最帅的技术讲师".从技术程序员到阿里合 ...

  3. 多隆:从工程师到阿里合伙人 | 阿里技术人纪录片

    相关阅读: 最近租房有点烦!技术人如何用Python找到称心如意的"小窝"? 阿里传奇工程师多隆的程序世界 互联网技术(java框架.分布式.集群)干货视频大全,不看后悔!(免费下 ...

  4. 多隆:从工程师到合伙人 | 阿里技术人纪录片

    你简单,世界就会跟着简单. 冬意深浓之际,我们一起走进阿里合伙人多隆的技术世界. http://v.youku.com/v_show/id_XMzE5MDUxNzYzMg==.html?spm=a2h ...

  5. 阿里技术人的成长路径是什么?

    作者 | 儒枭 来源 | 阿里巴巴中间件(ID:Aliware_2018) 为什么要成长 成长是为了在职场升值,提升职场竞争力! 衡量标准:你成长的速度要匹配甚至超越业务发展的速度. 当你成长速度超越 ...

  6. Alibaba官方发文:阿里技术人的成长路径与方法论

    简介:   有一句诗词说:宠辱不惊,看庭前花开花落:去留无意,望天上云卷云舒.其实就是讲内心修炼到了一种心境平和,淡泊自然的境界. 为什么要成长 成长是为了在职场升值,提升职场竞争力! **衡量标准: ...

  7. 2021阿里技术人的成长路径!

    为什么要成长 成长是为了在职场升值,提升职场竞争力! 衡量标准:你成长的速度要匹配甚至超越业务发展的速度. 当你成长速度超越业务发展速度的时候,组织才会把更重要的职责交给你,如果你成长的速度跟不上业务 ...

  8. 阿里技术人分享的三本书豆瓣评分8.5分,让你的架构思维略窥门径

    又逢"金九银十",年轻的毕业生们满怀希望与忐忑,去寻找.竞争一个工作机会.已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇.更大的平台. 然而,面试人群众多,技术 ...

  9. 阿里巴巴2017实习面试分享(技术三面+HR面)

    前言 楼主投递的岗位是"研发工程师JAVA",面试期间处于研一阶段,且走的内推,这里建议小伙伴们也尽量走内推,因为几率确实会大很多,毕竟笔试对于很多同学来说真的是不小的一个挑战. ...

最新文章

  1. 数字图像处理必备基本知识
  2. Jpcap过滤GTunnel程序数据包
  3. 药企信息化项目必经的三步走
  4. 功能式Python中的探索性数据分析
  5. java db类_Java-jdbc-DBUtils工具类介绍
  6. CentOS 6.8 上 MySQL-server 数据库安装失败
  7. 还分不清芯片封装?给你整理好了常用的IC封装,点击收藏!
  8. VS2013 MFC基于对话框编程(创建工程)
  9. 《Access 2007开发指南(修订版)》一一1.11 额外的提示和技巧
  10. 读书 | IT人如何直击本质洞察底层逻辑?
  11. 我在美团的八年,技术人必读
  12. 秒杀系统架构分析与实战(14155字,26图)
  13. 我的世界服务器权限组权限修改器,我的世界op权限组指令是什么 op权限组指令汇总...
  14. 使用Stream生成菜单、地区树
  15. Prometheus配合 alertmanager 使用企业微信告警(坑已平!!!)
  16. PS羽化N个像素后填充淡绿色
  17. MySQL 日志的类型
  18. 笔记本光驱未连接在计算机上,笔记本电脑光驱,详细教您笔记本光驱怎么打开...
  19. QPushButton QTableWidget QComBox属性设置
  20. springcloud官方文档,中英文双版

热门文章

  1. 【算法】热度排行算法
  2. 一位ACMer过来人的心得
  3. idea快捷键设置相关问题
  4. 销售员有什么途径可以快速找到客户资源?
  5. 华为鸿蒙系统支持的手机有哪些,华为目前可使用鸿蒙系统的手机有哪些 支持华为鸿蒙系统手机型号列表...
  6. MBR分区和GPT、NTFS和FAT32、UEFI引导
  7. 手持端PDA车牌识别APP技术
  8. Shiro框架的简介
  9. 互联网电视牌照商科普知识
  10. win10蓝牙打开,疯狂弹出未连接的设备