技術人攻略:七牛是國內第一家選Go語言做服務端的公司,你也曾多次談到選擇Go的理由,創業公司做這種重大決策要冒很大風險,能不能談談做這些決策背后的思路?
蠻多人質疑七牛,為什么早在2011年,Go的語法還沒完全穩定下來的情況下,選擇Go作為存儲服務端的主體語言。這種看上去激進和冒險的決定,實際上經過了嚴格的論證過程,并不是隨意為之。我一直認為:選擇和信息的對稱程度有關系。當你越不了解一個東西,越會趨向選擇保守性的方案,而當你對某個領域了解得足夠透徹,你的決策過程會非常自然。
我做決策前,會先試圖了解整個背景,看別人一般怎么做,有哪些新興的idea,這些idea是不是靠譜,如果我來做,會傾向于往哪個方向走。當你深入研究了新技術的思考方式,以及它要解決的問題,就會知道它和自己要解決的問題有多大的相關性。這就要求你具備嚴謹的思維方式,在很多人眼里,嚴謹是古板的,會扼殺創新。但在我看來,嚴謹不是創新的對立面,而是創新的基礎。奇思妙想再好,如果不經過嚴謹的推理過程,就無法變成行動力。用這樣的方式分析,有可能會出現一些比較大膽的選擇,但其實并不是隨意決定。如果你僅僅知道一些名詞,不了解背后的具體原理,必然會傾向于選最保守的方案。
我曾多次公開分享過Go語言的亮點,包括它的并發編程模型、對軟件工程的支持,以及對編程哲學的重塑。在我看來,Go對并發與分布式的支持算不上特別,所有新興的語言也都有工程化的思想,所以編程哲學的重塑才是Go語言獨樹一幟的根本原因,其它語言仍難以擺脫OOP或函數式編程的烙印,只有Go完全放棄了這些,對編程范式重新思考,對熱門的面向對象編程提供極度簡約但卻完備的支持。Go把其全新的編程理念,稱為面向連接的語言。作為一名老程序員,我認為Go的編程哲學獨具魅力,超越其它新興語言。
前VMware云平臺的首席技術官Derek Collison,曾在2012年斷言Go語言將在兩年內制霸云計算。我認為他的說法略有激進,但和實際的發展趨勢吻合,Docker、CoreOS等新的云計算基礎設施都基于Go。在我看來,Go是互聯網時代的C語言,不僅會制霸云計算,10年內將會制霸整個IT領域。
技術人攻略:你這種不迷信權威,獨立思考的思維方式,是從什么時候形成的?這種思維方式給你帶來了哪些益處?
從初中起,我就發現大人們有時也會做出不可理喻的決定,于是就開始有了獨立思考的習慣。核心就是一句話:凡事都要問個為什么,要有打破沙鍋問到底的精神,不可人云亦云。所以在學習的時候,我不喜歡簡單地去記老師教的結論,而是用推演的方式,研究書上的公式和理論到底是怎么來的。
進大學之后,接觸到《理論物理》這門課,學到拉普拉斯方程,能解高中所有物理問題。這個方程給了我很深的觸動,牛頓經典力學幾個公式看起來并沒有推導關系,但其背后卻原來有非常自然的內在關聯。
另一門《現代數學》也讓我受益很深,它對多維幾何、群論、分形學、混沌理論比較現代化的數學分支都有涉獵。其中分形幾何實際上是一面數學和計算機圖形學的交叉學科,讓我很想往深去挖,于是把圖書館所有關于分形和混沌的書都看了一遍,還寫了一個程序,把接觸過的分形模型都用計算機模擬了一遍。
這兩門課讓我看到了許多事物從不相關到相關的內在聯系,也推動了我去思考和探究背后的原因。長此以往,我發現從某種意義上看,這個世界沒有學科之分,計算機、代數、物理,并沒有非常明顯的邊界。
這種思維方式對我后來的工作有很大影響,舉個例子,蠻多人會認為,存儲不就是把東西存到磁盤里嗎,跟數學有什么關系呢?實際上往高深去做,存儲系統和數學有非常緊密的關聯。通常的存儲服務要保證數據不丟,必須存多份,存多份就會增加存儲成本,經典的3副本存儲,冗余度是3。想用更低的成本去存,就要用到域代數。
域代數遵循自然代數的加減乘除規律,但數據值控制在有限區域,不管怎么算,結果都在0到255這個域里面,所以叫域代數。存儲文件可以認為是0到255的一個序列,舉個例子,一個100K的文件拆成10份,每份是10K,存在10個地方,但文件仍然是一份。這時候用域代數里的加法(其實就是計算機中的異或操作),從這10份數據里取出一份校驗數據,數據變成了11份,它的冗余度是1.1。這是一種基于校驗碼的存儲方式,成本比較低,但效果和雙副本差不多,其中任何一個數據丟了,都能恢復回去。
利用域代數降低成本,在存儲領域是發展的必然方向,七牛的存儲2.0已經采用了這種方式。由此可以發現,任何一個方向的技術要做到頂峰,都必須橫向地去理解,因為世界上所有的事情都有關聯。想要對云存儲理解得更透徹,你必須理解整個世界,而不光是云存儲。所以學技術實際上是不能專精的,在專精的過程中遇到瓶頸,就要往廣度方向去挖掘。
技術人攻略:除了用域代數降低存儲成本,存儲的未來還會有哪些趨勢?
從降低存儲成本的角度看,算數冗余已經在算法上做到了比較極致的狀況,存儲領域接下來的突破,應該發生在材料科學上。生活中各種東西都在電子化,現實世界會逐步映射到比特世界,如果以這種方式瘋狂使用,必然會面臨能源危機。如何能讓存儲系統在常溫、不耗能的情況下運行,是接下來我們要面臨的一個重要問題。
可能大家會覺得七牛談這件事有點奇怪,但我卻認為未必。創業是一個不斷降低不確定性的過程,剛開始創業的時候,充滿了各種不確定性和不可控性,但不能停滯不前。這個過程中最麻煩的,是不能把自己看成必須怎樣做,要完全放空,不從各種可能性上去限制自己。至少走一步,大不了發現錯了回頭,其實也不晚。
如果七牛真要把存儲做到極致,一定會往材料這個方向走,因為它關系到我們能不能把存儲做長久。當然現階段,材料不是我們首要的關注點,我們的重點是針對客戶的訴求點,解決數據應用層面的問題。
之前網盤一直在打存儲配額戰,但都停留在把用戶的數據存下來,沒把它們用起來,所以網盤的用戶粘性很低,這也是我放棄做網盤產品的其中一個原因。直到現在我仍然看好個人云存儲的市場潛力,但我相信最后的產品形態不會是網盤,應該是更加垂直化的、由場景驅動的、讓數據流動起來的一種形態。
存儲領域真正的戰爭發生在應用層面,在數據量越來越大的情況下,所有公司都會面臨數據管理的難題。數據一定要流動起來才會產生價值,如果僅僅解決存儲,數據最終留在七牛的可能性不是特別高。七牛會對針對數據的使用場景,幫助客戶做標準化處理,實現數據價值的最大化。例如目前存儲最多的數據是圖片,圖片用戶的典型使用場景,是需要不同尺寸的縮略圖,我們提供了這樣的功能,用戶就省心多了,不用去重復去建設這個過程。
技術人攻略:回顧一下你的過往經歷,畢業后僅用2年時間,就成為WPS的首席架構師,這個過程是如何實現的?
金山在管理上給員工較大的自由度,所以個人的成長空間也挺大。我2000年加入金山,實習期間參與了WPS Office 2001的開發。分配給我的任務,是軟件的讀盤和存盤模塊。這個模塊當時的重要性并不那么高,它看上去簡單,但我發現其中有不少有意思的挑戰。挑戰之一,是要求你理解軟件的所有功能,以及每個功能的數據表達方式。這讓我無意中觸及到一個軟件系統最核心的東西——數據。順著這條線索,我研究了微軟Office各個功能模塊的數據存儲方式,并把一些有趣的實現方法分享給同事們,他們會吸收其中有益的部分,據此修改原有軟件的設計。
湊巧的是,一年之后,金山開始研發WPS 2002。新版本被稱作“格式兼容之戰”,為了實現對微軟Office文件格式的兼容,I/O成了戰略層面的技術,存盤功能從邊緣模塊,一下變成了整個WPS研發的核心模塊。從2002年底,我領導WPS整體架構設計,開始了WPS 2005長達3年的研發。
隨著對存儲更深入的理解,我們在軟件架構層面做出了創新,引入了一個數據層,抽象出所有數據的存儲過程。數據層誕生之前,傳統的“撤銷/重做”功能,通過對命令的反操作實現。這種做法非常笨重,所有新開發的功能,都必須考慮反操作怎么做。而數據層帶來的好處,是讓所有的數據天然可回滾,可以輕松支持多版本存盤、Undo/Redo(撤銷/重做),以及各種異步操作。
這個創新并不是對微軟的簡單模仿,其靈感來源于對增量存盤的思考。Office有個“快速存盤”概念,用戶正在編輯的內容,如果已經存過了一次盤,修改過后再次存盤,只需要在原來基礎上補加數據。相當于對同一個文件,存了兩個版本的數據。我想既然可以做快速存盤,那么就不必關心用戶到底做了幾個操作,要實現撤銷和重做功能,只需要基于數據狀態做前進和回退即可。
數據層的架構大大降低了研發的復雜度,在當時的金山起到了非常重要的作用。看上去,我像是很幸運,做的東西從邊緣模塊變成了核心模塊。我相信之前很多人接觸過存盤,但有多少人深入思考過其中的原理呢?我始終認為,任何一件事情,想要做到極致,必須把它當成一個學科來研究,把它琢磨透。假設這個東西很好玩,思考如果要把它做到極致,最終應該是什么樣子。如果僅僅當成一個簡單的任務完成,能取得的成果會很有限。
技術人攻略:你曾說過,金山向互聯網轉型的這個階段,也是你自己職業生涯中很痛苦的階段,你是如何度過的?
2006年是我職業發展的一個分界點,之前專心致志做WPS,沒有任何二心。但在這一年,我遇到了瓶頸,對自己如何往下走,感到十分迷茫。國內軟件業因為盜版盛行,生存堪憂,WPS雖然有不少用戶,但并沒有取得商業上的成功。從2002年起,我已經開始負責WPS的整體架構,但職位上的提升并沒有帶來任何成就感。如果產品無法讓最終用戶買單,從某種意義上說,你的價值并沒有被認證。
中國軟件產業被盜版打擊得根本起不來,而互聯網能天然抑制盜版,金山蠻早意識到這一點,開始探索辦公軟件的互聯網化。游戲是第一個從軟件變成互聯網的服務,游戲能成功轉身,很重要的原因,是因為單個游戲天然有生命周期,下個游戲不提供單機游戲,用戶自然也會接受。辦公軟件是工具,必須沿襲用戶的習慣,互聯網化相對難很多。如果僅僅把辦公軟件在Web上做一套,能夠為用戶提供什么新的價值呢?辦公互聯網化,最終必須顛覆原有形態,而不是做一個Web上的WPS,但在當時,我們實在找不到更好的方式。
2006年是我成為產品人的開始,一下子感覺到光有技術真的不行,必須理解業務及其運作方式,思考產品和商業的關系。為了拓寬眼界,我一方面廣泛參加行業里的會議、沙龍,找不同朋友聊產品方向;另一方面,我做了一個技術社區ECUG,探討Server端相關技術演進。這期間,我逐漸跳出辦公,橫向接觸其它領域。
在苦苦思索辦公軟件的未來方向時,我開始研究搜索引擎,順著這條線,發現分布式存儲的技術門檻相對較高,并且有可能發展出獨立的商業模式。當時移動互聯網正處于萌芽期,雷軍已經開始投資這個領域的初創公司。我認為手機一旦開始流行,鍵盤就不會再是人與人交互的主要形式,圖片、語音、視頻等富媒體會成為潮流,這將導致未來存儲的需求出現爆發式增長。
雖然已經確定了新的方向,如果想以此創業,又感覺自己還是太技術化了一點,欠缺的東西很多,獨立創業的難度蠻高。當時有兩個選擇,一是去剛成立的Google,但仍然是做桌面開發(Google Desktop),不符合我未來的發展方向;二是留在金山,成立金山實驗室,可自由探索新產品,這顯然更符合我的發展預期。
技術人攻略:后來你離開金山去盛大,又經歷了哪些故事?
金山實驗室成立的初衷是做一個偏孵化器的機構,可以脫離開WPS既定方向,借鑒Google 20%自由時間的管理方式,做一些全新的產品探索。于是先從內部拉了幾位志同道合的同事,從零開始組建團隊,頂峰時期差不多有10人。早期我們的步子不敢邁得太快,產品重點放在分布式存儲研發,并承接了金山一些內部項目,好讓自己的存儲產品落地。








