專訪天涯首席工程師王建科:技術人要有產品觀
原創(chuàng)【51CTO獨家專訪】“產品經理”這個詞在近兩年很火爆,其火爆程度更甚于中國互聯(lián)網飛速發(fā)展之前的“站長”一詞。然而在IT技術界,對產品經理有著廣泛的怨言,因為國內的大部分產品經理都并非技術出身,所以常在產品設計階段天馬行空,最后在產品失敗的時候埋怨技術不給力。每個產品的策劃者都希望有一些像Google工程師那樣,產品、技術雙修的高手來把控,但卻在人才市場苦尋不得,于是感嘆國內這方面的雙修人才為什么如此之少。不過,在中國互聯(lián)網發(fā)展早期,多面手才是常態(tài)。國內的網民們大多聽說過天涯社區(qū),只是也許很多人并不知道,這個有12年歷史的、現(xiàn)在同時在線已經超過50萬人的巨大社區(qū),在最開始幾年的產品設計、開發(fā)和運維,都是由一個人來完成的。他就是現(xiàn)在天涯的首席工程師、天涯論壇產品總監(jiān)王建科。
右為天涯首席工程師王建科(天涯ID:卓銳),左為51CTO編輯楊賽
51CTO編輯在2011年的QCon北京會場上對王建科進行了一次專訪。雖然說是專訪,但實際上并非以問答形式進行,因為建科看了一下打印出來的采訪提綱,便很投入的開始了。為了方便大家閱讀,下面將整個訪談過程按話題整理成文本記錄,大致分為天涯的技術發(fā)展歷程、天涯界面的設計、對技術債務的觀點、對技術選型的觀點、對技術人員成長的建議、以及開源相關的一些話題。對于互聯(lián)網行業(yè)的開發(fā)、運維和產品運營人員而言,相信王建科的分享會給你帶來一些啟發(fā)。
天涯的技術發(fā)展歷程
王建科:天涯最初只有一個開發(fā)者,就是我。產品的設計和技術實現(xiàn)都是我。當時是用ASP來做,有很多困難,因為那時ASP這個技術沒有文檔,全靠摸索,不像現(xiàn)在,網上資料非常多。那是在98年底的時候。
天涯最開始上線運營的話是99年3月1號。我的ID是2月28號注冊的,是天涯第一個ID?;叵氘敃r,其實對技術的要求并不很高,只要把這個東西實現(xiàn)出來,快速的實現(xiàn)出來。當時整個互聯(lián)網的網民也比較少,所以用戶比較少,所以對整個性能的壓力也比較小。當然服務器硬件也比較差,大概是386這樣的吧(更正:此處內容有誤,應為586的處理器,運行系統(tǒng)為Windows NT 4.0,特此勘誤)。
51CTO:當時服務器是托管在機房?
王建科:當時我們還沒在機房,只有一條鏈路,好像也就是幾十K吧,馬上感覺不夠,就搬到電信的機房去了。當時電信還沒有IDC這個概念,也就是一張桌子,有個網線,連上去就行了(笑)。當時門檻是比較低的。
我們把天涯分為幾個階段,第一個就是2003年之前,剛起步的一個階段。網民比較少,當時網友還是一個比較異類的人群,ID千奇百怪的,談的話題別人都聽不懂。所以那個時候,同時在線也就是90人左右。2002年同時在線是1000人,到2003年的時候,同時在線就差不多快要10000人了。不過2003年那時候還是只有一臺服務器,又當web又當db,內存只有512MB,這個壓力可想而知。
當時天涯還有一個特點,就是帖子是不分頁的。一千回復也好,一萬回復也好,一個頁面都要全部加載進來。長帖對天涯的系統(tǒng)壓力非常大。
51CTO:長帖對系統(tǒng)的壓力反而比較大?
王建科:那當然,因為你那么多記錄都要同時讀出來。很多網站為了避免這個壓力,所以就把10個回復分一頁,這樣每次刷頁面只讀10條記錄。而天涯是一帖到底,這是很多網友喜歡天涯的一個地方。尤其當時都是撥號上網嘛,網速非常非常慢,所以這樣一帖到底也是比較方便閱讀。當時天涯聚集了很多網絡寫手,好比武林外傳的編劇,還有那個《成都,今夜請將我遺忘》的作者,等等,在天涯連載小說,還有很多網絡事件也在天涯出來。當時就是經常網聚啊,交流啊這些。
51CTO:所以你自己也是天涯的活躍用戶嘍。當時還是只有你一位技術人員么?
王建科:對,那時候還是只有我一個。這是2003年以前的情況。
2003年之后到2006年之間,是天涯發(fā)展的一個中期階段。這個階段天涯快速發(fā)展,從2003年的同時在線8000人,到2006年達到20萬。快速發(fā)展我覺得有幾個原因吧,第一個是大概在2005年左右,中國互聯(lián)網快速增長,網民大爆發(fā),天涯用戶也跟著往上增長。還有一個就是當時天涯的媒體性凸顯出來,因為天涯當時很多網絡事件和話題,很多媒體就把天涯作為一個新聞源去報導,這樣相當于傳播天涯的品牌。
這樣就導致了天涯的快速增長,而天涯的服務器這時候增長的也比較快……
51CTO:不再是一臺服務器了。
王建科:嗯,不再是一臺了。2004年的時候,已經是4臺web,2臺db了。之前已經是扛不住了,負載全都滿了這么一個狀況。后來我們就拆分嘛,把db拆分。天涯不是論壇分很多版塊嗎,所以就是把不同版塊拆分到不同的服務器上。如果是所有版塊在一個表里的話就很難拆分,所以我們就是一個版塊對應一套表。所以如果這個服務器壓力比較大的話,我們就可以把一整個版塊,就是一個表,遷移到別的服務器上去。
所以db方面就是按版塊拆分表這個模式。web方面就是增加?,F(xiàn)在web方面擴展比較容易點,最早做的時候就是通過session會話把web進行拆分。
db另一個方面就是不使用連合查詢。天涯最早為了優(yōu)化性能有幾個特點,一個就是不使用連合查詢。比如有的時候你要呈現(xiàn)用戶的名字啊,標題等信息的時候,就要去讀,那么我們的做法是在產生的時候就把信息寫到同一個地方去了,讀的時候就只要把它一起呈現(xiàn)出來。這樣表之間就沒有太多關聯(lián),因為表關聯(lián)也是十分影響性能的。而且表關聯(lián)還會造成難以拆分的問題。
還有就是一帖到底這個,我們的做法就是把所有回復寫到一個字段里面去。有新的回復時,就把這個內容插到字段最下面,這樣呈現(xiàn)的時候,只要讀一個字段就全出去了。這樣就極大的降低了db的I/O,因為多一次讀寫就多一次I/O嘛,你只有一個字段,就只有一個I/O;如果100個回復分為100個字段,那就是100倍的I/O,1000個就是1000個I/O。所以天涯把所有回復合并,就極大的減少了I/O。所以天涯才能大體做到“一帖到底”,不分頁。
另一個有關這個分頁。很多論壇數據量很大的時候,你越往后翻頁,處理的速度就越慢,效果很差了。所以天涯這邊我們用where子句來分頁。Where子句就是判斷,你點下一頁的時候,用where子句定位到這個下一頁的數據。所以這樣的話,你每次點下一頁,每次請求在性能上的消耗都是一樣的,一致的。
51CTO:就不用做n次計算了。
王建科:對,就不用再去計算我下一頁這個數據到底在什么位置,尤其數據量大的時候,這就很快。當然天涯只提供了下一頁的功能,而沒有提供直接到某一頁的功能,就只能一頁一頁翻這樣。
另一個就是鎖。很多網站采用了死鎖這種機制,但是天涯呢,因為網友看內容對一致性的要求并不高,我們就都全部允許臟讀。就是說你不用忽略這個更新,不用在讀的時候把它鎖上這樣。
51CTO:因為沒這個需要。
王建科:對,沒必要。因為我們的數據不像銀行數據,對一致性要求并不特別高,就避免了死鎖這樣的方式。
另外一方面就是我們也用了DNS輪詢,但是DNS輪詢這個效果并不是特別好,沒有我們想象的那么均勻,所以后來我們就自己寫了應用來控制負載均衡。
另一個就是在2003年后來壓力大的時候,我們開始用Squid做頁面緩存。當時因為天涯很多動態(tài)的內容,變化比較大,而用了頁面緩存之后,命中率在70左右吧,還不錯,減少了后端的很多壓力。
這樣就是2003年到06年這個階段。
那么07年到現(xiàn)在呢,就是比較強調架構化這個方面。07年之前我們不是只有電信這么一個鏈路嗎,網通用戶就抱怨很多,所以就購買了網通鏈路,然后用F5做鏈路負載均衡。
然后就是做更多的頁面緩存。Squid之后我們開始用Varnish,這個感覺效果更好一些。然后就是對頁面進行壓縮。因為天涯都是文本內容嘛,所以壓縮率能達到70%,效果挺好。然后就是memcached內存緩存,就是你要往db讀寫的內容都先放在memcached里面,這個命中率比較高,有90%。
所以就是一步一步做過來,先解決網通用戶的抱怨,再整個做優(yōu)化。我們最近有個問題,就是電信的鏈路不太穩(wěn)定,經常出現(xiàn)一些問題。因為海南這個位置就不在中國的骨干網上……
51CTO:邊遠了一點。
王建科:對,是比較邊遠的網絡節(jié)點,中間環(huán)節(jié)過多,有很多不穩(wěn)定。去年就有幾次這個問題導致天涯訪問慢或者是訪問不了。
我們這兩年也是在做一些優(yōu)化,采用一些開源的東西,比如Redis,我們一直在用,這個新浪微博也是在用。Redis用處之一就是統(tǒng)計點擊,因為用戶點一次我們就要統(tǒng)計一次點擊數,像天涯這樣訪問量上億的,對db的壓力就非常大,所以我們用Redis來做緩沖。原來我們要用20臺來做點擊的統(tǒng)計,那么現(xiàn)在只需要4臺web加1臺Redis就夠了。
有一個案例就是去年玉樹地震的時候,我們跟浙江衛(wèi)視合作一個活動,就是網友回一個帖子,浙江衛(wèi)視給災區(qū)捐一塊錢。然后就有很多網友刷帖啊,各種方式刷,還有那種編程序用機器刷的,最后就是大概24小時刷了一百萬回復出來。像這種熱點,技術上都是要做好應對的。所以去年的時候我們就開源了一個模塊叫做memlink,也是一個鏈表,當然我們叫它輕量級的鏈表,比Redis更加輕量級。因為Redis是一個通用的鏈表,所以內存占用多些,效率方面也慢點。而Memlink的話是我們專門為列表處理開發(fā)的,很多節(jié)點進行了合并。Memlink目前我們還是在內部試用,資料我們都公布出來了,在網上可以查到。
天涯界面為什么這么簡約
王建科:天涯界面為什么這么簡約,因為我不懂作圖嘛(笑)。我只懂顏色,色塊怎么調比較柔和,所以就做了這么一個非常簡約的東西出來。它簡約的原因可能在于它是技術人員做的吧,美工做的話,一般比較復雜。而且,天涯這十二年,其實用戶習慣也沒多大變化,有時候有人說要加一些內容,有很多網友反對的,我們也覺得可能會破壞現(xiàn)在這樣的閱讀體驗,因為閱讀還是需要一種簡練、高效的方式。所以天涯一直沒有那些花花綠綠的東西,只是現(xiàn)在廣告比較多了(笑)。
對技術債務的觀點
王建科:天涯本身不是技術驅動的公司。在中國互聯(lián)網做,第一位應該是運營能力,第二是產品,第三才是技術能力。用戶是三者的核心,技術嘛只要別拖后腿就行(笑)。運營我覺得對一個網站/產品的競爭力是非常關鍵的。天涯的技術我覺得在中國互聯(lián)網格局算是中等吧,比新浪啊,騰訊啊這些,還是要差不少距離。
對技術選擇的觀點
王建科:天涯其實很早都是低成本運營,服務器添加都非常的慎重,也都買很便宜的服務器,因為早期都沒有廣告收入?,F(xiàn)在服務器就比較多了,論壇大概有130臺web,三、四十臺db這樣。其實天涯對技術選擇就是實用的就可以,按需求選擇,不一定要很新的技術或超前的架構這些。都選擇一些成熟的、穩(wěn)定的技術,在國內外都有使用者的。我們的觀點就是讓技術保持樸素、簡單,讓運維團隊的效率更高一點。
技術人員如何進步?
王建科:在中國的話,技術人員在大企業(yè)成長的空間會更大一點,在中小企業(yè)的成長空間就會小一點,這是中國技術人員面臨的一個問題。
51CTO:意思是中國的技術人員還是盡量在大企業(yè)尋求發(fā)展是嗎(笑)?
王建科:這個嘛(笑),比如像我的話,其實從一開始就是同時做技術和產品兩條線。很多技術人員要往產品的方向轉,覺得有很大困難,但是我這邊就要求,技術人員也必須關注一些產品,因為接觸過產品的技術人員思考交流的方式跟沒接觸過產品的技術人員是不一樣的。
51CTO:意思是上升到需求的高度?
王建科:也不是吧,只是說他會比較貫通,他能夠考慮到一個產品使用會不會有問題,技術特點方面能不能作出更漂亮的功能。像是國外很多互聯(lián)網產品都是技術人員驅動的,好比Google這樣的。那么我也會鼓勵我們的技術人員,多關注產品,參與一些決策。否則的話,現(xiàn)在很多公司一個常態(tài)就是,運營人員埋怨產品,然后技術就成了推脫責任的借口,我們叫做“炮灰”(笑),很辛苦,又沒有成就感。這是不利的,所以就想怎么把這部分和運營團隊糅合在一起,共同做一件事情,共同關注用戶。
這是知識面方面。另一方面技術人員也要擴展一下深度,還是要走專業(yè)化的路線。所以我們也鼓勵技術人員進行交流,好比劉天斯,就很喜歡寫博客分享一些東西,這個過程也學到很多東西。他本身在這方面鉆研也比較深,在專業(yè)化方面是做的很不錯的。(注:劉天斯是天涯的系統(tǒng)管理員,51CTO 2011年博客大賽的十強之一,前一陣子51CTO系統(tǒng)頻道剛剛對他做過專訪。)
有關開源的看法
王建科:關于開源,現(xiàn)在有一個很好的趨勢。幾年前我們都說,外國人做開源是外國人吃飽了撐著在做,中國人做開源是中國人在餓著肚子做(笑)。當然就是人們看不出開源這個東西怎么賺錢,所以就沒有支撐了,沒有后繼的一個東西。所以那時候中國做開源沒什么成功的東西,只是用。
現(xiàn)在看來我覺得有一些改觀了,這個改觀有幾個方面的原因。一個就是中國互聯(lián)網格局不再局限于技術了,而是有更多運營和產品。所以你可以把自己的技術公布出去,而不用擔心對你的競爭造成很大壓力。這樣就鼓勵了大家以更開放的心態(tài)來做技術。另一方面也是很明顯的,就是中國的技術人員也在積累,就有了這個實力去做一些開源。再就是經驗。我們經驗成熟了之后,跟國外技術的對接就更加容易了。以前我們覺得國外技術好像很超前,我們這邊還好像小學生一樣;而現(xiàn)在已經改變了,中國已經是最大的互聯(lián)網市場,所以差距會越來越小。運營的因素,用戶量的因素,導致技術的差距越來越小,所以慢慢的中國也會有一些很好的開源項目出來。
【編輯推薦】