Google 雲平臺負責人:開源是唯一的路

圖靈訪談發表於2015-09-24

Kubernetes是Google開源的容器叢集管理系統。它構建在Docker技術之上,為容器化的應用提供資源排程、部署執行、服務發現、擴容縮容等整一套功能,本質上可看作是基於容器技術的mini-PaaS平臺。在專案公開後不久,微軟、IBM、VMware、Docker、CoreOS以及SaltStack等多家公司便紛紛加入了Kubernetes社群,為該專案發展作出貢獻。

Dawn Chen是Google雲平臺軟體工程師,目前負責Kubernetes專案。圖靈訪談在CNUTCon全球容器技術峰會現場採訪了Dawn。

擁有超過8年的Google工作經驗的Dawn,負責過多層堆疊,包括核心,機管理,群集節點,管理,排程。供職谷歌前,她曾任職於Veritas和Symantec。除了分享有關Kubernetes專案的情況之外,作為一名女性程式設計師,Dwan也聊了聊她的從業經歷與感受。以下是根據Dwan在訪談中的回答整理的內容:

 

開源是唯一的路

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

很多員工在離開Google之後去了其他公司,比如Facebook、Twitter或者騰訊。他們中的很多人都會遇到一個問題,新的公司為什麼沒有Borg(Google的開源容器叢集管理系統)?也有很多人問過我:你們的Kubernetes為什麼沒有Borg的這個功能、那個功能?可見他們有多麼喜歡Borg。

從經驗上看,Google過去在總體上雖然不怎麼開源,但是卻發表了很多相關的論文,比如說對於業界很重要的MapReduce、BigTable論文。有很多開源的人或者公司覺得論文很有價值,然後就想要重新裝備這些系統。並不是說Google不願意開源,否則它也不會去發表這類論文,問題是在於開源需要太多的人力和物力了。後來Google發現,這些系統其實跟我們的系統並不相容,尤其在API方面。所以我們覺得,Google應該重新檢視關於是否開源的決定。況且,作為一家越來越重視雲的公司,如果真的要在雲上面做文章,那我們唯一能做的事情是什麼?就是開源。

容器技術如果不開源的話,我們就應該做到讓使用者完全信任,無須擔心安全問題。如果使用者能夠完全信賴容器技術,我們就不需要提供虛擬機器了,使用者也可以不需要SSH他們的機器了(SSH 為 Secure Shell 的縮寫,是目前較可靠、專為遠端登入會話和其他網路服務提供安全性的協議,在正確使用時可彌補網路中的漏洞)。但是我們做不到,現在的容器技術做不到。就算能做到,我們也沒有辦法去說服使用者去接受純粹的服務而不是一臺機器。因為使用者還是會很擔心諸如“程式到底在哪裡執行”、“他們會不會偷了我的機密”這類問題。

我們大家都相信無論是Google的雲還是別人的雲,都需要有一個叢集管理。我們也相信,容器既然能讓Google受益,也能讓別人受益

Kubernetes與Borg

Borg是Google的內部容器管理系統。早在十幾年前,Google就已經部署Borg系統對來自於幾千個應用程式所提交的job進行接收、除錯、啟動、停止、重啟和監控,實現資源管理的自動化以及跨多個資料中心的資源利用率最大化。Kubernetes專案的創始人Brendan Burns 曾表示, Kubernetes專案的目的就是將Borg最精華的部分提取出來,使現在的開發者能夠更簡單、直接地應用,Kubernetes以Borg為靈感,但又沒那麼複雜和功能全面,更強調了模組性和可理解性。

在我看來,Kubernetes與Borg最主要不同就是API。Borg的高層是描述性的,但是在Borg真正實現的元件之間,實際上是命令性的API。而我們在最初設計Kubernetes時就堅持使用描述性的API。

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

Kubernetes與Mesos

Mesos起源於Borg,是Apache下的開源分散式資源管理框架,被稱為是分散式系統的核心。Mesos能夠成為最優秀的資料中心資源管理器的一個重要功能是面對各種型別的應用,它具備像交警一樣的疏導能力。它可以將不同的機器整合在一個邏輯計算機上。總體上看,Mesos是一個master/slave結構(主/從結構),其中,master實際上是一個全域性資源排程器,採用某種策略將某個slave上的空閒資源分配給某一個framework,各種framework透過自己的排程器向Mesos master註冊,以接入到Mesos中;而Mesos slave主要功能是彙報任務的狀態和啟動各個framework的執行(executor)。

Mesos的排程在如今已經做得非常成熟和完善了,Mesos的重點就是排程的演算法,它不是一個完整的生態系統,也不是一個叢集管理系統。與之相比,Kubernetes從一開始就是以一個生態系統為目的而設計的,它有正常檢查、監控、記錄。

Mesos能把你要做的東西建立在很多要求上,部署到機器上,但是當你要做升級,需要擴大規模或減小規模時,Mesos就無能為力了。Mesos需要與很多別的東西結合,比如現在的Mesos實際上是跟Kubernetes結合的,你可以使用Mesos非常酷炫的排程功能,同時也可以用到Kubernetes自己的叢集管理功能。

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

我不想做大家都覺得會火的事情

可能是因為我一直比較叛逆,父母希望我去學計算機,但是他們越想讓我學我就越不想學。到了美國唸書時,還是因為計算機給了獎學金,我才去唸的。由於我數學很好(我本來是學數理統計的),所以覺得在美國學計算機真的很容易。隨著學習越來越深入,我才覺得計算機越學越有意思了。因為用計算機寫程式解決的都是生活中的實際的問題,我可以把問題自動化、模擬化。

研究生畢業的時候,我正好趕上2000年第一次網際網路泡沫。那個時候很多人都去做web,可能是因為既簡單,來錢又快。雖然我也去了矽谷,但也許還是因為叛逆的性格,我就不想去做web,我不太願意做大家覺得接下來會很火的東西。

我選擇去了Veritas的一個研究實驗室,這個實驗室主要是做儲存的,就是給企業做叢集管理。但是Veritas本身沒有資料中心,它實際上還是傳統的軟體公司,把自己的東西打包賣出去。

我在Veritas做過很多有趣的專案,這些技術對我今天的工作來說都很有價值。但是當時讓我印象最深的是,我們每一個專案做完,都沒有辦法部署出去。因為Veritas是以研究為導向的軟體公司,而不是Google那樣的服務型公司,所以這些專案既沒有辦法跟公司已有的軟體結合在一起,所以不能跟公司的基礎設施結合(因為Veritas沒有面向外界的基礎設施),我們很多有意思的研究都沒有辦法應用。後來研究實驗室也越來越不景氣,公司又被Symantec買了,變得越來越以商業為導向,於是我就離開了。

在這之後,我面試了幾家公司,拿到了三個offer,一個是VMware,一個是Google,還有一個就是Facebook。當時我對Google的印象特別好,因為我很喜歡搜尋這個功能。我從第一天聽說有搜尋的時候(那時還沒有Google呢),我就開始使用它了,對我來說搜尋改變了我很多。我學計算機比較晚,可能並不算一個典型的工程師,我對很多其他議題都很感興趣,尤其是一些人文、社會的話題。除了工作,我只要下了班就不會再看計算機方面的東西。VMware和Facebook這兩家公司對我來說都不像Google那樣有吸引力。我覺得我需要做一個讓我感興趣的東西,然後找一家對我來說有觸動的公司。

我去Google的時候本來是做演算法的,後來開始做容器技術,很快我自己也成了技術主管。在Google總有新的東西進來,很多技術是從無到有發展的,這份工作不僅讓我感覺很有意思,還很有成就感。

偏見限制了女性程式設計師的地位

我相信無論在中國還是在美國,女工程師都會相對少一點。我認為這是一個傳遞途徑(pipeline)的問題,最起碼在美國是這樣。讀書的時候,尤其在大學,雖然女性讀電腦科學的也沒有男性多,但數量還算不少;然而到了工作之中,女性程式設計師就少很多了。

至於原因,我認為主要與以下兩點:

總體上而言,對於計算機產業中的女性來說,她們的努力(尤其是在年輕的時候)不太容易被別人重視。當一位女性工程師提出一個觀點時,無論是在美國還是在中國,即使這個觀點是正確的,也很容易被忽略;相反地,同樣的觀點如果是由一位男性工程師說出來時,就算他不一定比她說的好,大家還是會附和。

在我做第一份工作的時候,曾經遇到過一箇中國的男性工程師,他是一個QA,而我是個開發者。他看見我非常不爽,質疑我這樣一個女生做得了程式設計師嗎。我當時覺得,怎麼會這樣?他為什麼會這樣說?雖然我今天已經百毒不侵了,當時還是會被這樣的事情所影響。不過,雖然我心裡不高興,但我從不會質疑自己作為一名程式設計師的資質和能力。

此外,家庭教育問題也是很重要的原因。從女孩讀書的時候開始,父母可能就會告訴她,身為女性要更重視家庭,做程式設計師很辛苦。實際上,雖然程式設計師的工作時間相對長一些,但是很靈活,女性也完全可以在完成工作的同時享受生活。

我個人認為,做任何事的核心理念就是不勞而獲是永遠不會成功的,除非你根本就不想做這件事。而我們的父輩們卻一直在灌輸給我們這樣一種思想:女性找工作也要兼顧家庭,最好錢多事少離家近。這在我看來根本是不可能的,有得就要有失,我一直相信這一點。所以做任何工作,如果想要有成就感和滿足感,你都需要投入心力,無論是做工程師還是其他工作。

我認為,是偏見讓很多女性不願意去做一名軟體工程師,並且由於在這一行業裡確實女性相對較少,反而加深了這些偏見。但是我覺得時間久了,這些偏見都是可以被克服的。Google在近年來對女性工程師所佔員工人口比例的問題上就越來越重視。在我印象中,剛加入Google時的年會上,可能在100多人裡面就只有我一位女性;但是現在,同樣在100個工程師裡面可能有十幾位女性。

時代都是往前走的,我們不受影響了就好了,除了你自己沒人能擋住你的路。

相關文章