技術(shù)人攻略:你這種不迷信權(quán)威,獨(dú)立思考的思維方式,是從什么時(shí)候形成的?這種思維方式給你帶來了哪些益處?
從初中起,我就發(fā)現(xiàn)大人們有時(shí)也會(huì)做出不可理喻的決定,于是就開始有了獨(dú)立思考的習(xí)慣。核心就是一句話:凡事都要問個(gè)為什么,要有打破沙鍋問到底的精神,不可人云亦云。所以在學(xué)習(xí)的時(shí)候,我不喜歡簡(jiǎn)單地去記老師教的結(jié)論,而是用推演的方式,研究書上的公式和理論到底是怎么來的。
進(jìn)大學(xué)之后,接觸到《理論物理》這門課,學(xué)到拉普拉斯方程,能解高中所有物理問題。這個(gè)方程給了我很深的觸動(dòng),牛頓經(jīng)典力學(xué)幾個(gè)公式看起來并沒有推導(dǎo)關(guān)系,但其背后卻原來有非常自然的內(nèi)在關(guān)聯(lián)。
另一門《現(xiàn)代數(shù)學(xué)》也讓我受益很深,它對(duì)多維幾何、群論、分形學(xué)、混沌理論比較現(xiàn)代化的數(shù)學(xué)分支都有涉獵。其中分形幾何實(shí)際上是一面數(shù)學(xué)和計(jì)算機(jī)圖形學(xué)的交叉學(xué)科,讓我很想往深去挖,于是把圖書館所有關(guān)于分形和混沌的書都看了一遍,還寫了一個(gè)程序,把接觸過的分形模型都用計(jì)算機(jī)模擬了一遍。
這兩門課讓我看到了許多事物從不相關(guān)到相關(guān)的內(nèi)在聯(lián)系,也推動(dòng)了我去思考和探究背后的原因。長(zhǎng)此以往,我發(fā)現(xiàn)從某種意義上看,這個(gè)世界沒有學(xué)科之分,計(jì)算機(jī)、代數(shù)、物理,并沒有非常明顯的邊界。
這種思維方式對(duì)我后來的工作有很大影響,舉個(gè)例子,蠻多人會(huì)認(rèn)為,存儲(chǔ)不就是把東西存到磁盤里嗎,跟數(shù)學(xué)有什么關(guān)系呢?實(shí)際上往高深去做,存儲(chǔ)系統(tǒng)和數(shù)學(xué)有非常緊密的關(guān)聯(lián)。通常的存儲(chǔ)服務(wù)要保證數(shù)據(jù)不丟,必須存多份,存多份就會(huì)增加存儲(chǔ)成本,經(jīng)典的3副本存儲(chǔ),冗余度是3。想用更低的成本去存,就要用到域代數(shù)。
域代數(shù)遵循自然代數(shù)的加減乘除規(guī)律,但數(shù)據(jù)值控制在有限區(qū)域,不管怎么算,結(jié)果都在0到255這個(gè)域里面,所以叫域代數(shù)。存儲(chǔ)文件可以認(rèn)為是0到255的一個(gè)序列,舉個(gè)例子,一個(gè)100K的文件拆成10份,每份是10K,存在10個(gè)地方,但文件仍然是一份。這時(shí)候用域代數(shù)里的加法(其實(shí)就是計(jì)算機(jī)中的異或操作),從這10份數(shù)據(jù)里取出一份校驗(yàn)數(shù)據(jù),數(shù)據(jù)變成了11份,它的冗余度是1.1。這是一種基于校驗(yàn)碼的存儲(chǔ)方式,成本比較低,但效果和雙副本差不多,其中任何一個(gè)數(shù)據(jù)丟了,都能恢復(fù)回去。
利用域代數(shù)降低成本,在存儲(chǔ)領(lǐng)域是發(fā)展的必然方向,七牛的存儲(chǔ)2.0已經(jīng)采用了這種方式。由此可以發(fā)現(xiàn),任何一個(gè)方向的技術(shù)要做到頂峰,都必須橫向地去理解,因?yàn)槭澜缟纤械氖虑槎加嘘P(guān)聯(lián)。想要對(duì)云存儲(chǔ)理解得更透徹,你必須理解整個(gè)世界,而不光是云存儲(chǔ)。所以學(xué)技術(shù)實(shí)際上是不能專精的,在專精的過程中遇到瓶頸,就要往廣度方向去挖掘。
技術(shù)人攻略:除了用域代數(shù)降低存儲(chǔ)成本,存儲(chǔ)的未來還會(huì)有哪些趨勢(shì)?
從降低存儲(chǔ)成本的角度看,算數(shù)冗余已經(jīng)在算法上做到了比較極致的狀況,存儲(chǔ)領(lǐng)域接下來的突破,應(yīng)該發(fā)生在材料科學(xué)上。生活中各種東西都在電子化,現(xiàn)實(shí)世界會(huì)逐步映射到比特世界,如果以這種方式瘋狂使用,必然會(huì)面臨能源危機(jī)。如何能讓存儲(chǔ)系統(tǒng)在常溫、不耗能的情況下運(yùn)行,是接下來我們要面臨的一個(gè)重要問題。
可能大家會(huì)覺得七牛談這件事有點(diǎn)奇怪,但我卻認(rèn)為未必。創(chuàng)業(yè)是一個(gè)不斷降低不確定性的過程,剛開始創(chuàng)業(yè)的時(shí)候,充滿了各種不確定性和不可控性,但不能停滯不前。這個(gè)過程中最麻煩的,是不能把自己看成必須怎樣做,要完全放空,不從各種可能性上去限制自己。至少走一步,大不了發(fā)現(xiàn)錯(cuò)了回頭,其實(shí)也不晚。
如果七牛真要把存儲(chǔ)做到極致,一定會(huì)往材料這個(gè)方向走,因?yàn)樗P(guān)系到我們能不能把存儲(chǔ)做長(zhǎng)久。當(dāng)然現(xiàn)階段,材料不是我們首要的關(guān)注點(diǎn),我們的重點(diǎn)是針對(duì)客戶的訴求點(diǎn),解決數(shù)據(jù)應(yīng)用層面的問題。
之前網(wǎng)盤一直在打存儲(chǔ)配額戰(zhàn),但都停留在把用戶的數(shù)據(jù)存下來,沒把它們用起來,所以網(wǎng)盤的用戶粘性很低,這也是我放棄做網(wǎng)盤產(chǎn)品的其中一個(gè)原因。直到現(xiàn)在我仍然看好個(gè)人云存儲(chǔ)的市場(chǎng)潛力,但我相信最后的產(chǎn)品形態(tài)不會(huì)是網(wǎng)盤,應(yīng)該是更加垂直化的、由場(chǎng)景驅(qū)動(dòng)的、讓數(shù)據(jù)流動(dòng)起來的一種形態(tài)。
存儲(chǔ)領(lǐng)域真正的戰(zhàn)爭(zhēng)發(fā)生在應(yīng)用層面,在數(shù)據(jù)量越來越大的情況下,所有公司都會(huì)面臨數(shù)據(jù)管理的難題。數(shù)據(jù)一定要流動(dòng)起來才會(huì)產(chǎn)生價(jià)值,如果僅僅解決存儲(chǔ),數(shù)據(jù)最終留在七牛的可能性不是特別高。七牛會(huì)對(duì)針對(duì)數(shù)據(jù)的使用場(chǎng)景,幫助客戶做標(biāo)準(zhǔn)化處理,實(shí)現(xiàn)數(shù)據(jù)價(jià)值的最大化。例如目前存儲(chǔ)最多的數(shù)據(jù)是圖片,圖片用戶的典型使用場(chǎng)景,是需要不同尺寸的縮略圖,我們提供了這樣的功能,用戶就省心多了,不用去重復(fù)去建設(shè)這個(gè)過程。
技術(shù)人攻略:回顧一下你的過往經(jīng)歷,畢業(yè)后僅用2年時(shí)間,就成為WPS的首席架構(gòu)師,這個(gè)過程是如何實(shí)現(xiàn)的?
金山在管理上給員工較大的自由度,所以個(gè)人的成長(zhǎng)空間也挺大。我2000年加入金山,實(shí)習(xí)期間參與了WPS Office 2001的開發(fā)。分配給我的任務(wù),是軟件的讀盤和存盤模塊。這個(gè)模塊當(dāng)時(shí)的重要性并不那么高,它看上去簡(jiǎn)單,但我發(fā)現(xiàn)其中有不少有意思的挑戰(zhàn)。挑戰(zhàn)之一,是要求你理解軟件的所有功能,以及每個(gè)功能的數(shù)據(jù)表達(dá)方式。這讓我無意中觸及到一個(gè)軟件系統(tǒng)最核心的東西——數(shù)據(jù)。順著這條線索,我研究了微軟Office各個(gè)功能模塊的數(shù)據(jù)存儲(chǔ)方式,并把一些有趣的實(shí)現(xiàn)方法分享給同事們,他們會(huì)吸收其中有益的部分,據(jù)此修改原有軟件的設(shè)計(jì)。
湊巧的是,一年之后,金山開始研發(fā)WPS 2002。新版本被稱作“格式兼容之戰(zhàn)”,為了實(shí)現(xiàn)對(duì)微軟Office文件格式的兼容,I/O成了戰(zhàn)略層面的技術(shù),存盤功能從邊緣模塊,一下變成了整個(gè)WPS研發(fā)的核心模塊。從2002年底,我領(lǐng)導(dǎo)WPS整體架構(gòu)設(shè)計(jì),開始了WPS 2005長(zhǎng)達(dá)3年的研發(fā)。
隨著對(duì)存儲(chǔ)更深入的理解,我們?cè)谲浖軜?gòu)層面做出了創(chuàng)新,引入了一個(gè)數(shù)據(jù)層,抽象出所有數(shù)據(jù)的存儲(chǔ)過程。數(shù)據(jù)層誕生之前,傳統(tǒng)的“撤銷/重做”功能,通過對(duì)命令的反操作實(shí)現(xiàn)。這種做法非常笨重,所有新開發(fā)的功能,都必須考慮反操作怎么做。而數(shù)據(jù)層帶來的好處,是讓所有的數(shù)據(jù)天然可回滾,可以輕松支持多版本存盤、Undo/Redo(撤銷/重做),以及各種異步操作。
這個(gè)創(chuàng)新并不是對(duì)微軟的簡(jiǎn)單模仿,其靈感來源于對(duì)增量存盤的思考。Office有個(gè)“快速存盤”概念,用戶正在編輯的內(nèi)容,如果已經(jīng)存過了一次盤,修改過后再次存盤,只需要在原來基礎(chǔ)上補(bǔ)加數(shù)據(jù)。相當(dāng)于對(duì)同一個(gè)文件,存了兩個(gè)版本的數(shù)據(jù)。我想既然可以做快速存盤,那么就不必關(guān)心用戶到底做了幾個(gè)操作,要實(shí)現(xiàn)撤銷和重做功能,只需要基于數(shù)據(jù)狀態(tài)做前進(jìn)和回退即可。
數(shù)據(jù)層的架構(gòu)大大降低了研發(fā)的復(fù)雜度,在當(dāng)時(shí)的金山起到了非常重要的作用。看上去,我像是很幸運(yùn),做的東西從邊緣模塊變成了核心模塊。我相信之前很多人接觸過存盤,但有多少人深入思考過其中的原理呢?我始終認(rèn)為,任何一件事情,想要做到極致,必須把它當(dāng)成一個(gè)學(xué)科來研究,把它琢磨透。假設(shè)這個(gè)東西很好玩,思考如果要把它做到極致,最終應(yīng)該是什么樣子。如果僅僅當(dāng)成一個(gè)簡(jiǎn)單的任務(wù)完成,能取得的成果會(huì)很有限。