我在QQ郵箱的這四年
![](http://image.woshipm.com/wp-files/img/95.jpg)
恍惚間已經(jīng)工作了四年有余,很幸運剛畢業(yè)就遇到一個很好的鍛煉機會,05年7月份剛成立的騰訊廣州研發(fā)中心,主要負責(zé)騰訊的郵箱業(yè)務(wù),我是在06年2月份加入到這個團隊,也算是見證了QQ郵箱的整段發(fā)展經(jīng)歷。有些記憶隔的太久,可能時間和細節(jié)上不太準(zhǔn)確,盡量去回憶吧。
寫這個系列的文章也是對自己過去四年工作的一次回顧和總結(jié),我會結(jié)合自己的經(jīng)歷和感受來寫,視角不會太開闊,用平鋪直敘的方式吧,就像講故事,我是一個沒有太多故事 但卻喜歡講故事的人:)
也許大家都聽說過騰訊做郵箱的那段往事吧,創(chuàng)業(yè)團隊太自信了,覺得把郵箱放到客戶端上依賴QQ巨大的用戶 量自然就會成功,但是結(jié)果卻恰恰相反,糾正錯誤認識,在04年緊急做了QQ郵箱的web版,也就是QQMail2.0版本,這個版本明顯過于倉促,和網(wǎng)易 等其他郵箱應(yīng)用相比,差距很大。騰訊在05年中旬收購了foxmail及其團隊,成立了廣州研發(fā)團隊,主要負責(zé)QQ郵箱的開發(fā)和運營。很明顯,公司非常重 視郵件這一塊,也基本承認了之前的判斷錯誤,所以打算下大力氣做好郵箱業(yè)務(wù),這為之后QQ郵箱能夠取得優(yōu)異成績奠定了政策基調(diào)。
在 計算機軟件領(lǐng)域,一款成功的產(chǎn)品背后一般都會有一個明星人物,QQ郵箱也不例外。QQ郵箱的這個關(guān)鍵人物大家應(yīng)該也都知道,他就是foxmail的作者張 小龍。09年賴勇浩同學(xué)在一次技術(shù)交流中談過他心目中的幾個國內(nèi)頂尖程序員和其成功的軟件作品,有求伯君和wps,有鮑岳橋和ucdos3,有王江民和 kv100,有梁肇新和超級解霸3,有張小龍和foxmail,有侯延堂和flashget等等。小龍被認為是國內(nèi)第二代程序員中的領(lǐng)軍人物,他曾經(jīng)是國 內(nèi)頂尖的程序員,然而他在QQ郵箱的整個發(fā)展過程中不是以技術(shù)人員的身份在指導(dǎo),如果要用一個最合適的身份來形容他,我覺得是產(chǎn)品經(jīng)理。小龍曾經(jīng)在內(nèi)部發(fā) 表過一篇文章,這篇文章講述了他對互聯(lián)網(wǎng)團隊管理的一些觀點,他認為互聯(lián)網(wǎng)團隊中的管理不是管人,而是管理產(chǎn)品體驗,以產(chǎn)品體驗為核心,產(chǎn)品設(shè)計和開發(fā)人 員與產(chǎn)品共同提升,共同進步。小龍之于QQ郵箱的影響正如喬布斯之于蘋果的影響。
QQ郵箱3.0版應(yīng)該是廣研自主研發(fā)的第一款郵 箱產(chǎn)品,2.3版是從總部繼承過來的,3.0版的后臺很多代碼也是從2.3版繼承過來的。3.0版的UI有點像hotmail和outlook的綜合體, 思路很明顯,把郵件客戶端做到web上面,做一個富客戶端的郵件應(yīng)用服務(wù)。當(dāng)時國內(nèi)的郵件應(yīng)用第一梯隊是網(wǎng)易和雅虎中國(中國雅虎是之后的事情),第二梯 隊的是新浪、搜狐、tom在線、21cn等門戶,第三梯隊是一些獨立的郵件服務(wù)商。當(dāng)時大家經(jīng)常上艾瑞網(wǎng)看排名,QQ郵箱當(dāng)時排名在12左右,還進入不了 前三梯隊,市占率低到可以忽略。當(dāng)時的目標(biāo)是在一兩年內(nèi)進入第二梯隊,我想,如果當(dāng)時確定目標(biāo)是超越網(wǎng)易成為國內(nèi)第一,估計是沒人相信的,包括我們自己。
3.0 版是廣研的處女作,投入了全部的人力物力,采用了當(dāng)時業(yè)界最先進的技術(shù)方案和最好的UI設(shè)計,并且創(chuàng)新的采用outlook的三欄結(jié)構(gòu),很像郵件客戶端, 這是一次軟件服務(wù)化的嘗試。
我是06年2月份加入廣研,當(dāng)時3.0已經(jīng)渡過了最繁忙的開發(fā)階段,進入了小范圍的公測階段,用戶可 以在2.3版和3.0版之間切換。3.0版的集中開發(fā)大概是半年多時間,05年中旬廣研招兵買馬的時候,大部分人沒有郵箱產(chǎn)品的相關(guān)開發(fā)經(jīng)驗,當(dāng)時是在摸 索中前進。然而,當(dāng)時的團隊卻采用了業(yè)界最先進的ajax技術(shù)架構(gòu),當(dāng)時的javascript代碼有很重的面向?qū)ο蟮奈兜?,用傳統(tǒng)的軟件工程思想構(gòu)建了 整個web框架,從軟件的開發(fā)流程來說,這并沒有什么問題,但是產(chǎn)品卻有很大的問題出現(xiàn)了–慢,不是一般的慢,當(dāng)時除了較快的電信網(wǎng)用戶可以登陸進郵箱 之外,其他的用戶基本上都被卡在登陸上。06年的大部分時間,整個團隊都在解決速度慢的問題,嘗試了很多方法,把js容量壓縮掉了一半,js混淆之后又壓 縮了很多,js文件分開為多個,但始終沒有根本的轉(zhuǎn)變,速度的提升仍然不能被用戶接受?,F(xiàn)在回過頭分析這個問題,我覺得物理上的壓縮和分割js文件之所以 解決不了問題是因為問題的根本在于js的邏輯架構(gòu)上,當(dāng)時的js有明顯的基類和繼承類結(jié)構(gòu)體系,這種結(jié)構(gòu)并不適合物理上的分割,即使分割開,渲染消耗的時 間是節(jié)省不下來的。
3.0版的后臺基本上是繼承的代碼和開源代碼的綜合。最重要的郵件投遞模塊采用的是當(dāng)時最好的投遞引擎 postfix,web端采用的是apache。郵件存儲是簡單的單文件存儲方式,用戶數(shù)據(jù)存儲也是比較簡單的,帳號和郵件列表是合并存儲在一起的。這個 架構(gòu)對于支撐當(dāng)時的用戶規(guī)模是足夠的。
06年之前廣研在做QQ郵箱開發(fā)和運營的人數(shù)是比較少的,所以06年吸納了不少的畢業(yè)生, 我就是第一批廣研接收畢業(yè)生中的一員,當(dāng)時3.0版的主要開發(fā)人員集中在兩個小組:QQMail小組和系統(tǒng)架構(gòu)組,從名字上看,應(yīng)該是QQMail小組負 責(zé)產(chǎn)品層面的開發(fā),系統(tǒng)架構(gòu)組負責(zé)后臺架構(gòu)的研究和開發(fā),不過我當(dāng)時感覺兩個組差別并不大,都是在做產(chǎn)品開發(fā),都同時做前臺后臺,可能是人手緊張的緣故 吧。QQMail小組除了做產(chǎn)品開發(fā)之外,還負責(zé)產(chǎn)品的運營工作,人數(shù)上稍微多一些。我加入的是QQMail小組,最初是以實習(xí)生身份參與到3.0的開發(fā) 中,工作任務(wù)比較雜,寫一些cgi,做一些內(nèi)部系統(tǒng)和統(tǒng)計的工作,其余的大部分時間是在讀代碼,也就是上面提到的那些js代碼,后臺代碼和cgi的代碼。 這近三個月時間是我有史以來精力最旺盛的一個階段了,把所有的代碼梳理了一次,寫了好幾本筆記,現(xiàn)在回憶起來覺得真是太不可思議了。
QQMail 小組當(dāng)時的組長是ted,系統(tǒng)架構(gòu)組的組長是harvey,兩位老大對我的影響都很大,我后來分別在兩位老大麾下做了兩年,從兩位老大身上學(xué)到很多東西, 他們也給了我很多鍛煉的機會。
ted老大當(dāng)時主要負責(zé)QQ郵箱的產(chǎn)品開發(fā)運營方面的管理,在我進組之后,當(dāng)時的3.0已經(jīng)過了集 中開發(fā)階段,開始進入優(yōu)化階段,對運營質(zhì)量提出了更高的要求,當(dāng)時整個QQ郵箱的運營只有一個粗糙的數(shù)據(jù)統(tǒng)計系統(tǒng)和一個nagios系統(tǒng),數(shù)據(jù)的收集和統(tǒng) 計的方法比較簡單,cgi寫日志然后收集起來之后再運用shell統(tǒng)計入庫,甚至數(shù)據(jù)的頁面表現(xiàn)也是shell做的。ted安排aoger為我的導(dǎo)師,我 跟著aoger邊熟悉系統(tǒng)邊做一些數(shù)據(jù)統(tǒng)計方面的嘗試,偶爾也會寫一些產(chǎn)品cgi。aoger是一位相當(dāng)有耐心的導(dǎo)師,尤其是面對我這種打破沙鍋問到底類 型的學(xué)生,aoger在最初給了我最多的幫助,沒有aoger的幫助,我不太可能在3個月理清整個QQ郵箱的架構(gòu)。aoger解答不了的問題,他會推薦更 合適的同事給我,不過我比較取巧,遇到這種情況一般就去問ted老大了:)也正是在這些和ted老大的問答過程中,增加了彼此的了解,這為以后ted能夠 不失時機的給我最恰當(dāng)?shù)膰L試機會奠定了基礎(chǔ),不過最重要的還是ted的信任。
跟著aoger先后做了運營監(jiān)控系統(tǒng)和一些相關(guān)的統(tǒng) 計系統(tǒng)之后,ted給了我第一個機會獨立完成一個系統(tǒng),那就是廣研的業(yè)務(wù)數(shù)據(jù)系統(tǒng),這個系統(tǒng)包括數(shù)據(jù)的收集、整理分析、報表展示和數(shù)據(jù)波動報警等功能,這 個系統(tǒng)至今仍然在使用,后臺架構(gòu)也基本沒有什么改變,我在做這個系統(tǒng)的過程中,熟練掌握了兩門新的語言:shell和python,熟練的程度足夠我運用 任何一門語言做整一個系統(tǒng)。在shell編程方面,很感謝felix的幫助,在python方面,很感謝vincent的推薦和幫助。兩位都是領(lǐng)域內(nèi)的高 手,對編程語言的運用駕輕就熟。shell幫我在數(shù)據(jù)收集的自動化方面做到爐火純青,收集、糾錯和報警一條龍,而且代碼相當(dāng)干凈,值得反復(fù)閱讀(請允許我 陶醉一下);python是一門我非常喜歡的編程語言,讓我癡迷了2年,甚至在去年還閱讀了一些剖析python源碼的書籍,我主要用python做內(nèi)部 系統(tǒng)的表現(xiàn)網(wǎng)站,報表、圖標(biāo)、趨勢圖無所不能,而我最滿意的是用python設(shè)計實現(xiàn)了一個輕量的模板語言,這個語言幫助我通過簡單的配置就可以做出一個 統(tǒng)計頁面的表現(xiàn)和數(shù)據(jù)提取,非常方便,現(xiàn)在還有同事在使用這個模板語言,代碼也是相當(dāng)干凈(我又陶醉了)。
一個合格的程序員不會 滿足于做重復(fù)的事情,雖然后續(xù)接了不少的內(nèi)部系統(tǒng)開發(fā),本來都是可以簡單的拷貝前一個系統(tǒng)修改一下就了事的,不過我把每一個系統(tǒng)都做的不一樣,每個系統(tǒng)都 要有至少一個新亮點,ted后來覺得我有點過于埋醉于技術(shù)疏于組織方面的鍛煉是有證據(jù)的。不過ted還是很信任我,陸續(xù)又讓我參與到產(chǎn)品層面的開發(fā)中,這 次我又幾乎獨立完成了QQ郵箱的自助服務(wù)系統(tǒng),包括faq及其查詢、最近登陸記錄查詢、最近收發(fā)信查詢和最近刪信查詢等若干輔助用戶查詢的功能。這是我首 次做后臺服務(wù),后來這個服務(wù)相當(dāng)穩(wěn)定,其后臺就成為了發(fā)信狀態(tài)查詢的后臺,現(xiàn)在仍然在運轉(zhuǎn)著。也正是由于這個發(fā)信狀態(tài)查詢服務(wù)的成績,小龍把我調(diào)到了架構(gòu) 組參與到閱讀空間的開發(fā)中去,雖然那個服務(wù)是我自己認為做的最差的一個服務(wù),但是卻有很大的意義。這也驗證了互聯(lián)網(wǎng)開發(fā)是結(jié)果驅(qū)動而非過程驅(qū)動的一個實 證。
雖然06年的我得到了很多的鍛煉的機會,做出了一些成績,但是QQ郵箱這個時候仍然徘徊在速度和功能的博弈中,當(dāng)時公司內(nèi)部 在進行hummer計劃,廣研這邊除了QQ郵箱之外,要另外做一個hummermail,架構(gòu)組為此把后臺的架構(gòu)進行了一次徹底的重構(gòu),把用戶數(shù)據(jù)存儲模 塊做成了一個通用性更好的存儲服務(wù),事實證明,這個存儲服務(wù)成為了廣研最核心的一個服務(wù),支撐著絕大多數(shù)體驗的數(shù)據(jù)存儲;把帳號信息獨立出來做成一個新的 帳號系統(tǒng);由于新郵件提醒的重要性,特別為郵件提醒做了一套后臺,實現(xiàn)實時穩(wěn)定的郵件提醒功能。這次重構(gòu)雖然沒能挽救3.0的失敗和hummermail 的流產(chǎn)(后話了),但是卻成為全新版本QQ郵箱的最核心后臺,相當(dāng)了不起的一次重構(gòu),足以載入史冊。
至于3.0版的失敗,那是一 個更驚心動魄的歷程,鳳凰涅盤,浴火重生。
來源:249553920.qzone.qq.com/blog/
- 目前還沒評論,等你發(fā)揮!