七牛首席架構師李道兵:在開源世界裏逼本身成長

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/200305程序員

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

圖片描述

問:你是從何時開始編程的?爲何沒有堅持本身原來的化學專業?數據庫

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

問:你認爲如今的開源社區環境跟你當初成爲Debian Developer時的環境有哪些差異?是否仍然鼓勵今天的程序員爲開源軟件作貢獻?api

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

我以爲程序員參與開源是好事。一方面開源世界有不少問題須要解決,解決這些問題能倒逼本身快速成長。對於我來說,若是沒有參與開源的話,個人水平會比如今差不少。另外一方面是理念方面的緣由,我以爲可以貢獻一點時間給全人類謀點福利是值得的,特別是在那些能夠沉澱下來的事務上。因此我也在維基百科、翻譯等項目上貢獻過本身的時間。七牛雲存儲

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

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

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

公司的優點在於能夠集中人力,因此在推動方面比較給力(好比 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 的機率很小,並且不少地方寫得很巧妙,我常常能發現一些對我頗有啓發的代碼。


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

圖片描述

相關文章
相關標籤/搜索