分享实录 | 阿里巴巴DevOps文化浅谈

00主讲人简介900-500.png

【如下内容为分享实录,有删节】算法

DevOps发展的三个阶段docker

首先咱们简单看一下什么是DevOps,这个词从何而来。我在这里把DevOps发展历史分为三个阶段:诞生期、定义期和落地期。数据库

阿里巴巴DevOps文化浅谈01.png

DevOps的“祖师爷”是比利时一名独立IT咨询师Patrick Debois。2007年,他负责一个大型项目的测试和验证工做,一边和开发对接测试代码,一边和运维对接“发版”。他发现项目组里的开发和运维两个角色的思惟方式差别巨大,一边但愿“快快快”,一边但愿“稳稳稳”,这让他有点崩溃。编程

在2008 Agile Conference大会上,Patrick遇到了Andrew,两我的一拍即合,开始琢磨如何改变这种Dev和Ops水火不容的现状。浏览器

2009 年 10月,Patrick 经过 Twitter 召集开发工程师和运维工程师在比利时根特市举办了首届“DevOpsDays”大会,开始大规模讨论Dev和Ops的协做话题。后来为了便于传播“DevOpsDays”被缩写为“DevOps”。安全

在2009年之后,DevOps开始火遍全球。2010 年,The Agile Admin博客发表文章《What is DevOps 》 ,详细阐述了DevOps的定义,包括一系列价值观、原则、方法、实践以及对应的工具。架构

一样是2010 年,《持续交付》的做者Jez Humble出席第二届的 DevOpsDays 大会,并作了 “持续交付”的演讲。这是很是重要的里程碑,能够说《持续交付》这本书就是DevOps的最佳实践,以致于国内搞研发效能的同窗人手一本。也正是这本书,加速了业界对DevOps的理解以及落地。less

但我认为业界真正开始大规模落地DevOps,仍是不能离开容器化技术的功劳。“Docker”起到了决定性做用,经过编写Dockerfile,第一次可让开发者轻松定义软件运行环境,而且能经过CI/CD标准化流程去交付它。不过这么多容器运维起来仍然麻烦,因而google在2014年开源“k8s”(Kubernetes);2015年CNCF(Cloud Native Computing Foundation 云原生计算基金会)成立,正式将“k8s”做为核心,创建了一个巨大的生态系统。有了“docker”和“k8s”技术上助力,加速了开发和运维角色的融合,因而DevOps再也不是空中楼阁。运维

我距离DevOps有多远分布式

回顾完历史,咱们对照下自身,经过三个小问题来看看本身的团队是否是已是“DevOps”了。
一、我每次写完代码均可以部署生产环境,不须要别人帮助。
二、有不少监控、运维工具能够任我使用,轻松处理线上各类问题和故障。
三、我直接为线上用户的体验负责,无论是代码缺陷仍是运维故障,本身搞的本身背锅。

以上我三个问题,其实分别涉及到了DevOps最重要的三个方面,作法、工具、文化,这三者缺一不可。

什么是好的DevOps团队

阿里巴巴DevOps文化浅谈02.png

什么是高效能研发团队呢?咱们能够参考《2018 DevOps现状报告》里这张表格:能作到每小时1次或者天天1次部署,1天或1周可以上线1个版本,服务恢复时间小于1天,变动失败率小于15%。不过这个数字其实并很差看,以咱们本身举例,阿里巴巴研发平台团队,能够轻松作到1天屡次发布生产,可用性99.95%,变动失败率小于5%。

这些要求在阿里巴巴看起来稀疏日常,那阿里是怎么一步一步走过来的,咱们其余企业应该如何复制这些经验。让咱们进入下一节,阿里巴巴的DevOps文化落地要诀。

阿里巴巴DevOps的发展阶段

DevOps的发展永远离不开技术的变革,在2008年的时候,淘宝启动了服务化改造的历程,创造了Dubbo、Apache Alibaba RocketMQ、TDDL(Taobao Distributed Data Layer)等业界知名的中间件。同时淘宝的巨型应用被拆分,变成了下单、会员、优惠等一系列应用,而围绕各个子业务场景更是诞生了成百上千个前台应用。你们能够想象一下当时的开发是怎样的,每周一个固定发布窗口,几百位工程师在临近发布时提交代码、修改bug、提交测试。在发布日晚上开始按照顺序进行逐个发布,若是发布后出现重大bug,要么当场Hotfix(修补程序),要么回滚,宣告发布失败。全部人都被发布日搞的筋疲力尽。第一代自动化发布工具的出现,将发布能力交还给了开发者,同时也迫使开发者去解耦应用依赖,作到独立发布,业务交付速度获得了质的提高。后来你们给它起了一个名字,就是“微服务”。

没过两年,随着研发人员愈来愈多,出现了各类复杂研发规范、各类复杂脚本、各类 “挖坑”“踩坑”等状况,让研发工程师苦不堪言。“这一切必须规范起来”,2013年时咱们创建了统一构建部署平台,将阿里巴巴集团从代码变动到线上发布环节彻底统一块儿来,进行严管控。

阿里巴巴DevOps文化浅谈03.png

在2016年咱们又遇到了新问题,当时线上操做须要运维同窗统一来作,而运维同窗自然不想去作变动。能够理解,什么都不改的状况下服务是最稳定的。可这在某种程度上限制了开发者的创新,并且明确的职责分工也限制了开发者去关注本身应用的线上状态。这种状况,致使研发过程当中出现明显瓶颈,这也是为何阿里巴巴要作DevOps的根本缘由。随着“容器化”的浪潮来临,咱们研发平台再一次升级,将线上容器定义、运维监控责任所有交给了开发者,应用运维岗位不复存在。

而今天随着云原生技术的逐步成熟,上云已经变成企业标配,围绕云原生去定义下一代研发平台成为必然。

综上,技术的推进、组织的变化和研发工具的建设,这三者的有机结合才促成了咱们阿里巴巴DevOps一步步走向成熟。

阿里巴巴DevOps落地的工具

前面介绍了宏观上技术和平台的发展,具体来看有如下几个工具对阿里巴巴DevOps落地以及研发效能提高发挥了重大做用。

首先是DevOps平台“云效”,你们常见的开源软件Gitlab、Jenkins、Jira这些平台也曾经是阿里巴巴的一个选择,可是后来咱们发现,纯工具类型的软件只能解决一些单点自动化问题,好比代码管理、构建打包等等。其实在实际开发过程当中还有不少工做没法自动化,好比需求流转的规则,分支管理的规则,开发、测试、运维沟通的模式等。这些工做咱们能够统称为“协做”。

要作好“协做能力”须要的是对人和流程以及效率有深入的理解,而且将这些理解抽象成方法,最终作成产品。阿里巴巴经过数年积累,产出了众多独特的研发管理方法,好比Aone-flow代码管理模式、测试环境管理模式、 AGit-Flow代码管理模式、双十一分层项目管理模式等等。咱们把这些研发管理方法都落地在云效平台上,最后做用在人身上,潜移默化的影响着开发者协做的文化,也能够说是DevOps文化。

阿里巴巴DevOps文化浅谈04.png

第二个是流量回放测试技术。这项技术的创新给测试团队带来了很大影响,经过线上流量复制到线下,低成本的解决了测试回归的问题,将传统经过编写用例进行测试,简化为编排数据进行测试。第二层是Mock技术的应用,将一个分布式系统问题,转化为单机问题,能够在几秒钟完成上千个用例运行。有了这两个基础技术后,在上层能够发展测试平台,经过算法的手段去识别有效流量,去自动化处理数据,去识别异常流量背后的缺陷。经过这三层面的变革,能够说让阿里巴巴测试效率有了质的变化。

第三个是全链路压测技术(对应阿里云上的产品叫PTS)。双11你们之因此能放心剁手,一年比一年顺滑,核心就是这项技术在每次大促前帮助开发者发现风险。发现之后就须要快速的响应,经过DevOps工具去解决线上问题。每次压测都是一次练兵,有点相似于军事演习,快速发现问题,快速解决,不断锤炼团队DevOps能力,也能够这样说阿里巴巴的DevOps能力正是一次一次“双11”给练出来的。

阿里巴巴DevOps核心理念:松管控和强卡点

当开发开始定义运维,接手运维的时候。咱们管理者会不会有些担心,好比会不会开发任意操做致使线上故障,随意发布致使稳定性问题等等。

阿里巴巴DevOps有一个核心理念是松管控和强卡点。
阿里巴巴DevOps文化浅谈05.png

先看“松”在哪里?“松”是指咱们有多种流水线能够供开发选择,应用Owner能够完整定义这个应用的各类规则,好比如何发布,如何测试,如何进行资源、环境配置等。咱们有通用构建和自定义构建,能够给用户最大自由度。最后是“轻发布,重恢复”。在每个应用维度,开发能够随时使用流水线来交付代码,而并不须要特别的限制,仅仅须要思考的是若是出问题,咱们应该如何快速恢复。

在足够的自由度下,咱们必需要设置一些“卡点”。好比代码审核和质量红线;代码安全检查、规约检查;发布、封网窗口等。还有所谓“变动三板斧”:可灰度、可监控、可回滚。这些卡点是为了保障阿里巴巴集团全部开发工程师步调统一,交付合格的产品。

总结:DevOps核心是快速交付价值,给与开发最大自由度,负责开发和运维所有过程。在监控、故障防控工具,功能开关的配合下,能够在保障用户体验和快速交付价值之间找到平衡点。

阿里巴巴DevOps核心理念:以应用为中心

阿里巴巴是怎样快速落地DevOps的?这里我要重点提的是:以应用为中心的DevOps理念。应用信息其实能够概括为CMDB中的一种数据。它对于研发人员自然是亲切的,它能够直接对应一个服务,一个代码库。以代码为起点,咱们又能够串联流水线、环境、测试、资源。最外围是工具链:监控、DB、运维、中间件等等。

阿里巴巴DevOps文化浅谈06.png

用应用串联整个工具链,可让开发人员很好的理解和打通DevOps总体过程。不会存在“开发说代码、服务,运维说机器、机房”,这种鸡同鸭讲的状况出现。

当工具经过应用打通后,开发人员就能够瓜熟蒂落的在平台上定义它的应用,同时也在定义运维规则。好比,规划环境、建立资源、设置发布策略等等,这些均可以由开发人员完成。

完成应用和运维定义后,“谁定义就要谁负责”,所以在阿里巴巴,开发人员须要为应用全生命周期负责。经过相似理念和运维工具自动化的推动,“Dev”潜移默化的接手了“Ops”的工做。这时,你会发现原来“DevOps”并无那么复杂。

享受DevOps红利,成为精英交付团队

经过咱们前面提到的阿里巴巴在实践中锤炼的DevOps工具,“松管控、强卡点”和“以应用为中心”的DevOps理念,阿里巴巴的DevOps得以落地,并获取实实在在的效率红利。它消除对我的的依赖,下降团队之间的损耗,下降测试成本提高质量,下降发布软件风险。最终加快企业创新速度,让阿里巴巴在一场一场机会中能够快速响应。

阿里巴巴DevOps文化浅谈07.png

上图是2018年咱们发布的一些数据,首次提出了“211” 概念:85%以上的需求能够在两周内交付;85%以上的需求能够在一周内开发完成;提交代码后能够在1小时内完成发布。我也建议你们可以以“211”来做为本身企业的效能目标,经过先进的DevOps工具、实践和文化,三管齐下,带来红利,而不要为了作而作。

云时代带来的新机会

经过前面对阿里巴巴DevOps发展的介绍,咱们不难发现这样一个循环:咱们在软件研发过程当中不断的遇到新的问题,从而催生出新的技术(好比微服务、容器化);而后新的技术又带来了架构的变革(好比服务化、技术中台);最终造成了软件研发的新模式。如今云原生技术来了,这项新技术能给咱们带来哪些机会呢?

云原生是什么?业界有各类各样的解读,有观点认为:彻底使用云来构建应用系统就是云原生。而从软件研发的角度来看,我认为云原生带来最大的变化是开发者仅需关注业务逻辑,从而带来极大地效能提高。这是怎么作到的呢?咱们对比下传统应用和云原生应用。

阿里巴巴DevOps文化浅谈08.png

在传统软件研发过程当中,开发者的代码会深度耦合中间件,须要关注服务发现、分库分表、消息处理等多方面。往下也一样须要关注软件部署在哪,须要多少容量,甚至还须要关注操做系统、存储等问题。

在云原生时代会很不同,中间件核心能力会下沉到云基础设施之中,一些常见的限流、降级、鉴权等能力都不须要关心了,数据库、运行环境等都是动态伸缩的,常见的运维问题也不须要关心。只须要开发好代码,经过软件交付平台自动化的发布到云端。

软件开发的复杂度其实不会消失,而是换一种方式存在。云原生技术下这种复杂度会下沉到云基础设施层,经过云去屏蔽这种复杂性。

那这种复杂性怎么解决,其中一个核心就是用数据去解决。在云原生下咱们拥有业界统一的技术标准,好比中间件标准、容器标准等。拥有规范的数据和强大的基础设施,也能够轻松获取到这些数据。有了这些数据,咱们就有机会去创造出各类智能工具,去解决咱们软件开发的复杂度,或者是经过工具帮助开发者工做,下降这种复杂度。

所以在云原生技术下,咱们拥有了史无前例的智能的机会和普惠的机会。

云原生时代影响开发者的三大技术体系

在云原生时代,我认为会有这三个技术会给开发者带全新的体验。分别是开发态的CloudIDE、运行态的Service Mesh、以及运维态的Serverless技术。CloudIDE将开发环境搬到了云上,并且能够和研发平台深度整合,为开发者提供极致的编程体验,不再用关心我在哪里开发,只要有浏览器,打开就能够编码。

阿里巴巴DevOps文化浅谈09.png

中间件在云时代会逐渐融入到Service Mesh技术下,服务路由、限流降级等开发者将再也不关心。

Serverless技术,让自动扩缩,容量评估变为历史,开发者不再关心机器在哪。

这三项技术将研发全链路云化,而且产生了大量研发数据、服务数据、运行时数据。阿里巴巴在最近几年已经开始投入这些数据的挖掘和研究工做,而且和学界保持着密切的合做关系。

阿里巴巴正在探索的数据应用方向

简单介绍一下咱们目前正在探索的数据应用方向:在代码方面,有代码推荐、智能代码评审、代码搜索和优质代码分享。在运维监控方面,咱们投入了智能基线,可以根据监控波动状况自动化报警,避免逐个配置规则。还有发布风险控制,经过识别变动先后监控异动来自动阻断发布过程。还有自动化配置的业务全景监控,全链路洞察业务稳定性等。

下面我会经过两个实例,深刻细节,谈一下咱们在数据应用方面取得的成果。

代码大数据的应用—PRECFIX缺陷监测技术

今年年初,PRECFIX代码缺陷检测技术(Patch Recommendation by Empirically Clustering)已经在阿里巴巴内部生产系统中上线,帮助开发者在代码评审时发现缺陷。
阿里巴巴DevOps文化浅谈10.png

智能化手段在缺陷检测领域应用主要有三个难点:1)在没有缺陷数据沉淀和公开数据集的状况下,如何标注数据?2)代码是重逻辑形式语言,如何去表征代码内容?3)如何经过非人工规则给出修复建议?

咱们具体的作法是这样的,首先经过数据挖掘手段标注疑似缺陷的commit,并提取相关统计特征进行学习,经过模型给出风险度评估。而后对缺陷commit的变动diff进行类似性代码聚类,找出工程师常犯的错误,以及工程师经常使用的修复手段。当再次发生相似错误时,就能够给与开发者相对应的修复补丁。

运行时大数据的应用—无人值守发布
阿里巴巴DevOps文化浅谈12.png

前面一个是“Dev”端的工具,下面介绍一个“Ops”端的工具:无人值守发布。

曾经,咱们对全部线上故障作了分析,发现80%的故障都是由“变动”引发的。这也说明若是你不作“变动”,基本上不太会发生故障。由于代码发布是线上变动的一个重要形式,因此要让系统稳定、持续不断地运行,就必须卡住发布这个口子。因而,咱们作了 “无人值守发布”这个工具,它能够收集包括系统数据、日志数据、业务数据等,并对各类指标作检查,经过算法对比发布先后的指标异动。一旦发现问题,就能够对发布过程进行阻断,甚至实现自动化回滚。有了这项技术,任何一个开发团队,均可以安全的作好发布工做,运维团队也没必要担忧由于频繁的线上变动而致使重大故障了。

阿里巴巴软件研发平台的将来:全新云效即将上市

综上所述,“云”和“数据”是咱们下一代软件研发平台最大的机会。这些数据智能工具虽好,但不能只给阿里巴巴来使用,更重要的是实现“云”的价值,也就是咱们讲的普惠计算的价值。

阿里巴巴DevOps文化浅谈13.png

所以今年咱们会在阿里云上推出全新的DevOps工具平台“阿里云·云效”,不但能够继续为你们提供企业级一站式DevOps能力,还会将云原生能力、智能化能力融入其中,最近咱们正在积极准备,敬请期待!有兴趣的开发者也能够在云效用户群(钉钉群号:23362009)中联系咱们,申请试用,谢谢你们。


【下期直播预告】
直播时间:4 月 10 日 19:00—20:00
直播主题:中小企业如何实如今家研发软件
直播简介:经过阿里云云效产品,演示多人多角色如何在线研发软件,包括持续集成、持续交付等过程
讲师介绍:焦霸,阿里巴巴研发协同平台持续交付负责人,长期投入在CI/CD、DevOps领域建设
观看方式:钉群直播(扫码加入钉钉群:23362009)


【关于云效】 云效,企业级一站式DevOps平台,源于阿里巴巴先进的研发理念和工程实践,致力于成为数字企业的研发效能引擎!云效提供从“需求 ->开发->测试->发布->运维->运营”端到端的在线协同服务和研发工具,经过人工智能、云原生技术的应用助力开发者提高研发效能,持续交付有效价值。

相关文章
相关标签/搜索