喻勇:DaoCloud如何解放生产力

个人简介 喻勇,DaoCloud联合创始人。曾在VMware中国研发中心负责Cloud Foundry、大数据、软件定义存储等前沿产品在开发者、技术社区及战略合作伙伴的生态系统建设工作。在加入 VMware之前担任微软技术布道师和 IT 架构顾问,曾负责微软战略 ISV 的 Windows Azure PaaS 云计算平台搭建工作,对企业软件架构在云平台的设计、迁移、安全及云计算商业模式有较深入的研究。2015年从VMware离职创立DaoCloud,专注于企业级Docker容器云平台。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 各位InfoQ的网友大家好,现在我们是在QCon北京的现场,做客专访间的是DaoCloud联合创始人喻勇先生。我们首先想问的问题是,你能谈谈为什么选择创业之路呢?你现在创业,为什么选择在开源领域创业?或者说为什么选择Docker作为首选?

喻勇:InfoQ的朋友,大家好!我是喻勇,今天非常高兴接受记者采访。谈到我的创业之路,其实今年正好是我工作的第13个年头。我之前十几年的工作,最早是从微软开始的。在微软,我接触了Windows Server,然后做过Windows Azure,从企业的私有云场景做到公有云的PaaS平台。3年以前,我加入了VMware,做开源Cloud Foundry社区建设,包括开发者的市场。我个人的工作经历更多是偏向在大企业里面向整个用户群推广一些非常前沿的技术,比如说在2009年,微软跟一些大客户讲Windows,那个时候PaaS的概念刚刚兴起.2012年初加入WMware,我也是国内最早的一批接触开源领域里PaaS的,了解到非常新的一些理念。我觉得创业也是个水到渠成的事,因为我自己也接触了一些很多非常新颖的理念技术。随着这两年国内市场的发展,移动互联网的浪潮之下产生了越多越多的移动开发项目,面对互联网快速迭代场景下面新业务需求,可以通过云的方式,可以通过Docker的方式来满足未来市场上的一个增长点,我既看到了技术上的一个成熟趋势,也看到了一个高速增长,即将形成有一定的规模市场,技术成熟了,市场也好了,为什么不试一试呢?

   

2. 您现在已经不满足只是做一个布道士了,也想实践一把,是这意思对吧?

喻勇:回忆一下在VMWare的经历,我在VMWare工作了3年,帮助Vmware建设整个Cloud Foundry在中国生态系统,在我工作的几年中,经过我们自己亲自的扶持的很多基于PaaS的创业者都逐渐成长起来,那时我扮演了一个教练的脚色,也跟合作伙伴共同成长,一些国内比较领先的Cloud Foundry方面的创业公司发展的非常不错。我们选择走上创业之路,一方面是大环境的影响,另一方面就是我们对技术研究的越深入,对市场判断的越精准,越能从里面看到一些有能力去捕捉的机会。

   

3. 您是云计算里面的专家,想问一下您,云平台在进行业务迁移的过程中,通常面临的问题是什么,这在云计算的设计上有哪些要求?

喻勇:专家不敢当。过去几年的工作经验让我接触了大量公有云和私有云里的客户场景,那把时间线放的比较长一点来看,从今天这个点往前看5年,或者8年,当我们在谈云计算时,谈的最多的是虚拟化。在云计算的概念里面,虚拟化承担了两个非常主要的脚色,或者作用。第一个作用,它把物理化的资源,需要人为去获取的物理资源变得自动化。我要一个虚拟机,想要多大的,想要什么样的都可以很快获得,这是自动化的一个优势。第二个作用是,大家拿虚拟机做什么呢?作为应用的载体,虚拟机需要哲理,它需要把互相之间的运用之间不要产生影响,如果崩溃,不要去互相影响对方。所以虚拟机起到一个应用承载单元脚色。回到前面提的这个问题。我们再往后面看云计算发展的未来5年或者8年,作为资源承载的脚色,虚拟机已经做得非常好了。那么虚拟机在做应用载体时,它是不是很好的一个选择?我们以前做过很多项目,企业客户上了私有云,它有一个叫做P2P的过程,就是把原来装在物理机上的应用,整体搬迁到虚拟机里面去。这里的问题是底层的资源,应用从物理机迁移到虚拟机,本身并没有发生变化。这是一个非常显著问题,很多企业的决策者已经在思考了。做基础架构变迁,不仅仅是为了原封不动搬一个东西过来,而是为了应对移动互联网的新的趋势和挑战,为了让应用可以在互联网用户范围里做大规模弹性伸缩,基础架构要为了这个目标进行优化,应用也要为自己进行优化。企业的决策者在思考的问题是,我的应用怎么样从传统的这个分层的,或者是企业级应用转向互联网形式的应用。或者叫做Cloud Native Application,这个Cloud Native Application应用的架构、模式,运维方式需要变化。它对底层的基础架构也会有新的要求,这也是Docker最近会比较火的原因。虚拟机仍旧可以是一个很好的资源的承载者,但Docker是资源之上的应用的承载者,原来虚拟机扮演了两个脚色,现在这个脚色有一部分,由Docker来承担。或者说在Cloud Native Application的场景下,由Docker承担应用的载体会更理想,所以我们看到的趋势是,用户把应用向云上迁移的时候,很多比较失败的案例是原封不动地照搬上去。用户的项目结束以后,决策者会发现,搬完了之后,好像跟原来没有特别大的区别。或者对于企业战略来说,这东西搬完了,我业务还是这么做,没有明显的业务上的增长,或者战略上的提升。但如果将应用转型到Cloud Native Application,同时基础架构也随之跟上,那么这样的变革对企业应对未来几年移动互联网的挑战是很有价值的。我们从这个领域得到很多经验教训,或者说未来的企业决策者思考的一些方向。

   

4. DaoCloud是基于Go语言开发的,您能不能分享一下在开发过程中遇到的问题,或者说踩过的坑,有哪些建议给大家?

喻勇:我们团队现在还是个小型的团队,春节之后,大家陆陆续续开始做产品,迭代的速度也很快,Go语言我们非常喜欢。我们用的核心技术是Docker,Docker是用Go语言写的。之前我自己接触了很长时间Cloud Foundry,Cloud Founddry 从Ruby到Go有个转型的过程。Go的好处其实不用多讲,它在语法比较简单,处理大规模并发时,不需要考虑太多细节,很大程度上提高了开发效率,这些代码是要运行在云平台上的,同样的功能,用Java写,和用GO写,在云上持的资源是不一样的,性能是有影响的。Java只要开一个东西,可能500多兆内存就没了。Docker的大规模分布式平台在云上跑的时候,跑的其实是成本,我们对成本比较敏感,在这个方面,GO的轻量性是一个非常吸引人的地方。那谈到一些坑呢,我觉得,开发总是会遇到坑。拿GO语言来说,我们也遇到一点困难。在一开始的时候,Go在国内的一些编译,或者下载一些包镜像时,可能会出现网络延迟问题。但因为我们自己是用Docker的,所以要先用自己的工具来提高效率。我们在开发过程中,采用Docker的方式,把Go的代码去打包成Docker镜像,然后通过对Docker镜像的优化来提高Go的打包,或者说编译的速度。这里面我们做了很多优化工作。我们不是直接发布Go语言的Bannery,而是发布镜像,这大大提升了发布效率和编译效率,我们自己也是Docker 的Build Ship Run方便性的受益者。

   

5. 你们在官方刚刚推出了一个持续交付的云服务,这个服务实现的初衷是什么,实验过程是如何实现的?

喻勇:持续交付这个概念,或者说叫做快速迭代,它是最近这两年非常火热的一个概念,以前这种场景会更复杂一些,下面我从两个纬度来讲。一个是说,软件交付的生命周期,原来我在微软的时候,做一款Windows,从立项到发布,那可能需要3年,程序员写第一行代码到这个代码跑在客户的环境里需要5年,这周期非常长。但是今天移动互联网时代的竞争非常激烈,手机软件,后台程序,每周甚至每天如果不更新,可能就会被用户的反馈所淹没,或者说被竞争对手赶超。在Cloud Native APP的场景下,需要快速迭代,用户的反馈要快速响应,这个其实是一个很新的要求。从另一个纬度看,现在软件变得复杂了,原来写程序可能只要写三层架构就好了,现在的软件是非常碎片化的,分布式加上离散化,加上微服务,任何一小行的修改,都可能牵一发而动全身。在这种情况下对于软件的测试覆盖,或者说你研发团队的测试能力是有要求的。我可以很放心地说,今天9:10改一行代码,自动化测试跑完之后,可以很放心地把它发布出去,要有这样的能力才能应对目前快速迭代和持续交付的考验。在DaoCloud整个生命周期里,我们都非常重视持续集成和持续交付的能力,我们在帮用户构建Docker Image之前,我们就会跑这个CI,CI持续集成的测试的用例,全部都覆盖一遍,只有覆盖通过完成后才会生成镜像,这样用户拿到的镜像就是一个测试通过的交付件,他再往下走就会更加流畅,避免一些后续的风险。整个分布式系统里往往是由好多的镜像组成的,每个镜像我们都要去做这个测试,它合在一起的时候,就不会出太大的问题,这就是我们在持续集成方面做的一些努力。在整个的环节里面,我们自己开发了一套叫做Dao CI的持续集成的引擎,我们也会外接第三方,比如说国内有些用户已经在使用的像Travis CI这样的SaaS化的持续集成服务。我们可以把它接到我们的流程里面,你提交代码,通过第三方去跑CI,第三方来告诉我DaoCloud,这个代码的CI已经通过了,然后我才会走下面的流程,帮你做Image构建,帮你去发布等,所以整个流程链中测试是非常重要一环。

   

6. 你们的自动化测试主要测试哪些方面,是检测Bug,测试性能,还是发现异常?

喻勇:自动化测试是对代码有些要求的,很多代码里面要写好单元测试用例,然后我会调用,通过一些配置文件调好用这些测试用例,完成代码的覆盖,其实很多团队慢慢也会养成这样的习惯,因为代码越来越多,模块也越来越多,必须有很大的测试用例覆盖比例,才可以保证发布的质量,保证快速交付过程中不会出现一个牵一发而动全身的问题。用Go语言编译时,我们可以针对不同的GO的版本进行测试,不管是Run Time的版本,还是你代码里的通过覆盖的版本,或通过Unit Test做的覆盖等都可以做测试。

   

7. Docker开发相对来说是比较成新的技术,你对Docker开发者有什么建议?

喻勇:其实我们接触的用户大致分成两类。一类,他的想法比较超前,已经在用Go、Python、Ruby这些比较前卫的编程语言,已经是SaaS化服务的用户了,那他用Docker,其实是写一些未来,或者说写一些New app,的新应用,这个时候他就可以比较好地通过微服务化,或采用Cloud Native的方式去使用Docker。另一类用户可能是传统的用户,他原来已经有一套运行的不错的应用,想搬进Docker,我们很多企业用户是这一类的。他有一套运行得不错的Java,他觉得Dockecr很好,能提升效率,他想搬进来。这个时候,我们往往会对这样的用户说,你的哪些应用搬进Docker对你是有好处的,哪些搬进去反而可能会带来问题,我们会帮他做这样的分析。通常情况下,Docker是在软件发布过程中帮你去做一个严格的一致化的环境,保证开发环境、测试环境和运维环境一致性。对于旧有的应用,我们会建议,那些需要频繁更新的模块,你用Docker去发布它会提高效率,会带来实际的好处,有些可能几年都不变的,你放到Docker里,跟放在虚拟机里区别并不是很大,这个时候要清楚地做区分。

   

8. 关于Docker后边的镜像服务已经很多了,我想问一下,DaoCloud目前还有哪些比较特色的服务,以及将来你们会推出哪些特色服务?

喻勇:在元旦前后,我们推出了Docker Hub,一个针对中国网络加速的服务,目前在社区里的反响非常好,它把在Dockec Hup上铺镜像的速度提升了差不多10倍左右,这是用户体验非常好的一点。Docker Hup其实是个镜像服务,或者叫它Docker Cloud 加速器,只是我们对社区的一个回馈,并不是我们主打的产品,或者说服务。那我们目前在做的一件事,是从Code到Cloud的整个流程链,我们希望把它通过Docker的方式去打通,那对于开发者来说,我只要把代码提交到代码托管的这个GitHub或者国内的代码托管库。现在我们接触很多人,他花一半时间写代码,另外一半时间去配置环境,去做发布,去做构建,发布,去推到公有云上去,但你会发现,他写代码的这部分工作和花的时间,是他产生创造力,创新的环节,而后面这半部分时间,是一个劳动性的,或者说是个流程性的工作,这部分做得好或不好不会对你的应用和商业模式等产生实质的影响,那为什么不把这部分自动化呢?以前代码一年发一次,我觉得倒还好,可以花一周时间去专门做发布。但现在每天、每周都要发布,那对于程序员来说,怎样提高效率,把有限的时间放到创新领域里面去,就是非常棘手的问题。我们做的工作就是,你写代码,然后我们有一个持续集成的引擎,帮你跑测试,帮你把环境准备好,通过你的代码的DockerFile来生成Docker镜像,Docker镜像是一个标准的交付件,可以把这个交付件放到用户选择的公有云上去,我们的很多公有云其实现在已经在逐一对接和支持,我们也会在以后考虑把用户的交付件,直接推进到他的私有云的场景里,这样公有云和私有云的界线慢慢模糊,因为交付件是从一个地方来的,只不过它部署的目标不同而已,这个是我们中长期的一个考虑和想法。

   

9. 据你了解国内有没有人,或者说有没有公司做这种Code to Cloud服务,或者有这种做法的?

喻勇:我们产品是3月底发布的,完成整个流程链的目前国内我们是第一家。从全球范围来看,因为美国的Docker社区,它的兴起速度其实也不比中国早很多,也就是半年,一年的事。在美国,每个阶段,比如说镜像的构建是由创业公司来做;SaaS化的持续集成也有公司来做,每个环节都有公司在做,但真正把每个链条都串起来的,我觉得我们在整个业界是比较领先的。对用户来说这个是比较简单,或者比较一致化的服务,在我们的链条里边,用户要做得事只是写代码,然后写好DockerFile,写好持续集成的配置文件,这两样东西对代码并没有侵入性,都是标准化的驱动。而在我们这个链条里,除了提供持续集成引擎外,我们还给用户提供了选择,可以选择使用第三方比较熟悉的时时集成引擎,也可以选择打造一些特殊功能的持续支撑引擎。

甚至可以自己开发,和你自己开发的引擎结合起来。每个结点都有很多选择,我们把这个链条给穿在一起,让用户跟着我们的链条走。当镜像构建出来以后,可以选择存在我的镜像仓库里,也可以选择推到国外的Docker里边,甚至可以选择推到你自己的私有仓库里去,然后跑内部私有云里的测试或者发布流程。每个环节都有选择,那到最后一个环节,当你的镜像需要跑起来的时候,需要把它给推到公有云上去,我们对国内、国外的公有云都有很好的支持,马上也会陆续接入一些私有云的运行池和运行环境。对于程序员和软件厂商来说,他想避免Lock in,他不想跟某个厂商锁定在一起。在一开始,他用的是Docker化的标准化的发布,代码没有侵入性,每个结点他都有选择,所以这个流程对他来说是很有价值的。在这里面,一方面我们自己开发了很多服务;另一方面,我们起了一个穿针引线的作用,把一些SaaS化的服务串在一起。

   

10. 最后一个问题,从资深从业者的角度,你能谈一谈对Docker、CoreOS以及其他一些容器技术的看法吗?

喻勇:其实最近的新闻是比较多,3月份以来,首先是CoreOS跟Google的战略合作,然后是1200万美元的大批融资。紧接着Docker宣布了9500万美元的,不差钱情况下第一轮融资。前几天VMware宣布了他推出的两款新的承载Docker镜像、容器镜像的新的虚拟化平台。微软也推出了Azure,这4件事基本上是在一个月内发生的,那好处是什么呢?你会发现其实对于容器,对于用户,对于程序员来说,它是很好很好的事,因为有这么多大厂往里面去投入,意味着技术一定会成熟。大家对Docker的担心,比如说安全,网络,或者底层的一些隔离性, Docker也好,CoreOS也好,他们都会由厂商投入去把它给做好,做实,这个开源技术的底层会逐渐夯实,这是个很好的事。对用户来说,选择就会更广。很多厂商也在思考,Docker它是一个标准,那其他的也有不同的标准。但是有一点是肯定的,就是Container的这种方式,无疑已经是一个尘埃落定的基于虚拟化之后的另一种新形式的应用载体,就回到了我前面回答的第一个问题。回看前面5年到8年,我们谈云,谈的是虚拟化;未来5年到8年,我们谈云,谈的是Container。但最后Container是Docker家的,还是谁家的,现在还没有尘埃落定,但是大方向已经确定了。我觉得对用户是好事,有竞争就会有发展,发展的速度也会越来越快。我相信,这个有点像以前的虚拟机技术,比如说,那时候的VMware,微软的Hyper-V等,它一定会形成一个多家共同分割市场的局面,对用户来说是好事,对社区来说也是好事。

你可能感兴趣的:(喻勇:DaoCloud如何解放生产力)