大家下午好!我的介绍分为两大块,第一,软件产业现状,它的发展趋势以及软件交付挑战。第二,如何利用软件开发云实现DevOps转型。软件产业目前受到哪些挑战?第一,软件企业竞争已经从单一产品竞争变成生态联盟竞争,软件需求方和提供方他们之间需要做更好的协作,以便于我把握需求、质量以及风险把控,他们需要有统一的联系平台。同样软件提供方之间也需要做相应的配合,共同开发一个产品。另外软件园区以及孵化器正在向服务转型,整合软件园的优势,并且给企业提供研发架构、工具等经验,他们需要一个通用的平台。还有是我们高校以及培训机构,他与产业需求密切相关,他需要培养符合产业需求以及具备工程化实战能力的人才,所以他需要有一个公共平台来做支撑。
讲到软件交付本身,它也是来自对于市场协作开放更安全多层挑战,市场本身目前竞争越来越激烈,导致我们的产品整个时间窗口越来越窄,这就意味着我们需求发布以及它的迭代周期更短,我们需要可能一天要发布好几次,这样必须通过某种方法,通过迭代的方法,敏捷的方法,把需求快速推出去。同时我们必须具备持续的创新能力,把你的各种想法转变成产品。第二,我们整个团队如果是跨地域的话,比如跨各个国家,各个地区,跨团队,他们的一些特点,整个基础架构,整个开发员可能也不一样,包括使用的工具可能是一个团队一个工具,这样工具部署和维护成本就更大。团队之间跨地域,为了实现良好的生态,他们必须做一些平台开放,开放就必须把他的平台进行对接,实现交互,交互就是数据在传输和存储方面,考虑到安全可靠性的要求,特别是企业交互本身带来的挑战。目前还有一个挑战是,目前比较火的社交、云计算、大数据、人工智能,这些带来的一些跨界的融合,以及颠覆性的创新,其实就是以云计算为中心,产生出来一些新的业态,比如说最近一些年共享单车就把黑车干趴了,这就是整个业界新的业态,我们必须做快速持续的创新能力,这个创新能力必须是轻资产,以及智能高效的云平台,我们必须要快,而且要有一定的创新能力,我们现在推出的都是一些比较有创新能力的,大众比较需求的,所以你不能把整个精力集中在你去搭一个智能化平台,可能我们团队进来一个人,你搭一个智能高效平台可能时间窗就错过了,所以必须要有这种平台,这种平台跟云比较相关的,基本上我们都是基于云搭的。那么云是什么?云是软件承载的方式,大量的软件以SaaS的方式搭在云当中,之前也有机构预测到2020年,云计算将成为最主流的IT形态。现在我们做一个产品,先做一个云化版本,也就是SaaS版本,然后做一些定制的,它肯定会选择两种方式,先提供云化版本,同时提供商业版,可以定制。2019年的时候有可能转向只提供云化版本,不提供商业的。系统架构需要在云上面承载你的业务,从系统架构层面现在提出Cloudonly,它有三点,第一,你必须是微服务化的。第二,必须在容器里面的。第三,要持续登录。符合这三点就可以称为你的应用是cloudonly。
那么什么是DevOps?我们在2015年的时候,整个DevOps处于技术发展的高点,所以整个业内都在实践DevOps,有机构统计,而且企业IT服务绩效和DevOps实践有明显的正相关,部署效率快20倍,变更失败率低于50%。DevOps是聚焦于快速高质量的,将产品最终交付给客户,简单来说就是又快又好。DevOps有三个维度,第一,你要有一个文化,你的企业文化基因是什么样的,团队和团队之间的关系,是互相信任还是互相排斥,还是互相扯皮的,这都是一个组织文化需要做的互相信任和互相分享的文化。第二,你做DevOps必须要有一个方法论的支撑,具体你要做的时候必须有一个工具来落地,所以就讲到三个维度,五个要素就是文化、自动化、度量、共享、精密。比如像我们到饭店里点餐,一般是叫服务员点餐,我们念一遍他记一遍,但是有可能会记错。这样就涉及到精密,桌上有一个二维码,你扫描以后点餐直接确认,点完餐之后信息会传递给服务员,服务员和厨师都会看到,这样实现信息共享,整个信息会流传到团队里面去,自动化就是点餐之后到上菜有一个流程就是自动化。度量作为消费者就是在桌上摆一个沙漏,对于用户是度量。那么对于后台怎么度量,对于后台必须要计算每个桌的菜,比如这桌还差几个菜,这个桌的客人走了没有,这些事情都可以做度量。DevOps关键模式和实践,肯定人是第一要素,人怎么做呢?人就是团队,团队怎么组织?第一我们是组建全栈工程师和运维团队。团队我们讲到一个康维定律,意思就是技术架构的组织,它产生的技术和架构等价于这个组织的一些沟通结构。我理解他的意思是整个团队组织决定技术架构,你有什么样的团队组织,能够决定你的业务架构最终会产生什么样。在流程方面,比如以最小、可行的产品,我们要把这个产品拆得足够细,我们做一些迭代,做一些测试驱动,包括文化,公司做大了必须要有一些文化来支撑整个公司。最后一个是技术,技术涉及到哪方面?就是开发者要开发一个产品,他需要有一些自服务,我开发一个产品我需要什么我自己来创造出来,那他怎么创造?比如云需要一些计算资源,存储资源,我可以在这个平台进行申请,原来我们申请可能像运维申请机器,找一堆的文件审批,开发者能够做到我需要的时候我自己申请,自己在平台能够操作。那么资源有了,怎么做开发呢?你需要一个工具链支撑,工具链就是我们从开发,从编码,从需求开始到开发,到部署、测试、发布、监控,这是一整个工具链,那工具链怎么去选,这就是一个问题。
讲到工具链,这个图大家可能看过,这么多工具链DevOps归类为十五类,有120种工具,所以我们要集成一个工具链,这个图我们怎么选,我们有几个维度可以选,我们是选开源还是商业的。比如配置管理,还有发布管理,有容器,有Docker,这些你怎么选,是选商业还是开源的,如果商业和开源定好以后你需要哪些工具,商业的意味着你不能定制,如果那些工具不能满足你的需求怎么办?一般我们是选择用开源来做。还有工具集成怎么办?它们的权限不一致,它们的用户体系也不一样,怎么做集成?甚至这些工具部署和维护谁来做?如果有一些新的特性,你怎么去覆盖?什么策略?这些都是我们要去考虑的一个问题。这些问题就衍生出我们的开发云,它是一站式云研发平台,它是集华为研发实践,先进的研发工具为一体的研发开发平台。我们不用选择那么多工具,就已经提供了端到端的工具链,它主要支撑外部开发以及微服务开发,以及应用开发,它提供八大服务,比如项目管理,配置管理,代码管理,测试,部署,发布等等服务。它的理念是什么?它的理念就是我们要做一些云端开发,一切研发活动都在云上,比如你编一个硬件资源不够,它会自动帮你申请,同时会提供一些社交化协作,它的实时交付,开发测试,运维也可以做跨地域协同,整个软件开发云是基于华为企业云,搭载了企业云的一些数据,你可以做跨地域的协作,做快速交互,快速反馈。同时生产开发都是在一个云上,这样就避免了环境不一致造成的问题。然后生命周期,我们提供端到端的工具服务,以及企业比较关注的敏捷和精密都集成了。工具和工具之间并不是孤立的,集成工具链必须把工具底层数据全部打通,这就比较复杂了,开源都是各自为政,如果全部打通,必须基于开源做很多的开发,所以华为软件开发云支持服务之间的数据打通。
这是整个华为的技术架构,上面是SaaS层的,它是基于华为企业云,搭载在华为企业云上面,开发者在上面开发,开发环境、测试环境都部署在云上面。一个开发者工具链有了,你需要的资源都可以在华为开发云上面做申请,这是整个华为企业云的架构。讲到华为开发云不仅提供了工具连,还提供了联手合作伙伴的开放的研发生态,它的整个合作伙伴分类,我们提供一种对接接入的方法,SV可以自己开发一些工具,把这些工具集成、接入到软件开发云。另外集成商可以自己集成软件开发云服务,并且自己对外销售。底层是软件开发云,上面是自己包装的产品。另外是分销商帮助华为企业云做销售,另外是我们咨询培训商,我们会提供后台培训和认证体系,对合作伙伴进行培训和认证。另外是技术支持,如果用户想把这些应用迁到华为企业云上面,利用我们的软件开发云,我们会提供相应的技术支撑。
这是整个华为开发云在DevOps工具链上的实现,第一个是在开发的时候,你的需求也一并纳入到项目管理里,项目管理提供了算法、研发协同以及文档管理。第二是编码,我们提供了安全加密做一些改造,对于安全是特别有保障的。而且我们提供的CloudID,可以在云上面直接做研发,不用客户端做研发。第三,编码之后我们要编构建,它支持多语言的运行,包括技术并行的加速,而且底层是弹性的,你编一些东西之后它会自动进行弹性伸缩。之后它可以把你的包存储到仓库里,下一步是做一些测试,测试我们现在有测试运维管理,管理大家比较理解,我们有华为管理系统。还提供了API测试,甚至还有压力测试,还有移动测试,移动测试可能大家最需要,比如一些移动端开发,华为云开发提供了两百款手机,你可以在上面测试APK兼容性。然后是发布,发布是你的发布仓库。部署,可以支持虚拟机和容器的部署,以及它的环境管理。甚至你可以把自己的虚拟机纳入进来管理,我们就可以帮你把你的应用布到虚拟机和自己的环境里面去。还有运维和运营,我们主要借助华为企业云的集成来做监控、度量和反馈,利用大数据能够帮助你反馈你的应用,在云上面的问题,包括研发环节。比如你的包太大了等等问题,可以帮助用户更好地研发它的产品。还有一些定制等等,这些都是华为开发云提供的能力。
这些工具我们有单独工具,并且把它做云化的服务,它的内部不是单机,是整个集群,能够跨华为企业云在中国多地域的架构,它的端和端之间,工具和工具之间是互相联动的,包括底层数据是互相打通的。包括权限,包括用户体系都是打通的,所以用户在选择的时候就不会出现那么多的问题。
最后结合两个图讲一下,这个图在华为企业云上面都可以看到,第一个是我们支持项目管理,你可以在上面随便画,你的一些需求和迭代都可以往上面填。下面这个是一个真实的流水线,首先你要建一个流水线,在流水线上面添加你的任务,添加的任务就是编码任务,构建任务,测试任务,部署,发布。把这些任务都挂接到流水线里面去,流水线就可以跑起来。而且流水线提供了各种各样的能力,包括第一步是编码,第二步编构建,以及内生生长等等,你可以把你的每一步,比如第一步部署完之后,可以做集成化测试,最后就你迁移到下一个环境之前有一个门禁,这个门禁就是相当于一个测试报告,你符合什么条件,比如你的CI值,Bug率不低于多少,才能允许你往下一个阶段迁移,你可以设自动的,自动的不管你测试是否失败,我可以往下一个环境迁移,我可以允许你往下一个环境,也可以做一些手动的,比如你自己决定往那边迁,甚至可以做一些自动化设置门禁,这些门禁你可以从项目管理里,这个门禁和项目管理数据是相通的,项目管理能够读出来你的需求做完没有,你的运力都测完没有。通过这些来做门禁,还有是可以做一些运行任务,你自己可以做一些平台。流水线大家有兴趣的话,可以到我们的网站上查询相关信息,谢谢大家!