Dawn Chen是谷歌云平台软件工程师,目前负责Kubernetes项目。Dawn有超过8年的Google工作经验,负责过多层堆栈,包括内核,机管理,群集节点,管理,调度。供职谷歌前,她曾任职于Veritas和Symantec。从大学开始在美国学习计算机的她,用中文讲解计算机术语有些困难。然而在中国和美国,不同的语言和文化共通的却是对女工程师的偏见和挑战。勇敢叛逆如她,Dawn从来没有质疑过自己作为一位工程师的资格和能力。她相信“偏见都是可以克服的,时代都是往前走的”,除了你自己没人能挡住你的路。
除非你不想做,不想做就算了,想做好的话就不可能不劳而获。
我其实从小就很反对编程。为什么?可能因为我从小就比较叛逆。我父母是大学教授,因为我理工科特别好,所以他们就希望我去学计算机,他们觉得这是件比较容易的事。但是他们越想让我学我就越不想学。
我原来是学数理统计的,是数学系的。到了美国之后我申请统计系没有拿到奖学金,但是计算机给了我奖学金。那个时候就不需要叛逆了,于是我就去学了计算机。
这段经历现在对我的影响可能就是,我在头脑中都是用英文来思考计算机问题的,但是对于生活中任何别的事,我都是用中文思考的,分得很清楚。
我后来去美国学了计算机,那个时候因为我数学很好(我本来是学数学的),所以就觉得计算机真的很容易。后来随着学习越来越深入,我发现计算机也变得越学越有意思了,尤其当我能用计算机解决生活中的实际问题时。那时候统计在各个领域还没有应用,因为还没有大数据处理,所以统计学毕业的话,可能只能去气象、制药厂,或者是金融机构。因为用计算机写程序解决的都是生活中的问题,我可以把问题自动化、模拟化,所以当时我也很高兴自己学了计算机。
我在美国研究生毕业的时候,正好赶上2000年第一次互联网泡沫。那个时候我也不知道为什么,很多人都去做web,可能是因为既简单,来钱又快。虽然我也去了硅谷,但是因为我比较叛逆的性格,我就不太想做web,我不太愿意做大家觉得接下来会很火的东西。
所以我当时就去了Veritas的一个研究实验室,Veritas后来被Symantec买进去了。这个实验室实际上主要是做存储的,就是给企业做集群管理。但是Veritas本身没有数据中心,它实际上还是传统的软件公司,把自己的东西打包卖出去。
我们当时的CTO非常有想法,我们做的项目叫效用计算,直到今天,计算机都没有办法实现效用计算。但是在15年前,我们在Veritas组建了用来做效用计算的很大的集群,那个时候我主要做算法。我们用的都是当时最先进的技术,比如端对端,我们想要通过端对端网络去进行更有效地连接。我们做了一些很有趣的东西,这些技术对我今天的工作来说都很有价值。
我在Veritas做过好多项目,但是当时让我印象最深的是,我们每一个项目做完,都没有办法部署出去。因为Veritas是以研究为导向的软件公司,而不是谷歌那样的服务型公司,所以这些项目既没有办法跟公司已有的软件结合在一起,也因为Veritas没有面向外界的基础设施,所以不能跟公司的基础设施结合。最后造成我们很多有意思的研究都没有办法应用。后来研究实验室也越来越不景气,因为CTO走了,然后公司被Symantec买了,也变得越来越以商业为导向。
于是我就离开了。我面试了几家公司,拿到了三个offer,一个是VMware,一个是谷歌,还有一个就是Facebook。当时Facebook还很早,还没有IPO,我同事介绍我去的是研究实验室。我的同事离开比较早,他是Facebook里面的一个主架构师。他介绍我去的时候,就跟我说,他觉得Facebook的工作肯定能赚钱,但是喜不喜欢不一定,他后来也确实发财了。
我自己虽然有Facebook账户,但是我从来不用。然而从我读书第一天听说有搜索的时候(那时还没有谷歌),我就使用搜索,对我来说搜索改变了我很多。我学计算机比较晚,可能并不算一个典型的工程师,我对很多其他议题都很感兴趣,尤其是一些人文、社会的话题。除了工作,我只要下了班就不会再看计算机方面的东西。所以对我来说搜索是非常有用的,我对谷歌的印象特别好。
而VMware对我来说,是一个非常技术的公司,那时候虚拟技术和虚拟机其实都很火。而Facebook从钱的角度上说肯定也很好,我也相信它会成功。但是这两家公司对我来说都不像谷歌那样有吸引力。我觉得我需要做一个让我感兴趣的东西,然后找一家对我来说有触动的公司。我相信谷歌的理念,所以就去了谷歌。
我去谷歌的时候本来是做算法的,同一个组里有人在做系统网络,有人在做算法,还有人在做调度。大家都觉得算法更酷,更有意思。我第一次听一位技术主管讲容器技术时,我心里想:好酷,未来为什么不能用容器来取代虚拟机?于是我联系到了那位技术主管,他虽然是技术主管,但是那时候只有他一个人在干。他问我愿不愿意帮他做这个,我说好,我正好也想学。我当时其实也没有觉得我会一直做这个技术,我想有一天我还是会回去的吧。
随着工作展开,我感觉越做就越有意思,总有新的东西进来。因为这种技术是从无到有发展的,所以我们慢慢加入了越来越多的容器管理特性。很快我自己也成了技术主管。因为谷歌是一家技术驱动的公司,所以我可以做很多决定。这些决定会造成很多影响,对公司其他人做的很多东西也会有影响。这份工作不仅让我感觉很有意思,还很有成就感,于是我就这样一直做了下去。
我早晨起来穿衣服的时候会注意让自己穿得好看一点,我相信我老公也会注意到。但是我在工作中实际上会忘掉自己的性别。
话说回来,我相信无论在中国还是在美国,女工程师都会相对少一点。我认为这是一个传递途径(pipeline)的问题,最起码在美国是这样。读书的时候,尤其在大学,虽然女性读计算机科学的也没有男性多,但数量还可以。然而到了工作中、产业中之后,女性就会少很多。
总体上对于计算机产业里面女性来说,她们的努力(尤其在年轻的时候)不太容易被别人重视。比如当她提出一个观点的时候,无论是在美国还是在中国,别人都更容易忽略她的观点,就算她是对的,然后当另外一个男性工程师把同一个观点说出来时,就算他不一定有她说的好,大家还是会附和。
在我做第一份工作的时候,碰见了一个中国男性工程师,他是一个QA,而我是个开发者。他看见我非常不爽,他说一个年轻漂亮的女生,做得了程序员吗?我当时觉得,怎么会这样?他为什么会这样说?虽然我今天已经忘掉这些事情了,有些时候可能就是百毒不侵了,但当时我还是会被这样的事所影响。我虽然心里有些不高兴,但是我不会质疑自己,因为我从小到大数理化都是年级的第一名,我从来不会觉得我不能做程序员。我相信我可以的。
从另一个方面来说,我认为是家庭教育的问题。从读书的时候开始,家长可能就会说女孩子做这种工作很辛苦,女孩子要更重视家庭。其实,虽然程序员工作时间长一些,但是也很灵活,你完全可以在完成工作的同时享受生活。我个人觉得,做任何事的核心理念就是不劳而获是永远不会成功的。除非你不想做,不想做就算了,想做好的话就不可能不劳而获。而父辈们一直在灌输给我们一种思想,女性要找工作,要照顾家庭。既要离家近,挣钱多,还要事少,在我看来这是根本不可能的。有得就要有失,我一直相信这一点。
所以我觉得做任何工作,如果想要自己感觉到很满意,有成就感和满足感,你都需要投入心力,无论是做工程师还是其他工作。我觉得是偏见让很多女性不愿意去做软件工程师,反过来在工作中也确实因为女性相对较少,从而加深了这些偏见。但是我觉得时间久了,这些偏见都是可以克服的。时代都是往前走的,不受影响了就好了。
谷歌本身是很重视这一点的。我刚加入谷歌的时候开年会,我印象很深,可能在100多人里面就我一位女性。但是现在就多了,同样在一百个工程师里面可能有十几位女性。
这完全是我个人的看法,我觉得这是一个很聪明的做法。我刚才也提到了谷歌是一家技术驱动的公司,谷歌很鼓励创新,但是同时谷歌也是一家上市公司,它需要对投资人负责。投资有很多种类,有些投资人看中了谷歌的主流业务,比如说广告、搜索。当他去买谷歌股票的时候,看到财政报告上说谷歌花了一堆钱在技术上,他会问:谷歌为什么要花那么多钱?谷歌在做无人驾驶汽车,做气球,做生命科学,我都觉得谷歌很棒。虽然这些东西我不懂,但是作为我一个工程师,我非常享受在谷歌工作。但反过来说,我也很支持也能理解华尔街,当投资人做投资的时候,他看重的是谷歌的主流业务和赚钱的能力,而不是谷歌做创新的能力。同时对于创新领域的VC来说,他们也可以选择不把投资绑在主流业务上。
另外我觉得这也是一种宣传,让大家觉得谷歌是一家创新的公司。Alphabet下面的某些子公司是非常创新的,在未来领导技术前沿上也是非常活跃的。同时,对于那些更看重主流业务的人,他们会觉得,谷歌非常专注于自己的核心业务。从另一方面来说,这也符合谷歌对于管理透明度的要求,对于外界来说钱投在哪里都是透明的。
我们相信容器既然能让谷歌受益,也就能让别人受益。
Kubernetes是一个很大的开源项目,有好几个负责人,我是其中一个。我负责的主要就是容器技术这部分。除此之外,我们有负责调度的,负责API的,还有负责整个集群以及网络的。我负责的这部分包括管理节点在某台机器上的实现,以及保障每个组件的顺利运行。对于虚拟机,甚至是裸机来说,我们需要确定内核,库,还有容器技术的调度方式和应用方式。
很多谷歌员工在离开了谷歌之后去了其他公司,比如Facebook、Twitter,或者腾讯。他们中的很多人都会遇到一个问题,新的公司为什么没有Borg?很多人都问过我:你们的Kubernetes为什么没有Borg的这个功能、那个功能?可见他们有多么喜欢Borg,所以有很多人在不同的公司去重新做Borg。比如Facebook的集群管理系统,实际是从谷歌开始的,这个系统很像Borg,包括里面有些内部名词都是一样的。
我们在几年前发表了一篇论文,是关于Omega的。Mesos就是基于这篇论文的一个开源项目,这个项目含有一些类似于集群管理的东西,但是更多着重在调度上,所以Mesos并不是一个完整的生态系统。Twitter自己的集群管理实际就是用的Mesos,再加上一些别的东西做成的一个生态管理系统。对于很多其他公司来说,也有类似的情况。
从经验上看,谷歌过去总体上不怎么开源,但是却发表了很多论文,比如说对于业界很重要的MapReduce、BigTable论文。有很多开源的人或者公司觉得论文很有价值,然后就想要重新装备这些系统。后来谷歌自己也发现了这点,但是我们还发现重新组装的那些系统虽然很像我们的系统,但是又不像,这些系统其实跟我们的系统并不兼容,尤其在API方面。所以作为一家越来越重视云的公司,谷歌也希望能在云方面有所作为。
很多开源项目都建立在谷歌的论文上,但是却又跟我们本身的系统不兼容。谷歌觉得这一点很难办,如果只是发表论文,而不去做一个真实的系统的话,问题是很难解决的。就算我们开源API,但是没有实现,甚至没有示例实现,那么API就是不成立的。综上所述,我们觉得谷歌应该重新检视下关于是否开源的决定。并不是说谷歌不愿意开源,否则它也不会去发表论文,最重要的问题在于开源需要太多的人力和物力了。
但是反过来说,如果真的要在云上面做文章,我们是没有办法不开源的。容器技术如果不开源的话,我们就应该做到让用户完全信任容器技术,能够不担心安全问题。如果用户能够完全信赖容器技术,我们就不需要提供虚拟机了,也就是说用户可以不需要SSH这样的机器了。但是我们做不到,现在的容器技术做不到。而且就算能做到,我们也没有办法去说服使用者,要他们接受纯粹的服务而不是一台机器。用户会很担心:程序到底在哪里运行?他们会不会偷了我的东西?因为容器技术还没有得到大家的广泛认可,尤其在安全性能方面。所以我们还是需要卖给用户虚拟机,那么用户就有可能会SSH到一个机器。如果用户看到一个隐藏的程序在运行,他会很惊慌,因为他不知道我是不是要偷他的商业机密。
那我们唯一能做的事情是什么?就是开源。我们大家都相信无论是谷歌的云还是别人的云,都需要有一个集群管理。我们也相信容器既然能让谷歌受益,也能让别人受益。
在我看来最主要不同就是API。我们可以说Borg的高层是描述性的,但是在Borg真正实现的组件之间,实际上是命令性的API。在我们意识到这个问题之后,我们在设计Kubernetes时就坚持用描述性的API。
还有一点不一样的就是,因为使用了描述性API,所以内部实现不需要有非常复杂的状态机,我们使用了一个比较简单的调和控制回路。所谓描述性就是形容你想要的是什么状态,最终要的是什么结果,然后你的调和控制回路(也就是控制系统)就知道了这个目标,它会根据现在状况调整,一直驱动达到理想的状态。比如你在调度的时候,需要考虑有多少个job在运行,job是在什么情况下运行,有多少个copy在运行,少了一个copy你就多加一个,多了一个你就杀死一个。这两点就是主要贯彻在整个设计里面的原则。
我们其实不太关心Kubernetes跟Mesos是不是会越来越不一样。因为Mesos的调度今天已经做得非常成熟和完善了。与此相对的是,Kubernetes从一开始就是以一个生态系统为目的而设计的,它有正常检查、监控、记录,它有所有的东西。Mesos是基于Omega那篇论文构建的,而Omega的论文的重点就是调度的算法。所以Mesos自己不是一个完整的生态系统,也不是一个集群管理系统。Mesos能把你要做的东西建立在很多要求上,部署到机器上,但是当你要做升级,需要扩大规模或减小规模时,Mesos是做不到的。Mesos需要跟很多别的东西结合,比如现在的Mesos实际上是跟Kubernetes结合的,你可以使用Mesos非常酷炫的调度功能,同时也可以用到Kubernetes自己的集群管理功能。除此之外,Mesos也跟马拉松结合。
当然,我们的Kubernetes也会越来越完善,因为算法我们都知道,我们自己内部的算法也很复杂。我相信Mesos也会逐渐提升它的东西。我们都是开源的项目,其实是种互补的关系,或者说是一种良性竞争的关系。所以未来会怎么样?没有人知道。