Kubernetes負責人Dawn Chen:開源是唯一的路(圖靈訪談)

盼盼姐發表於2015-09-22

Dawn Chen是谷歌雲平臺軟體工程師,目前負責Kubernetes專案。Dawn有超過8年的Google工作經驗,負責過多層堆疊,包括核心,機管理,群集節點,管理,排程。供職谷歌前,她曾任職於Veritas和Symantec。圖靈訪談的記者有幸在CNUTCon全球容器技術峰會現場採訪了Dawn。從大學開始在美國學習計算機的她,用中文講解計算機術語有些困難。然而在中國和美國,不同的語言和文化共通的卻是對女工程師的偏見和挑戰。勇敢叛逆如她,Dawn從來沒有質疑過自己作為一位工程師的資格和能力。她相信“偏見都是可以克服的,時代都是往前走的”,除了你自己沒人能擋住你的路。

enter image description here

叛逆如她

除非你不想做,不想做就算了,想做好的話就不可能不勞而獲。

問:您是從什麼時候開始程式設計的?

我其實從小就很反對程式設計。為什麼?可能因為我從小就比較叛逆。我父母是大學教授,因為我理工科特別好,所以他們就希望我去學計算機,他們覺得這是件比較容易的事。但是他們越想讓我學我就越不想學。

我原來是學數理統計的,是數學系的。到了美國之後我申請統計系沒有拿到獎學金,但是計算機給了我獎學金。那個時候就不需要叛逆了,於是我就去學了計算機。

這段經歷現在對我的影響可能就是,我在頭腦中都是用英文來思考計算機問題的,但是對於生活中任何別的事,我都是用中文思考的,分得很清楚。

問:能談一下您在美國學習計算機的經歷嗎?

我後來去美國學了計算機,那個時候因為我數學很好(我本來是學數學的),所以就覺得計算機真的很容易。後來隨著學習越來越深入,我發現計算機也變得越學越有意思了,尤其當我能用計算機解決生活中的實際問題時。那時候統計在各個領域還沒有應用,因為還沒有大資料處理,所以統計學畢業的話,可能只能去氣象、製藥廠,或者是金融機構。因為用計算機寫程式解決的都是生活中的問題,我可以把問題自動化、模擬化,所以當時我也很高興自己學了計算機。

我在美國研究生畢業的時候,正好趕上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多人裡面就我一位女性。但是現在就多了,同樣在一百個工程師裡面可能有十幾位女性。

問:作為一位Google的員工,您怎麼看Alphabet?

這完全是我個人的看法,我覺得這是一個很聰明的做法。我剛才也提到了谷歌是一家技術驅動的公司,谷歌很鼓勵創新,但是同時谷歌也是一家上市公司,它需要對投資人負責。投資有很多種類,有些投資人看中了谷歌的主流業務,比如說廣告、搜尋。當他去買谷歌股票的時候,看到財政報告上說谷歌花了一堆錢在技術上,他會問:谷歌為什麼要花那麼多錢?谷歌在做無人駕駛汽車,做氣球,做生命科學,我都覺得谷歌很棒。雖然這些東西我不懂,但是作為我一個工程師,我非常享受在谷歌工作。但反過來說,我也很支援也能理解華爾街,當投資人做投資的時候,他看重的是谷歌的主流業務和賺錢的能力,而不是谷歌做創新的能力。同時對於創新領域的VC來說,他們也可以選擇不把投資綁在主流業務上。

另外我覺得這也是一種宣傳,讓大家覺得谷歌是一家創新的公司。Alphabet下面的某些子公司是非常創新的,在未來領導技術前沿上也是非常活躍的。同時,對於那些更看重主流業務的人,他們會覺得,谷歌非常專注於自己的核心業務。從另一方面來說,這也符合谷歌對於管理透明度的要求,對於外界來說錢投在哪裡都是透明的。

開源是唯一的路

我們相信容器既然能讓谷歌受益,也就能讓別人受益。

問:您現在負責的是Kubernetes哪個部分?

Kubernetes是一個很大的開源專案,有好幾個負責人,我是其中一個。我負責的主要就是容器技術這部分。除此之外,我們有負責排程的,負責API的,還有負責整個叢集以及網路的。我負責的這部分包括管理節點在某臺機器上的實現,以及保障每個元件的順利執行。對於虛擬機器,甚至是裸機來說,我們需要確定核心,庫,還有容器技術的排程方式和應用方式。

問:您在全球容器技術大會的一個關門會議上講到了谷歌為什麼要開源Kubernetes,能不能把大致內容跟我們分享一下?

很多谷歌員工在離開了谷歌之後去了其他公司,比如Facebook、Twitter,或者騰訊。他們中的很多人都會遇到一個問題,新的公司為什麼沒有Borg?很多人都問過我:你們的Kubernetes為什麼沒有Borg的這個功能、那個功能?可見他們有多麼喜歡Borg,所以有很多人在不同的公司去重新做Borg。比如Facebook的叢集管理系統,實際是從谷歌開始的,這個系統很像Borg,包括裡面有些內部名詞都是一樣的。

我們在幾年前發表了一篇論文,是關於Omega的。Mesos就是基於這篇論文的一個開源專案,這個專案含有一些類似於叢集管理的東西,但是更多著重在排程上,所以Mesos並不是一個完整的生態系統。Twitter自己的叢集管理實際就是用的Mesos,再加上一些別的東西做成的一個生態管理系統。對於很多其他公司來說,也有類似的情況。

從經驗上看,谷歌過去總體上不怎麼開源,但是卻發表了很多論文,比如說對於業界很重要的MapReduce、BigTable論文。有很多開源的人或者公司覺得論文很有價值,然後就想要重新裝備這些系統。後來谷歌自己也發現了這點,但是我們還發現重新組裝的那些系統雖然很像我們的系統,但是又不像,這些系統其實跟我們的系統並不相容,尤其在API方面。所以作為一家越來越重視雲的公司,谷歌也希望能在雲方面有所作為。

很多開源專案都建立在谷歌的論文上,但是卻又跟我們本身的系統不相容。谷歌覺得這一點很難辦,如果只是發表論文,而不去做一個真實的系統的話,問題是很難解決的。就算我們開源API,但是沒有實現,甚至沒有示例實現,那麼API就是不成立的。綜上所述,我們覺得谷歌應該重新檢視下關於是否開源的決定。並不是說谷歌不願意開源,否則它也不會去發表論文,最重要的問題在於開源需要太多的人力和物力了。

但是反過來說,如果真的要在雲上面做文章,我們是沒有辦法不開源的。容器技術如果不開源的話,我們就應該做到讓使用者完全信任容器技術,能夠不擔心安全問題。如果使用者能夠完全信賴容器技術,我們就不需要提供虛擬機器了,也就是說使用者可以不需要SSH這樣的機器了。但是我們做不到,現在的容器技術做不到。而且就算能做到,我們也沒有辦法去說服使用者,要他們接受純粹的服務而不是一臺機器。使用者會很擔心:程式到底在哪裡執行?他們會不會偷了我的東西?因為容器技術還沒有得到大家的廣泛認可,尤其在安全效能方面。所以我們還是需要賣給使用者虛擬機器,那麼使用者就有可能會SSH到一個機器。如果使用者看到一個隱藏的程式在執行,他會很驚慌,因為他不知道我是不是要偷他的商業機密。

那我們唯一能做的事情是什麼?就是開源。我們大家都相信無論是谷歌的雲還是別人的雲,都需要有一個叢集管理。我們也相信容器既然能讓谷歌受益,也能讓別人受益。

問:Kubernetes跟Borg有很多相同的地方,但是您能說一下它們在設計理念和設計目的上的主要不同嗎?

在我看來最主要不同就是API。我們可以說Borg的高層是描述性的,但是在Borg真正實現的元件之間,實際上是命令性的API。在我們意識到這個問題之後,我們在設計Kubernetes時就堅持用描述性的API。

還有一點不一樣的就是,因為使用了描述性API,所以內部實現不需要有非常複雜的狀態機,我們使用了一個比較簡單的調和控制迴路。所謂描述性就是形容你想要的是什麼狀態,最終要的是什麼結果,然後你的調和控制迴路(也就是控制系統)就知道了這個目標,它會根據現在狀況調整,一直驅動達到理想的狀態。比如你在排程的時候,需要考慮有多少個job在執行,job是在什麼情況下執行,有多少個copy在執行,少了一個copy你就多加一個,多了一個你就殺死一個。這兩點就是主要貫徹在整個設計裡面的原則。

問:Kubernetes開源之後會有什麼變化?它跟Mesos是不是會越來越不一樣?

我們其實不太關心Kubernetes跟Mesos是不是會越來越不一樣。因為Mesos的排程今天已經做得非常成熟和完善了。與此相對的是,Kubernetes從一開始就是以一個生態系統為目的而設計的,它有正常檢查、監控、記錄,它有所有的東西。Mesos是基於Omega那篇論文構建的,而Omega的論文的重點就是排程的演算法。所以Mesos自己不是一個完整的生態系統,也不是一個叢集管理系統。Mesos能把你要做的東西建立在很多要求上,部署到機器上,但是當你要做升級,需要擴大規模或減小規模時,Mesos是做不到的。Mesos需要跟很多別的東西結合,比如現在的Mesos實際上是跟Kubernetes結合的,你可以使用Mesos非常酷炫的排程功能,同時也可以用到Kubernetes自己的叢集管理功能。除此之外,Mesos也跟馬拉松結合。

當然,我們的Kubernetes也會越來越完善,因為演算法我們都知道,我們自己內部的演算法也很複雜。我相信Mesos也會逐漸提升它的東西。我們都是開源的專案,其實是種互補的關係,或者說是一種良性競爭的關係。所以未來會怎麼樣?沒有人知道。


更多精彩,加入圖靈訪談微信!

相關文章