VLIS實驗室雲端計算組張磊:關於Docker、開源,以及教育的嘗試(圖靈訪談)

盼盼姐發表於2015-09-15

張磊,浙江大學計算機學院博士生,科研人員,VLIS實驗室雲端計算組技術負責人、策劃人。Kubernetes專案貢獻者和維護者,Docker專案貢獻者。前Cloud Foundry中國團隊和百度私有云專案組成員。InfoQ、CSDN、《程式設計師》雜誌等多篇浙大系技術文章的貢獻者和策劃人,他還是《Docker——容器與容器雲》一書的主要作者之一。

VLIS實驗室雲端計算組張磊:關於Docker、開源,以及教育的嘗試(圖靈訪談)

問:你現在的目標是成為一位電腦科學家嗎?

是。

問:你是從什麼時候開始想成為一位電腦科學家的?

大概是由於中學時候就開始玩電腦,然後自然而然就進入了計算機專業。由於我的興趣主要在雲端計算以及Linux作業系統上,所以我的導師跟課題都是跟這些相關的。

2011年我們開始專注於開源雲端計算技術,當時開源的力量正在逐漸浮現。後來事實證明我們對趨勢的判斷是對的,因為從那個時候開始,軟體的開發和釋出以及整個生命週期就發生了改變。從此以後,可以說開源技術掌握了雲端計算行業,甚至是整個計算機行業的主流發展態勢。於是,我們開始更深入地鑽研Cloud Foundry, Docker, Kubernetes這樣的技術,並且作為這些專案的貢獻者成為了社群中的重要成員。

問:你認為在雲端計算領域,學術跟產業之間有沒有明確的界限?

首先,雲端計算這個領域本身就比較特殊,它其實沒有很多基礎性研究,所以這個領域的學術跟工業是分不開的,中間沒有一個明顯的界限。比如,伯克利的AMP實驗室做的一套高效能資料分析系統,最終開源出去就變成現在的明星專案Spark,成為工業界大資料的事實標準。在這些領域中,沒有任何一個界限能夠劃定哪些技術是學術的,而工業界不能用。因為雲端計算本來就是“站在巨人肩膀上”的一種技術,它基於已有的分散式系統來做進一步的創新和整合。

問:你現在在SEL實驗室的工作是什麼?

我主要負責實驗室雲端計算團隊的技術工作 ,以及與技術相關的其他事宜,包括開源以及一些商業上的技術合作。

問:SEL實驗室的前身是VLIS實驗室,當初建立VLIS實驗室的目的是什麼?現在SEL實驗室的關注點有沒有變化?

我們實驗室最開始的研究方向就是軟體工程以及計算機軟體。實驗室一開始就注重從學校的角度跟知名企業建立強強聯合的關係,致力於為工業界提供最好的大規模資訊系統的開發技術和能力。在那個時候,我們的主要關注點是金融資訊系統的開發,並且同全球最大的資金託管機構美國道富銀行建立了緊密的合作研發關係。從這個時候開始,我們向工業界輸出了大量的技術能力,整個北美市場的股票交易系統的後臺都是我們實驗室師生參與重新開發的。而軟體技術發展到現在,新一代的大規模分散式系統開始更多地以知名開源專案作為表現形式,這些技術也就自然成為我們新的關注點。其中最重要的還是雲端計算技術,但是我們略有側重,更關注輕量化的雲端計算技術,我們認為這將是一個新的變革。

問:你們實驗室跟Cloud Foundry還有百度、思科等知名企業都是以什麼形式合作的?

首先肯定有人才上的合作,因為學校本來是人才,我們會選擇一些從事這個方向的優秀的學生,聯合工業界的公司,比如去道富,VMware,思科總部或者百度等等,完成一個以技術研究為核心,以實際開發為途徑的長期合作學習的過程。學生不是實習幾個月然後回來,而是從開始到畢業,從研究的方向到最後的畢業論文都跟這些公司的真實技術場景緊密相關,並且專注於這些IT巨頭的核心技術以及雲端計算平臺的開發和研究工作。

問:你們實驗室為什麼在Docker還不太完善的時候就敢去嘗試這種技術?

容器技術不是一種新技術,它其實很早就存在了。在此之前,我們搞Linux核心的時候已經用過類似的技術,而且做PaaS用到的技術也是基於Linux容器的,所以我們團隊很久以前就對這種技術有過很多接觸和研究。2013年的時候,我們同學主要在從事的是VMware的Warden容器的研發,緊接著Docker就出現了,並且比前一代容器技術要完善很多,所以我們就自然而然地轉到了Docker上。這就是為什麼Docker一出現就會引起我們的關注。輕量化的雲端計算技術一定會以這樣的方式實現,只不過實現不同,而我們肯定會選擇更好的實現。

問:你本人是怎麼成為Kubernetes和Docker專案的貢獻者的?

我是從Cloud Foundry團隊出來的,而Cloud Foundry是一個純粹的開源專案,它沒有市場人員和專案經理這樣的角色來干擾工程師的工作,所有貢獻者都是通過遠端協作和結對程式設計來貢獻程式碼的。我,以及我們實驗室的大多數同學從一開始就是這樣一種工作模式,所以對於我們來說,參與開源專案是很自然的,而且我們也不像其他公司那樣尋求互等的商業利益。

我們認為開源專案是一定要參與的,不僅要參與,還要學會主導專案的方向,成為維護者和更重要的核心程式碼貢獻者。我剛才講過,我們的願景就是要基於開源軟體做事情,做研究也好,做進一步的商業活動也好,一定要進入到社群裡面,而不僅僅是一個使用者。

問:Docker一直存在安全方面的問題,在這方面你有哪些經驗可以和大家分享?

我也在《Docker——容器和容器雲》裡提到過,Docker本身確實有安全問題,但是一定要分場景討論。比如,什麼樣的場景下我會在一臺裸機上部署Docker;什麼樣的場景下我會讓Docker容器跑在虛擬機器裡面。在目前這種情況下,如果你是一個公有云提供商,我認為你還是要把容器拷在你的虛擬機器裡面,防止出現逃逸狀況。

我們在書裡講過,你的Docker容器和整個Docker Daemon環境最好做安全加固,在作業系統層面做很多加固,設定許可權,並且在整個系統的設計上把許可權設計和授權設計擺在第一位,逐層來把不正確的行為過濾掉。另外,一定要區分場景。對於私有云的話,安全要求滿足第一點就可以了。但是對於公有云來說,一定要做最高等級的安全預案。

以上是從業務方面講,但是從技術方面講,容器本身的安全問題是很難解決的,但是有一些努力的方向非常值得我們關注。比如最新的Rocket整合了英特爾在CPU上的一些虛擬化技術來做到硬體加固,這就是等級很高的安全技術。另外還有像國內趙鵬他們做的Hyper,是一個基於虛擬化技術的容器,它跟虛擬機器的安全係數幾乎是一樣的。所以我覺得從另一方面說,這些技術應該得到大家的重視,並且整合到我們現有的解決方案裡面。

問:現在在生產環境中使用Docker的人還是不太多,其背後的原因多種多樣,你認為現在Docker面臨的最大的阻礙是什麼?

第一個問題在於Docker所屬公司本身的強勢,以及他們自己想做一攬子事情的態度。這個問題使得Docker現在變得非常臃腫,而且導致本來應該專注解決的問題沒有解決掉。如果他們投入主要力量來解決容器的安全問題,我覺得反而要比現在的態勢好。

第二,我們使用Docker也好,對它做二次開發也好,其實我們不要把自己的眼光侷限在Docker上面。讓Docker只做容器的事情其實是最好的選擇,其餘的事情交給更專業的人。我們不要過分相信來自某些商業化的宣傳,比如一個人或者一個團隊就能完成從開發到部署到運維的所有流程。哪怕你一開始可以,但是隨著業務的正常增長,技術發展到一定程度之後你一定是做不到的。所以一定是專業的人做專業的事。

問:Docker和CoreOS一起創立了一個開放容器計劃(OCP)。你認為OCP的成立對於軟體開發行業會造成什麼影響?

容器映象不單指Docker映象,它很久之前就已經存在了。容器映象作為一種軟體的釋出方式,現在已經得到了大家的認可,成為了行業的事實標準。並且由於容器映象本身已經存在了很久,所以它本身標準的普及是比較容易的。所以OCP的成立其實是為這種映象釋出的方式提供了一個技術上的標準。

以前,這一套東西雖然可以做標準,但是沒有技術來支撐它,現在有了。我們通過標準容器來支撐標準映象。所以,這兩個標準如果能夠在OCP裡面得到統一,我相信它對整個軟體工程將來的發展都是有很大影響的。我們現在學校的課程裡就已經引入了完全基於容器的軟體工程設計模式,谷歌也提出了基於容器的程式設計模型,將來的軟體工程一定會向這方向發展。

問:你有一篇文章叫做《從Borg到Kubernetes》。你覺得Kubernetes今後的發展會怎麼樣?它和Mesos分別會向什麼方向發展?

我們最近也跟谷歌的人一起交流了很久,首先,Kubernetes確實揹負了很多Borg之前的優秀的設計理念,其中包括Borg在谷歌內部大規模叢集業務的應用。雖然現在還有一些應用我們看不到,但是Kubernetes將來的發展目標一定是用來解決這些問題。

Mesos和Kubernetes在一開始發展時其實是非常直接的競爭對手,因為這兩者關注的事情有很多是一致的。但是隨著這兩個專案的繼續發展,它們已經形成了合作關係。比如,Mesos本來就是一個優秀的排程器,那麼接下來Mesos會更關注這個業務。並且Mesos可以被更方便地整合到Kubernetes裡,作為Kubernetes的一個核心排程器來工作。

這兩個專案現在的關注點其實是不一樣的,使用的場景也不一樣。在今後的發展中,它們會逐漸融合對方的優點。互相之間的整合會越來越多,互相之間的重合會越來越少。

問:學術跟產業之間的脫軌問題一直以來經常被人們所詬病,浙大在這方面做得很不錯,有沒有什麼經驗可以分享?

首先,作為一所學校,要學會如何在我們國家的體制下,在不影響正常的教學、科研的前提下,獲得企業的支援。學校需要鼓勵學生在看似枯燥的學業中找到真正的個人興趣點。比如我們實驗室就湧現出了非常多的程式碼貢獻者、作者、領域內的小專家。因為我們實驗室從一開始就鼓勵個人發展自己的興趣,並且鼓勵同學向大家分享你的工作成果。這樣,工業界會自然而然地關注過來,合作也接踵而至。

另一方面,如果學校自身的硬體條件很強,技術水平很高的話,學校就可以為工業界做出很多貢獻,無論是開源貢獻,還是參與到工業的開發。並且還有一點很重要,就是學校要想辦法把實驗室的技術和研究經驗轉化成工程上可以應用到增值需求裡的東西,而不只是埋頭寫論文。所以,我們實驗室在碩士生階段,不會提出苛刻的論文要求。我們更希望你的論文是對一個開源專案的貢獻,或者是我們和產業界合作的課題的相關實際工程經驗。

同時,我們也在浙大試點了一個學院,整個軟體學院在以更加工程的方式推動科研的走向。我們課題組從十年前開始做這樣的事情,所以學術跟產業之間的脫軌問題我們這邊幾乎是沒有的。

問:浙大有這麼好的環境,但是很多其他大學沒有能力提供這樣的環境。你建議在一般大學學習的學生怎樣來豐富自己的專業知識?

首先對於一個學生,尤其是CS專業的學生,我認為實習是最重要的。你一定要想辦法在跟導師融洽相處的前提下,尋求到與自己專業相關的實習機會,並且珍惜這些機會,因為實習能夠使你的專業技能得到鍛鍊。並且你應該想辦法把實習轉化成畢業論文,或者是學校要求的課程設計。這樣的經歷會對你在工業界的影響力也好,工作也好,起到很大的積極作用。

問:你認為學習Docker需要幾個階段?

我們在書的後記裡面講過,不止是Docker,對於任何一個開源專案來說,都有這樣的三個或四個階段。 首先,你要去用,而且不只要用,還要變成一個優秀的玩家。對於開源專案的所有指令、所有設計,你應該有一個感性認識。

在這個基礎之上就是原始碼,要讀原始碼。讀原始碼是一件非常有意思的事,但是在這個過程中,你要學會提問,帶著問題去讀原始碼,才會有收穫。

然後就是轉化,轉化包括幾種情況。比如,你可以將容器技術轉化成你們實驗室的某個專案的基礎或者工作中的整個專案。另外,你要學會對專案做貢獻。從最開始的找bug、解決bug、修改文件,到最後提出自己的特性、融入到社群裡,只有這樣你才能夠獲得最多的知識,以最快的速度提高自己在這個領域中的能力。

這三步之後,如果你在這個方面做得更多,可以考慮一些商業化的事情。比如你可以做一些相關的買賣,或者在你的公司裡推廣這些開源技術。

問:你覺得讀者應該怎樣使用《Docker——容器和容器雲》這本書,讀者在哪個階段需要用到這本書?

這本書應該更適合在第二或第三階段閱讀。

這本書的一個特點就是它傾向於把原理幫你從原始碼中抽象出來,而不僅僅帶你走讀程式碼。因為程式碼很快會過時,所以我們特別注重抽象原理。在第三階段的時候,你要去做開發,所以你對技術的熟悉程度和原理必然要有一個深刻的認識。而這本書的很多實踐章節,包括我們對程式碼的整個框架結構的分析,會對你有很大的幫助。

問:《Docker——容器和容器雲》的關注點和其他類似的書有什麼不同?

首先,我們不認為容器就是Docker,我們認為它只是容器技術一種優秀的實現。所以我們的書叫《Docker——容器與容器雲》,我們更關注所有基於容器的雲平臺的實現方式。你可以把容器理解為我們現在的虛擬機器,把容器雲理解為OpenStack,所以我們這本書肯定要先講虛擬機器原理,以此為基礎我們才能講清楚容器雲,也就是容器的大規模管理方式。

很多目前市面上的書只關注於Docker本身,而我們更關注Docker背後的libcontainer也就是runc的工作原理,於此同時,我們還非常關注所謂的容器技術與大規模容器叢集管理的結合方式。我們非常想為大家解決的一個問題就是,真正的大規模容器叢集管理應該是什麼樣的。我們認為Kubernetes現在的方向是非常好的,所以在書中我們對它做了一個非常詳細深入的解讀,這在國內外應該是首次,而且從谷歌和CoreOS工程師的反饋來看,甚至在國外可能也是第一次。


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

相關文章