圖靈訪談 : 七牛首席架構師李道兵:在開源世界里逼自己成長

jopen 9年前發布 | 16K 次閱讀 七牛
 

李道兵,七牛云存儲首席架構師。他曾是北大化學專業博士研究生,中途毅然轉行至自己喜歡的互聯網行業。2007年加入金山實驗室,2010年加入盛大創新 院, 曾先后參與了盛大網盤項目和盛大云項目。2013年,李道兵加入七牛云存儲,任職至今。他熱愛開源,曾先后擔任維基百科中文管理員,Debian Developer,協助維護 iso-codes 等開源軟件。他喜歡架構,參與了不少高壓力項目的結構設計,推崇高可用,可伸縮,低耦合的架構設計。

圖靈訪談 : 七牛首席架構師李道兵:在開源世界里逼自己成長

問:你是從什么時候開始編程的?為什么沒有堅持自己原來的化學專業?

我高中才開始接觸到電腦,大學的時候興趣大增,還找了一份幫人做網站的兼職。研究生階段專業是計算化學,所以不僅有大量編程的工作(我的課題算法 需要自己寫,沒有現成的軟件),還要幫課題組維護一個由幾十臺Linux服務器組成的集群,所以也積攢了一些 Linux 運維的經驗。離開學校后沒有繼續做化學的一個原因是我沒能正常畢業(文章發表不太順利),最后拿了肄業證書走人;另外一個原因是興趣轉移了,自己的職業規 劃就是要往軟件行業走,所以是否有一份化學的學位證書對我影響不大,所以就沒有堅持下去。

問:你認為現在的開源社區環境跟你當初成為Debian Developer時的環境有哪些差別?是否仍然鼓勵今天的程序員為開源軟件做貢獻?

差別挺大的,當時開源軟件的最大威脅還是來自大公司的一些不實攻擊(特別是微軟的一些FUD策略),而現在的最大挑戰可能是來自開源軟件的主導權 問題。主導權是留在社區還是會慢慢變成由公司來主導?GNU組織的影響力也在逐漸下降,大家對開源主導權繼續保留在社區的信心也在逐步下降。

我覺得程序員參與開源是好事。一方面開源世界有很多問題需要解決,解決這些問題能倒逼自己快速成長。對于我來講,如果沒有參與開源的話,我的水平 會比現在差很多。另一方面是理念方面的原因,我覺得能夠貢獻一點時間給全人類謀點福利是值得的,特別是在那些可以沉淀下來的事務上。所以我也在維基百科、 翻譯等項目上貢獻過自己的時間。

問:有人認為大量的開源軟件其實都是閉源軟件公司的廣告而已,請問社區主導開發的開源項目和公司主導開發的開源項目有什么本質的區別?這兩種方式各有哪些優勢?

作為一個開源軟件的用戶,開源軟件給我們提供了一種可能,讓我們很方便地使用、研究、改善我們日常的軟件,大部分我們的必備軟件都算是社區主導 的,比如操作系統(Linux), 命令行環境(bash等),編輯器(Vim, Emacs),編譯器(GCC),圖形界面(GNOME, KDE), 瀏覽器(Firefox),音視頻播放(MPlayer) 等都應該算是社區主導的。只是現在很多新興的技術逐漸掌握在大公司的手上,比如 Xen, OpenStack, Docker等。

作為一個軟件的主導者,我覺得開源提供了一種全新的合作模式,這個合作模式能讓軟件的發展更順利,包括 Python, Emacs, Debian 這類的軟件都從這個模式獲益匪淺。

公司的優勢在于可以集中人力,所以在推進方面比較給力(比如 Chromium/Chrome)。開源能夠讓很多想法充分競爭,最后最有生命力的想法會自然冒出來。比如在命令行環境這個領域,開源方就出現過 sh, bash, ksh, tcsh, zsh 等軟件,互相競爭,互相借鑒想法,發展得很好。另外一個優勢就是參與感帶來的巨大激勵,比如開源社區的人更愿意去報告bug,修復bug。相比之下,微軟 的命令行工具出于保護目的,同時也有投資、改進動力不足等原因,所以一直很難用。

問:你曾先后在金山、盛大創新院、七牛工作,你的足跡和老許基本相同,同時你們也是工作上的好搭檔,請問他是否對你造成了某些影響?

那是當然。老許是我認識的人里技術鉆研最深的一位,包括 C++, Erlang, Golang 等語言,以及各種高并發模型,還有我們的各個業務的底層模型。我跟老許的選擇有一定的互補性,比如我更關注于項目本身,比如項目管理、質量控制、持續集 成、持續交付、網絡安全這些方面的東西。

問:七牛在2011年成立,而你在2013年才加入七牛,請問你當時是如何加入七牛的?

我2012年離開盛大,加入了一家小公司。大約過了一年,老許請我吃飯,問我是否有興趣加入七牛,我就直接答應了。畢竟跟老許合作過多次,也知道老許在做一些很酷的事情,所以能加入七牛也是求之不得的事。

問:你曾在一個“七牛為什么要做云存儲”的slide中提出過一條理由是“很酷”,請問這種“酷”體現在哪些方面?

對我來講,存儲很酷的原因在于存儲之外的其他模塊已經逐步平凡化了。Nginx+業務邏輯層+數據庫+緩存層+消息隊列這種模型幾乎能解決所有的業務,再加上最近又從語言層面逐步把高并發的問題解決了,所以只要不涉及到大規模文件上傳,大家的架構都會比較類似。

但一旦開始涉及到大規模文件上傳,存儲就馬上轉變成架構中最重要的一部分。畢竟對于結構化數據的持久化,我們已經能很熟練地使用數據庫、分庫、分 表、表外索引等技術來支撐數十數百億的記錄,但對于非結構化數據的持久化(即文件存儲問題),手邊能用的組件都有這樣那樣的缺點,要么容量不足,要么運維 成本太高,要么不支持高可用,要么性能太差。存儲作為架構設計中最難啃的一塊,能夠用云的方式來解決是一個非常漂亮的主意。

常規的 IaaS 平臺傾向于把所有東西都放在一朵云上,我覺得應該充分結合不同云的優勢。比如把數據庫和業務邏輯的部分放在網絡覆蓋好的8線BGP機房,靜態文件和用戶上傳的文件則要放在流量成本低的普通機房,這樣做才更合理。

問:七牛開源了不少項目在Github上,也有很多人在為這些項目做貢獻。廣泛地參與開源項目為七牛的技術氣氛和團隊建設帶來了哪些好處?

主要是思路的活躍。對于每一個場景,大家都對現有已有的開源解決方案比較熟悉,知道這些項目的優缺點,于是就可以合理利用這些軟件。如果是只能用自己寫的軟件,要么不停地重復造輪子,要么適配上很別扭,降低了組件效率,同時也增加了bug。

問:七牛內部是否有人在鼓勵和推進對開源項目的參與(比如你或許式偉)?你們又是如何推進的?

招人是很重要的一環,我們招的人很多都是在 GitHub 有過不少貢獻的,這些人已經了解到參與開源項目的好處了,很多人也會持續參與。

另外,我們也鼓勵大家把發現的 bug 和引入的補丁回饋到開源社區,特別是我們用的多的 Go 語言、MemCache、MongoDB、FFmpeg這類組件。

當然,控制工作節奏也是很重要的,合理安排工作時間,不僅讓大家工作效率高、bug少,也能給大家更多的機會去鉆研技術,而參與開源就是鉆研技術很重要的一個手段。

問:七牛在持續交付方面有哪些經驗可以分享?從持續集成到持續交付,有哪些重要的問題需要解決?

我們的方案算是比較常見的。首先我們用 GitHub 來放我們的代碼,用 Travis 來做 merge 前的單元測試。之后又用 Jenkins 來做完整的集成測試,最后是一套我們自己寫的部署系統(如果規模小的話,這套部署系統用 Puppet+Capistrano 替代沒有任何問題)。

首先,測試方面問題都不大,部署稍微有點麻煩,我們的做法是用一套獨立的測試集群實現軟件的預發布。其次就是灰度部署的問題,灰度部署完成后如何讓開發人員能清晰地判定新版本是否存在bug,這個方面需要很多輔助工具。最后就是多機房、大量機器的程序分發問題。

問:能否詳細解釋一下你曾提出過的機房云?機房云是否就是七牛現在的一站式數據平臺?

機房云是我的一個不太成熟的想法,跟一站式數據平臺有點聯系,但不是一個東西。機房云的想法主要是針對PaaS平臺的一些缺點提出的。PaaS平 臺試圖接管客戶的所有業務,但對于大客戶來講,一個沒法線上 debug,線上檢測性能瓶頸的平臺是很難接受的。我很希望一些獨立的功能模塊能夠外包出去,比如數據庫、隊列、緩存、圖片處理、音視頻處理、語音識別 等。對于這些模塊,我希望實現高速訪問,那么就不能用簡單的 SaaS 平臺來滿足,而一個貼著機房部署的服務就比較合適了。

對于七牛一站式數據平臺,最主要的作用是幫助客戶解決如何方便地使用數據的問題。比如圍繞圖片,就有縮放、裁剪、水印這類常規需求,也有監黃、廣 告識別等很個性化也很有技術門檻的需求。七牛不會自己來完成每個需求,因為我們首先沒有這么多開發力量,也缺少對應領域的技術積累,而且如果每個需求都由 七牛來做的話,更妨礙這方面最優秀的服務商的成長。我覺得七牛的最佳做法就是撮合擁有數據的人和能處理好數據的人,我們的目標是降低數據服務的使用門檻, 減少接入數據服務的溝通成本,讓數據擁有方和數據服務方都能更快地發展。

問:七牛的一站式數據平臺的開發現在處于什么階段?一站式數據平臺的技術難點在哪里?

我們已經在針對種子服務商逐個接入了,這個階段主要還是在摸清接入中可能會遇到的阻礙,以及需要我們調整平臺來解決的問題。這個平臺的技術難點在于對各個語言的支持、程序的隔離、快速伸縮,以及如何確保客戶數據的安全性。

問:為了實現一站式數據平臺的愿景,未來還有哪些需要做的?

除了繼續改善和穩定平臺,還要接入更多的供應商來滿足不同客戶的需求,設置更靈活的計費方式,建立更多的 demo來降低大家的接入成本,等等。

問:七牛最近推出的鑒黃服務是和圖譜科技合作完成的,兩個團隊各自的分工是什么?在未來七牛還會和什么樣的團隊繼續合作?

圖譜科技主要是提供監黃技術,我們的接入平臺提供了計算能力支持、伸縮性支持、計費支持。當然,整合的工作量不低,這也是未來我們的重要努力方 向,努力讓整個接入過程更加自動化,從而加快接入的速度。未來我們會接入更多的處理團隊,比如語音識別、面部識別、圖片深度壓縮、視頻指紋、視頻深度壓縮 等等。

問:你很喜歡算法,并且曾經在Topcoder上很活躍,請問你是否推薦其他程序員參與Topcoder或類似社區組織的活動?

我在Topcoder上算不上活躍,成績也只能算是勉強,不過 Topcoder 對我的幫助很大。在Topcoder上玩,最重要的一個層面在于思路的嚴密性,你少考慮一個環節,就一點分數都拿不到。當然,在那里我的建模能力,還有視 野都得到了很大的提高。我也很喜歡玩過 Topcoder 或者其他算法競賽的同事,他們的代碼出 bug 的概率很小,而且很多地方寫得很巧妙,我經常能發現一些對我很有啟發的代碼。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!