七牛云储存创始人分享七牛的创立故事与对Go语言的应用
许式伟,七牛云存储ceo,曾任盛大创新院资深研究员、金山软件技术总监、wps office 2005首席架构师。在接触go语言后即可被其大道至简、少即是多的设计哲学所倾倒。与团队合著《go语言编程》。七牛云存储也是国内第一个吃螃蟹的团队,核心服务完全采用go语言实现。
为此,eoe对这样一个传奇的技术员和团队进行了专访,希望大家看完后能对go语言有全新的认识,扫除大家学习新技术语言恐怖和障碍。同时许总也谈了如何从一个普通程序员成长为首席架构师,做程序员与做team leader与ceo的区别,希望对技术成长和创业感兴趣的开发者有所帮助。
eoe:许总您好,感谢您从百忙之中抽出时间来接受eoe专访,您能简单介绍下您自己和七牛团队吗?
许式伟:大家好!我是七牛云存储ceo许式伟。七牛云存储是专为移动时代开发者打造的数据管理平台。主要托管企业的富媒体(图片和音视频等)文件,为企业提供了一站式在线数据托管、全国乃至全球范围的上传下载加速、以及云端数据处理(如图片缩放、打水印、音视频转码、流媒体播放等),省钱省时省力又省心。
七牛云存储的出现并非我偶然的想法。我从 2000 年加入金山,做的最后一个软件是wps office 2005,任首席架构师。2006年开始,整个金山面临互联网转型,在这样的背景下我向ceo雷军申请成立了金山云存储实验室(金山快盘的前身)。刚开始这个实验室有技术研究为主的味道,但很快我发现云存储其实是一个技术门槛很高的方向,并且在可预见的未来有很大的商业价值。从此之后,我的职业规划一直围绕它展开。2008年我离开金山,先在百度的网页搜索部呆了很短的时间,随后在 2009 年初加入了盛大创新院,发起了祥云计划(很巧合现在北京市也搞祥云计划)。
2011年中,感觉到了移动互联网产业蓬勃发展,云计算到了落地的阶段,我决定辞职创业。我主要的创业伙伴来自金山和盛大,都是长期合作默契的同事们。于是七牛就这样诞生了。很感谢我的伙伴们,我们一起在云存储这条道路上已经走了很多年。我们会把它作为需要终生奋斗的事业来经营。
到今天为止,七牛云存储在业界也树立起了自己的口碑,这一点令我很欣慰。但是,未来的路还很长。在产品上我们希望七牛云存储能够与其他大品牌公司产品形成差异化、互补的关系,大家一起努力改善创业者的生存环境。未来七牛会在云存储技术架构,富媒体云端处理的应用,以及数据传输加速层面做更多的优化与创新。
eoe:您是一位开源爱好者,发布过包括winx、tpl等十余个c++开源项目。做开源项目能对技术人员本身有哪些方面的提高?如果以前没接触过开源项目应该从哪些方面着手?
许式伟: 开源是一种奉献的精神,也是geek精神的体现。做开源项目主要有这些好处:
1、协作的能力,可以深刻理解开源项目如何进化,如何分工,如何与大家协同合作。
2、软件工程的能力,开源社区往往把做事方法提炼的很好,比多数正规商业公司的研发过程高效很多,这种经历能够提升个人对软件开发过程的理解。
3、与人交流能力,开源过程中可以了解别人的想法,也可以与别人交流自己的想法。
4、推广自己的能力,做好一个东西相对容易,但让别人知道这个东西好,又是另一种能力。
没接触过开源项目也可以从下面三点尝试:
1、勇气,走出第一步很重要,此后就一发不可收拾。
2、如果不知道怎么开始,可以从参与自己感兴趣的开源项目开始,了解别人怎么做的,自己可以参与哪些事情。
3、也可以从自己平常提炼的一些独立模块开始,如果你觉得有人可能需要,就可以把它贡献出来,当然,先要记得去征询下公司的同意,避免出现知识产权上的纠纷。
eoe:众所周知,go语言是谷歌在07年开始的业余项目。从09年11月正式对外发布到12年3月发布的正式版也经历了近三年时间。而您的专著《go语言编程》在2012年9月就正式出版。您是从何时开始关注go语言?又是什么原因驱使您花时间去研究go语言并把它投入到实际工作和项目中?
许式伟:我从 go 语言发布之初就留意到这门语言,但是当初只是简单看了下语法,没有深入研究,也没觉得它好在哪里。真正花心思去研究go,还是要说到七牛。11年5月份,我们决定创立七牛,在为七牛做技术选型时,我重新认真评估了go语言。我大概花了2周用go语言写了几个模块,就深深喜欢上了这门语言,认为这门语言将是在未来10年引领潮流的语言,所以当时我给伙伴们发了一封信,说:“创业过程中我们会面临很多选择,必然有一些选择最终会被证明是错误的,但是选择go语言作为我们的服务端开发语言,很可能会成为我们最正确的一个选择”。如果当初还有人怀疑这一点的话,我觉得今天这个论断很大程度已经被证实。
eoe:七牛云存储是国内第一个吃螃蟹的团队,核心服务完全采用go语言实现。你们采用go语言作为核心服务的基础,是基于什么考虑?为什么不采用其它更成熟稳定的语言?如何保证核心服务的性能与稳定?
许式伟:最初去评估go语言最重要的原因是,我们没有找到一门合适的语言。从云计算领域的主要技术方案看,最受欢迎的是c++和java。我们知道亚马逊是用了java。我个人尝试java做服务端开发是在2007年金山实验,java的风格比较拘束或严谨,与我推崇的编程风格不合,并且在分布式系统开发上没有显著的优势,所以才会关注erlang(也因此有了ecug社区)、go等小众语言。在我评估完go语言后,我认为它是云计算领域最合适的开发语言。
性能来说,go语言作为互联网时代的c,并且是编译型,性能是绝对不低的,完全满足要求,而且可以预期未来会好于java。
稳定性来说,云计算都是假设单机是可以宕机的,要在单机的不可靠下让整个集群可靠(这种宕机甚至不为用户所感知)。我们并不担心单个进程的稳定性,哪怕go程序每天会挂一次,对我们而言,也是可以接受的。
eoe:go语言才推出不久,这方面人才很稀少,而你们团队项目的核心服务又是基于go语言编写,怎么解决go语言人才紧缺的问题?是招进来从头开始学习还是需要有相关经验的?
许式伟:go语言入门门槛非常之低。有任何其他语言的背景,学习go语言只需要一周的时间。**我们面试从来不问你会不会go语言。我们关心的是开发者的能力与我们业务的匹配度,比如他算法基础如何、是否擅长网络编程、是否适合创业(对事情的责任感)等等。**
eoe:许多开发者对go语言有很感兴趣,跃跃欲试。但又由于目前go语言还不是主流,他们不敢贸然投入精力去研究。就您学习go语言及现在工作中的使用经验来看,对想学习go语言的开发有什么建议或意见?学习过程中有些什么技巧?需要哪些技术积累?
许式伟:我对go的学习者的建议是:**与其观望,不如趁早体验。**go是未来,你的投入肯定有一天会得到巨大回报,而且越早了解,你的优势就越明显,这个回报也会越好。学习技巧方面,兴趣是最好的老师。计算机是实践科学,做一个自己喜欢的项目,胜过做100个习题。我唯一的建议是,项目最好是做服务器相关的,否则和go目前擅长的领域不合,难度会高一些(但是如果你喜欢挑战也没有问题)。
eoe:您在2000年进入金山,到2008年离开金山时,已经是wps首席架构师,您是怎样在这8年时间里从一个程序员成长为架构师的?可以谈谈其中的成长历程吗?这其中需要怎样的技术背景和学习技巧?
许式伟:我认为成为架构师并不需要哪些技巧,其实很多是和人的做事方式有关。我个性比较喜欢反思,一段代码写好了以后,会反复进行代码审查,是不是可以写得更漂亮。我一直认为**成为架构师唯一的诀窍,就是不断实践+反思的过程。对架构师而言,永远不要忘记需求。**架构终归是要满足某种需求。架构能力完全体现在你对需求的准确把握。准确把控需求,不只是要准确理解当前的需求,也要准确理解需求的变化,预见什么会发生,而什么不会发生(防止过度设计)。
eoe:您现在已经是七牛的ceo,能给各位开发者分别谈谈做一个程序员、、team leader和公司ceo的区别吗?您是怎样在工作中提升自己的管理能力的?
许式伟: 作为程序员,除了不断提升自己的技能,让一件事情完成地又快又好;还需要考虑自己如何促进组织的进化,让整个团队的协作更高效。
team leader保障的是整个团队的工作效率,不断改善团队的做事方法,让事情更有序地进行。
ceo这个称呼还是蛮沉重的,因为这是我第一次创业,所以我还算不上一个非常称职合格的ceo。但我明白,作为七牛的ceo:要懂得知人善用,尽可能为员工创造好的条件;与合作伙伴保持良好的合作关系;倾听用户的声音,理解用户的诉求,让用户喜爱我们的产品。
一个好的管理者,首先需要具备长远和全面的发展眼光,其次是在工作中要有自己某方面突出的专业能力,再有就是自身的人格魅力。简言之,要上行下效,只有自己做的好别人才会看得起你并且愿意为你工作。
以下为2013中国开发者大会(cdc北京)现场实录:
我本身不是做游戏的,我知道在座的大部分都是做游戏的。今天我从创业的角度来谈怎么做公司。大家都听了陈睿的分享知道了竞争非常的激烈,尤其是游戏。原因很简单,因为游戏可以拿到移动互联网第一桶金。很多人都说在移动互联网只有做游戏才能赚钱,其他的都很难赚钱。
我觉得绝大部分不成功的公司都有可恨之处,因为失败的公司有很多都是山寨的,今天我想分享的主题就是告诉大家在激烈的竞争中,胜利可行的思路。成为创新型的公司才可能成功,这是我的观点,也是我演讲的主题。
我是七牛云存储ceo,我也标榜自己为go语言大中华区的首席布道师。go在中国蛮火的,go语言搜索在全球排行第一,它跟游戏的关系很大。我以前曾经推过一个语言,印象中它在中国真火了,它其实非常的小众,但是在页游领域是标准化的设施。我觉得go语言比这个更火。我跟陈睿是同事,之前也在金山工作,因此也非常同意他说的,办公软件看起来很简单,但是它是非常复杂系统的东西。
我讲两个内容,第一是技术选型,我们是国内最早选go语言的;第二个是产品方向,这是做公司最基础的两个问题。
技术选型
最早我们是做网盘的,其实我们七牛只做了7个月的网盘,现在的定位是面向开发者的数据平台。既然是面向开发者的产品的话,大部分人认为七牛打不过亚马逊的s3,所以很多人认为七牛是亚马逊s3的copycat。
七牛是2011年5月底成立的,刚开始我们三个选择中考虑,一个是java,一个是c++,一个是go。当时go语言不确定因素非常多,因为语言语法还在变。go语言版本是2012年发布的,创业过程中必然遇到很多选择,很多选择被证明是错误的,但是选择go语言,我认为是非常正确的选择,也是最正确的选择。今天验证了这句话,现在go语言应用的很好。七牛是国内第一家由go语言开发完成的服务端,很多人对七牛选择go语言也是蛮质疑的。一个是新浪微博上的李智勇,我印象中好像是佳能的。他说,原则上来看,七牛选go语言是错的,因为太冒险了。哪怕最终被证明这个选择是对的,成功了,仍然不能否定七牛最初选择go语言是一个原则性的错误。
其实从我个人的观点来说,我觉得从一般意义来讲,它的话是有道理的,我也是蛮认同他的话,因为创业者禁不起折腾,不应该太冒险。“看起来七牛选择go是错的”,这句话我是认同的,接下来我会讲为什么七牛仍然选择它。第二个质疑是知乎网。
——“为什么许式伟选go语言?”
——“因为go语言是非常新的语言,七牛在拿着它到处作秀”。
从我个人认为,这是只有脑残才有的观点。没有一个公司的创始人拿着作秀选语言,因为语言的选择影响是非常大的。
我先说我个人怎么做选择?有几个基本出发点,首先尽可能用成熟,合适的东西。第二尽可能用团队熟悉的东西。否则的话,风险就会非常大。但是用成熟合适东西的前提还是要保持对新技术的敏感度。因为新技术通常代表了更高的生产率。
七牛选择go语言的原因
为什么七牛会选择go语言呢?原因是这样的几点。
第一,go语言虽然是新语言,但是它是c系的,就是说它的门槛是非常低的,c语言是这么多年来最成功的语言,包括后面的java,c++都是受c影响的,大家都能看到c的影子。go的风格,七牛是比较熟悉的,因为七牛绝大部分程序员都是c++上去的。
第二,七牛用c++做了一个雏形版的go,我们做了一个cerl的网络库,这个最早模仿最早语言做的,因为最早语言有一些不恰当的地方,我们修正了一些缺陷,最后我们发现跟go语言网络编程模式是一样的,我们做的cerl就是go的图形。go对七牛来讲是新东西,但是它的理论机理我们是非常清楚的,因为我们自己亲手做了一遍。
第三,我们确实应该选一个成熟的东西,但是目前来看,没有一个语言能够替代go。因为在我们当时的环境下,go是我们可以选择的最成熟的东西。
第四,我们需要用发展的眼光看问题。因为我们选择go语言的时候,它确实还不成熟。当时我做了一个很重要的评估,去研究go语言会在多久之后成熟。因为我们是刚创立的公司,所以在一两年后七牛才会有比较高速的发展。了解七牛的人应该知道,七牛go语言团队是全球最牛的团队,它有c的创始人,有非常牛逼的人。我们团队当中有一个人,做go之前自己探索过分布式编程的语言。go团队最早是从贝尔实验室(音译)被谷歌挖过去的,这群人是非常牛的。go语言的团队从编程语言团队来讲是非常强悍的,这是我们当时的判断。我觉得在一两年之后go可以非常成熟,今年印证了这个观点。最早对go语言质疑比较多的,是性能不是很好,但是今天没有人讨论go的性能问题,因为go的性能已经很好了。刚才我说工具原则不重要,这里还有一个说工具选择不重要的言论。如果七牛换成c,c++,java,c#,项目就会失败,因为语言是程序员的第一生产力。我本身是架构师出身的,我认为语言的选择实际上是架构师做架构选择的第一个要素,选语言是架构的过程。
产品方向
第二点七牛的产品方向。实际上我们做了转型,七牛刚成立的时候,做的是,2011年6-9月份,做了3个月。9月份的时候我们就转型了,现在我们提供的是面向开发者的数据平台。意思就是,托管你的静态文件数据,一种非结构化的数据,比如说音频、视频、照片、office文档,并且提供一揽子的服务。
我先说说qbox.me,它类似dropbox,是面向个人用户,提供照片、音织品、office文档的存储与多设备自动同步的东西。从社会大趋势来讲,这个产品是很有市场的,但是为什么七牛要转型呢?
第一个原因,也是最重要的原因,是团队。实际上七牛是非常技术化的一个团队。我们整个的团队,最早的5个人全都是技术人员出身,虽然有人转型不那么技术了,但是都是技术出身的。我们的团队用的工具都是比较小众的。我们最后做了3个月,觉得我们不适合做大众化的产品,因为我们不理解客户到底想要什么。但是七牛有另外一个非常相反的东西,七牛非常了解开发者,我们了解开发者的困难在哪里。
第二个跟环境有关系。因为2011年的下半年,网盘在市场非常的火爆,没有一个巨头不做网盘。腾讯在2011年的时候也出了一个qbox,跟我们重名了,这个不是最关键的。腾讯会进来,这在我们成立之初就已经预料到了。这样符合未来潮流的方向,巨头不太可能不进来。当时产品的同质化已经非常严重了,什么金山快盘、360云盘、百度网盘还没有大力去推;酷盘也已经被阿里收了。总而言之这个行业非常的火,但是所有的产品你打开一看都是一样的,长的没有什么区别的。我知道腾讯做q盘的时候,我们正好在成都,和七牛第一个客户——camera360在谈合作。最终我们做了七牛云存储的产品,这个产品是面向开发者的。
我们不是亚马逊s3的copycat
你们是不是亚马逊的copycat?你们是不是亚马逊s3的copycat?我的回答不是,原因很简单。
第一七牛不是亚马逊,我们没有财力做这样的东西,我们也没有他们多的精力做这样的东西。七牛也不是亚马逊s3的copycat,因为独立的亚马逊s3是不构成一个产品的,开发者是很难用的,如果开发者不被满足的话,你产品的成功率就很低了。我们内部对七牛云存储产品有一个结论,七牛的云产品必须是创新性的产品,必须是独一无二的。一个产品最终是为了满足客户某一部分需求的,所以最重要的是找到客户的诉求点,并且用最合适的方式去满足它。所以我们花更多的时间,去倾听客户的需求,了解他们到底想要什么。
首先,七牛是云存储,最接近亚马逊s3。在云存储之上还做了什么事情呢?第一我们增加了七牛云处理,还增加了七牛分发,把七牛云存储分成三快:云存储、云处理、云分发。存储方面,终端用户把文件传到七牛这里,然后七牛通知我们的客户有文件上传,所以整个思路跟亚马逊s3是反过来的。七牛的云处理非常切合客户的需求,因为我们主要的客户群体,最早的需求是进行图片处理,比如说刚才提到的camera360,美图秀秀,豌豆荚的云相册。我们最早期的很不错的公司,绝大部分都是图片领域的。图片领域的公司都有图片处理的需求,比如说做图,我这里传的图片是原图,3m,5m,看的很清楚,但是用户看的不是原图,要求是够苹果尺寸就可以了,图片列表页面里面看一个方形行图预览就可以了。所有的客户都有缩略图的需求,亚马逊不做,但是我们的用户有需求,所以七牛把客户共性的东西都做了。七牛有cdn能力的存储,因为中国的网络特别糟糕,移动互联网3g网络更糟糕,3g网络还不是非常的普遍,还有不少用户用2g。在这样的情况下,我们把加速也做了,双传下载双重加速,我们也覆盖海外的部分。七牛后来也有很多做音、视频的客户,也有很多做教育的公司,他们非常需要音、视频转码。
七牛的思考模式
我讲一下七牛是怎么思考的,这也是作为我对创业者的建议。游戏公司是同质化最严重的领域,在这样的领域大家怎么思考,我觉得不能光盯着哪个东西去做哪个。哪怕你做游戏,在这样一个光成都就有六七百家游戏公司的背景下,我觉得首先要快速的确定方向。我今天讲的不一定是针对游戏公司的,实际上是针对移动互联网的。绝对大部分的游戏公司,都没有办法拿到第一桶金,但是在app领域看起来更加简单一点。我觉得首先你要用最快的方式确定方向,因为浪费的时间越长,你成功的可能性越小。所以确定公司做的产品是什么,实际上是非常重要的。
我个人的心得,选择做什么,必须是个人非常感兴趣的方向,或者你最熟悉的方向,你最容易做出彩的方向。我觉得先问自己,我到底擅长做什么?我到底满足谁的需求?我觉得这个问题是最关键的。
如果你的方向确定了,第一用最快速的方式探寻商业模式。我认为做app的公司不赚钱,有可怜之处,也有可恨之处。光做copycat是不行的,你只有打到别人的痛点人家才会付费,所以商业模式很重要。除非你确定你的融资能力很强,比如说周鸿祎、优酷的*,他们都懂得融资。绝大部分的创业者需要考虑商业模式在哪里,七牛的商业模式是非常清楚的。
其次保持对产业的敏锐,做什么产品很重要,但是不能光盯着自己的产品,产业环境也很重要。我觉得产业环境分两点,第一是产业的成熟度,实际上你太早进入会成为先烈;太晚进入,你进入的门槛非常高,因为已经有人占坑了,你要把人踢下来,需要很高的水平。第二竞争态势很重要,要搞清楚谁是自己的合作伙伴,谁是自己的敌人。如果你认为自己是独立的公司,是很难成活的,你要搞清楚产业的上下游环境是什么样的。
第三必须要量力而行,懂得借势。我们本身是云服务公司,但是我们也是云服务的客户。七牛是一个非常饥渴的团队,我们技术圈内的口碑还是很不错的,但是七牛自己的原代码都不是自己管的。我们能不自己折腾的事尽量不要自己折腾,因为我们精力很有限。所以我们要把有限的精力放在产品上,放在客户最关注的地方上。我觉得创业者需要用各种各样的方式让自己跑的更快,因为现在的同质化竞争非常的严重。在这样的背景下,如果你慢慢走,不去深入的思考客户的诉求,我觉得很难成功。大家都看好移动互联网,这是非常好的一个时代,真的是遍地都是机会的时代,是颠覆传统的时代。我有一个观点,接下来的10年是云计算的10年,是所有公司都成为互联网公司的10年。
今天我们把领域分成传统的公司和互联网的公司,接下来10年所有的公司都是互联网公司,如果传统的公司不愿意,或者难以转型的话,最终一定会被灭掉的,这个是毫无疑问的。现在的竞争是无处不在的,巨头也是无处不包的。刚才提到了bat,bat到底做什么?其实它什么都做,连闹钟也做。看起来这是非常狭窄的,当然它是很朴实的需求,看起来盈利很少,但是它也做,没有什么领域它是不包的。我的观点是,不要怕巨头,但是也不要和巨头硬碰硬。在巨头无所不包的情况下,你必须很聪明的和巨头竞争,它也不是无所不能的。今天云存储还是起步阶段,市场占有率不是很重要,但是我们至少用行动证明,和巨头竞争是有出路的。
我对创业者最大的忠告:做思考的创业者,不要盲目的在那里看什么火就做什么。其实,没有一个copycat是可以成功的。别看中国是copycat的市场,但是大家都从copycat开始,最终沉淀下来,最终做成的都不是copycat,成功的公司必须是一个创新型的公司。所有的成功的copycat,都有独特的地方。优酷,土豆就是很典型的案例,大家都说中国是copycat的一个市场空间,我觉得不是这样的。比如说腾讯,很多人认为腾讯是山寨的公司,我一直不是这样认为。实际上腾讯是很有创造力的公司,它的产品比别的公司做的都好,为什么呢?我觉得这个问题值得大家思考。