阿里技术人的第一节课,都上些什么?

从源码到上线数据库

事情可不简单tomcat

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

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

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

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

假定你不是在阿里巴巴,假定也没有阿里云,假定你只是有不少钱能够雇到合适的人,你想一想一共有多少事情要作?less

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

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

往细节看,其中更新某一台机器,其实都是个挺复杂的过程。首先下载新的war包到这台机器,而后开始替换过程。先得把流量切走,切流量前,还得先把监控报警关上。流量切走了,就能够中止当前war包的运行。而后用新的war包代替旧的war包,启动试试看。若是经过了一些基本的自动检测,说明新war包大致上能运行,因而就开始切流量回来,最后把监控报警恢复。性能

忒麻烦!!

还好有工具帮忙

怎么办?——用趁手的工具啊!正是为了提升你们的工做效率,让你们可以集中精力在具体业务自己的研发上,阿里巴巴集团多年以来建设了一整套基础设施。

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

注:本文说起的阿里内部产品叫Aone,Aone于2017年正式对外开放,改名为云效。

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

第一步,把运行环境初始化好。这一步目前同窗们基本能够在Aone上一站式完成了,就是在Aone上注册一个新应用,而后根据向导指引,把上线任务一项一项配下来。固然还有些内容好比数据库还须要访问其余系统申请配置,未来咱们努力作成一站式配置好。

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

clipboard.png

阿里巴巴相关术语

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

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

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

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

变动:在外面的世界,如今变动一般是指线上运行环境的变化,好比更新了软件版本,好比扩容、缩容等运维操做。在阿里巴巴,变动也有这个含义。可是在阿里巴巴,变动还有一个含义,软件研发过程当中的含义。一般咱们把一条feature分支就对应到一个变动。因而也常管这条feature分支叫变动分支。从这个角度看集成,就是把若干变动攒到一块儿,经过各类质量检测后,部署上线。

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

技术发展趋势

发布部署方面,在阿里巴巴,时下最重要的变革固然是Docker化。

那么这一波浪潮以后,下一波浪潮会是什么呢?有多是Serverless架构。这方面的文章也不少,你们能够翻翻看。

提升质量的多种方法

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

按四个象限梳理

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

clipboard.png

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

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

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

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

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

测试环境隔离技术

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

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

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

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

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

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

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

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

clipboard.png

阿里巴巴相关术语

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

平常环境:就是集成测试环境。把各个变动攒在一块儿,而后部署到这里,看是否是能work。

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

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

流水线

所谓流水线,通俗地讲就是把不一样的工做按必定顺序串起来。为何要串起来呢?

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

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

clipboard.png

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

结语

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

clipboard.png

这节课只是概要介绍。有须要的童鞋可使用Aone的对外版本云效,体验一位阿里技术人工做的一天。

本文做者:董越

阅读原文

本文来自云栖社区合做伙伴“阿里技术”,如需转载请联系原做者”。

相关文章
相关标签/搜索