nearnie 2018-11-05
今天分享的主题是《一站式软件交付:世界五百强企业的DevOps转型之道》,会讲到国内外的一些大型企业是怎么实现DevOps落地的,以及企业决策者通常会关注哪些DevOps带来的收益。
众所周知,敏捷开发带来的是持续测试的能力,是把开发和测试的团队合在一起,实现一些持续测试。 DevOps目前主要做的事情是实现持续部署、持续交付,现在可以用一些灰度发布、金丝雀发布去做小规模的发布,但只是发布应用到某一部分的集群。
就像谷歌所做的,比如Google地图现在想发布某个新功能,会先在公司内部发布或者是做一个小规模的发布,后面再做一些对外的发布,这是DevOps带来的一个好处。
此外,DevOps还需要一些工具去实现。在构建方面,我们看到互联网公司里80%都在用Jenkins,因为Jenkins做实时构建、实时编译,平台本身是非常开放的,也有很多的插件可以支持单元测试、性能测试 。如果用付费版的软件,国外有一些做容器编译的比如 CircleCI 等。在测试环节,很多工具都是免费的,比如 Junit、Jmeter等。在部署方面,国内外主要是Ansible和Saltstack这两个用得最多。
全球范围内哪些公司做DevOps最超前?
谷歌云每周20亿次变更,都是用Kubernetes;可以认为Netflix是最超前做DevOps的公司,大家可能有看过《纸牌屋》,一个比较敏感的美剧,但Netflix不仅是拍美剧了,还占有全国60%的带宽,很多人坐沙发上看电影,在国外都是用Netflix。
还有甲骨文和思科,他们都做了一个一站式交付平台,封装了Jenkins、JFrog、Sonar 等测试工具去做统一的测试与部署,他们是属于大规模的DevOps。国内的腾讯和阿里,腾讯至少有两个团队在做相关的事情,一个是在做集中式的DevOps平台,另一个是负责蓝鲸,蓝鲸是一个非常强大的自动化运维工具平台。阿里巴巴在杭州有一个团队在打造阿里内部的平台- AOne,阿里的很多业务已经迁移到他们的平台上去做一站式的测试和部署。还有华为,我们知道至少有两个团队在做公司内部的DevOps交付平台,这也是特别超前的,做得效果也很不错。
下面是今天分享的重点,主要跟大家分享一些上述这些公司是如何超前地做DevOps,他们用了哪些工具,怎么评估团队,怎么说服领导,如何做一个自助式的DevOps平台 。
第一,自助式DevOps
就是在每个阶段要评估最好的工具,这里以腾讯为例,腾讯在前面做构建时,大部分是用Git,然后用Jenkins去构建,用容器的环境去跑构建的任务,比如说一个Jenkins任务跑到一个容器里面,构建完了,就可以很好地收集一些资源。而测试工具,值得一提的是SonarCube。SonarCube做单码扫描,它也是被用得比较多,像滴滴、百度、阿里等这些大互联网公司都在用。中间工件管理部分也是比较关键的,包括你的数据管理在每个阶段从提交代码一直到构建、测试,发布到什么环境,都是存在一个地方,所有的数据和包都是存在JFrog Artifactory里面,都要通过各自公司内部的标准区做流水线。最后部署和评估,很多公司在评估他们的DevOps数据,这个月和上个月底相比,发布到底有没有变得更加高效,我的测试突破率有没有比之前快。上图中提到的是我们评估用得最多的一些工具,当然每个阶段还有更多别的工具。
第二,自定义流水线
不管是用Jenkins或者别的工具,都要把一些可重复使用的阶段,比如测试、部署放在一个模块化的CI流水线里面, 开发者就可以自己上线,自己发布。现在一些大企业的团队就是自己上线、自己发布,他们采取微服务架构,不设定有变更日,随时都可以独立发布自己的模块,不用要协同所有模块一起。大家可以尝试 Jenkins Pipeline 这个插件,是开源免费的。
在这个例子里面,做Maven 构建,然后搭建一个镜像,用镜像做一些测试,部署到测试环境里,那么做完各种自动化测试之后,就可以部署到生产环境。一些金融公司是要有一个员工审核的过程,也可以放在开发里面,开发可以发邮件、发短信等。
记录生命周期元数据
这个过程会产生很多数据,每一步关键的数据都需要存在统一的地方,叫元数据。Jenkins和JFrog目前世界五百强里面大部分的企业都在用,JFrog有一个插件在Jenkins里面,安装之后,在构建时就可以把你的测试通过率,还有SonarCube的地址、部署的结果,以及你当时部署了什么机器,都跟构建包进行绑定,所以现在你公司内部所有的工件,不管是什么语言(可以看到图中左手边各个语言的包),都要根据DevOps团队的一个规范和标准去上线,如果这个包没有所有的元数据,没有所有的测试结果,而且没有这个QA,这个包就不能上线。这就等于在公司内部设置了一个质量关卡, 从开发、构建、测试到部署所有阶段的关键信息都是要放在一个地方才能实现流程的决策自动化。
制定软件交付质量关卡
质量关卡是一个比较老的概念,Jenkins和JFrog是怎么参与到这个过程中的呢?答案是用自动化测试供,通过把测试结果和这个包绑定,如果想要把发布的包从开发环境升级到测试环境,再到部署环境,必须得收集到特定的元数据才可以到下一个阶段,这个叫质量关卡,很多大企业现在就是用的这个标准,即如果我的 Released包没有具备所有的测试信息,流水线不会让它到部署到我的生产环境,这个主要是去保证软件的质量,正如之前讲的“快速失败”,如果把一些自动化测试、继承测试放在一个早一点的阶段,就可以避免浪费很多的时间。
第三,智能查询
最后,你需要一个智能的查询能力,去找到公司内部的好几万个包,像思科、华为都有几十亿个包,不是最新的版本,而是经过测试且单元测试通过率为100%、漏洞扫描已经通过的包,可以自动地将它部署到生产环境。像思科、甲骨文他们会做一些自动的清理,比如说有一个包在半年之内没有被下载,它会自动去做删除,所以如果你们存储的成本越来越高,也肯定要评估怎么做一次自动化的清理。同样是做一个环节再做下一个环节,所以可以用AQL这样一个工具去做,很多大企业也是这么实现的。
现在国内外都有一个非常大的趋势,就是说公司到了一定的规模,都要开始封装自己的DevOps 平台,不然很难让一个小而传统的团队去上持续自动化交付,通常我们需要花钱找一个敏捷教练在公司里面讲PPT,让他们快速用这个工具。互联网公司的做法是自己封装一个DevOps 平台,对接底层工具平台,比如Sonar、K8S、Jenkins,实现统一的资源申请,这样的好处是每个团队的交付流程一致,能够在公司内部实现持续交付的标准,研发团队也不用维护底层的各种工具链。
1.Netflix
第一个例子是Netflix。Netflix在开源社区是一个非常大的贡献者,他们开发了很多开源工具去做部署、打包等各种功能。 其中有一个做混合云环境部署的工具叫 Spinnaker,Spinnaker是Netflix在的一个开源的项目,能够实现跨云平台的部署任务的编排。现在Netflix使用Spinnaker每天发布4000次变更到亚马逊的机器上。谷歌云也在用Spinnaker去做部署。他们构建时也是用Jenkins,其中有一个过程叫bake,bake是把应用打包成一个镜像,然后把这个镜像用deploy去做部署。Netflix的DevOps实践非常值得关注,他们也有很多项目和开源工具都值得一看。
2.Oracle
第二个例子是甲骨文,我们都知道甲骨文是做数据库的,但它同时也是一个非常大型企业级软件公司,他们现在是4万开发者的规模,之前有很多传统的应用,也有非常大的部署。甲骨文内部也有很丰富的容器云实践经验,到去年年底,他们每天有150万次Docker并发请求,这是比较酷的。
复杂交付流水线
这是甲骨文之前一个很大的痛点,他们的流水线非常复杂,有很多并发的任务,特别是他们的测试方案,要花很多的时间,比如说某一个任务需要两个多小时去做,如果现在每个开发者都提交代码,都在位置上等两三个小时,然后再把4万开发者乘以两个小时,这样算下来一年要多少钱?所以肯定要开始优化这个过程,因此他们需要一个可视化的工具,去知道哪个步骤是最好的时间,然后去看哪一步、哪一个任务怎么优化,是不是要做一些性能测试的优化。
DevOps平台内部扩容
甲骨文是 JFrog Artifactory 的早期用户,在2013年-2015年间,他们某一个研发中心某一个仓库的数据,一年半之内从17TB涨到了70多TB,这还只是其中一个研发中心(甲骨文有6个研发中心),当数据达到70多TB时,他们开始做一些自动化的删除,前面也讲过了一个规范,如果包在半年之内没有被用到、没有被下载,这个包就会被删掉,都会用这个去做。
3.ING
第三个例子是ING。ING是全球金融巨头,虽然中国的银行在全球十大银行里面占了6个,但ING在国外算是比较大规模的了,去年超过1000亿收入的规模,也有全球的研发中心。现在他们要面对国内很多金融公司要面对的事情,就是怎么从传统的开发模式变成一个超前的DevOps模式。
ING持续集成
之前ING 公司 IT 部门有1000多个团队,每个团队都有自己的上线流程,每个团队都在重复踩坑,开发重复的功能来支持上线。所以ING为公司所有IT部门搭建了统一持续交付流水线,让公司所有团队都受益,也叫作”CDaaS”,提供端到端的上线服务。
ING持续交付
部署工具支持Ansible、Puppet、XL Deploy、Nolio、Chef等多种部署工具,这些工具在分发包之前都从 JFrog Artifactory去获取包的对应版本。
ING多语言开发
部署的话,他们也能部署到多个工具,比如Artifactory,因为不同的研发中心,不同的团队,不同的工具都要去做部署。所以这个平台得非常灵活,能够支持很多团队的工作。他们也是多元的,有Maven、Docker、NPM等,他们都要开始管理。
ING自定义流水线
他们的目的是最终实现600个团队的支持,一个自定义的流水线,从拉源码开始,然后做一些测试,把包放到Artifactory,他们用一些付费的工具去做部署,测试也很多跑在Docker容器里面。ING提供的统一交付平台对接了很多工具,覆盖了代码管理、构建管理、工件管理、部署管理、环境管理等上线所需的功能,为ING的内部 IT 团队提供了可靠的交付流水线。
ING高可用容灾
金融行业比较关注的是高可用的容灾,这些包肯定要用容灾的,那么可以做高可用的包管理,也可以用多个节点去做分流。例如华为,在深圳有七个 Artifactory的节点,因为他们要进行几万开发团队的并行上传、下载,是非常高的并发构建。
上面主要解释了Netflix、Oracle、ING是怎么去做devops的,给大家在研究devops的时候提供一个方向,有兴趣的朋友可以看下思科、JFrog是怎么去做devops的,都是在devops做的比较成功的。
后面会分享更多关于devops的内容,感兴趣的朋友可以关注下~