Web 2.0中的LAMP結(jié)構(gòu)開發(fā)與運(yùn)營
文 / 錢宏武
Web2.0,讓我喜歡讓我憂
“Web2.0時(shí)代主角的光環(huán)頭一次照在了程序員的腦袋上,一直默默無聞、辛勤工作的工程師不再是后臺(tái)不為人知的工作人員,也開始走到前臺(tái)。而歷史告訴我們,每一個(gè)成功的主角背后,都是血淚和汗水。一個(gè)互動(dòng)系統(tǒng),作為公司的核心,或者說領(lǐng)導(dǎo)關(guān)注的重點(diǎn),工程師的日子大概不會(huì)像以前普通的工作人員那樣省心。
首先就是系統(tǒng)的不穩(wěn)定成了無數(shù)程序員的夢魘。不過做程序的都知道,花了無數(shù)錢的Windows,當(dāng)機(jī)那是家常便飯,所以對(duì)于自己程序的設(shè)計(jì)缺陷,上線運(yùn)行,偶爾當(dāng)當(dāng),只要不造成數(shù)據(jù)丟失,大概每個(gè)人都會(huì)認(rèn)為是正常。“等一會(huì),重啟一下”也成了每個(gè)開發(fā)者的口頭禪,而在互聯(lián)網(wǎng),在把流量和錢劃等號(hào)的領(lǐng)導(dǎo)面前,這個(gè)口頭禪和搶他錢沒什么兩樣,在領(lǐng)導(dǎo)可以殺死你的眼光下,每個(gè)工程師都是極其頭疼。
其次就是Web2.0中間無數(shù)突發(fā)奇想的功能。由于動(dòng)態(tài)產(chǎn)品重點(diǎn)不在于內(nèi)容,于是功能成了很多產(chǎn)品的發(fā)展或者考核的重點(diǎn)。但是,凡有一點(diǎn)程序開發(fā)常識(shí)的人都知道,功能眾多是程序穩(wěn)定的大忌,在第一個(gè)問題都還沒有解決的情況下,第二個(gè)問題又成了一個(gè)巨大的包袱。
最后,需求朝令夕改。這是程序員最不喜歡的。很多情況一般是一個(gè)外行的領(lǐng)導(dǎo),或者說有一些不負(fù)責(zé)任的產(chǎn)品。但更多的時(shí)候,產(chǎn)品設(shè)計(jì)人員有時(shí)也很委屈,不是他們想不明白,這個(gè)世界變化太快。
Web2.0互動(dòng)產(chǎn)品開發(fā)的三個(gè)思想誤區(qū)
以上三個(gè)問題,是Web 2.0的開發(fā)人員最常碰見的。對(duì)于這三個(gè)問題,我初次碰到的時(shí)候,也是快崩潰了,后來慢慢找到解決方法。在解決這些問題中發(fā)現(xiàn),對(duì)于這種互動(dòng)產(chǎn)品的開發(fā),很多理念和傳統(tǒng)的開發(fā)是有差別的,甚至有些是完全相反。也就是說,如果要解決這些問題,首先是解決我們思維中的一些禁錮,或者說思想上的一些錯(cuò)誤觀點(diǎn)。
第一種錯(cuò)誤觀點(diǎn)就是認(rèn)為數(shù)據(jù)是寶貴的,寧可出錯(cuò),也不能丟失數(shù)據(jù)。在傳統(tǒng)系統(tǒng)中(如財(cái)務(wù)系統(tǒng)),數(shù)據(jù)很多都是涉及到錢的,丟了一條,就會(huì)出現(xiàn)財(cái)務(wù)賬面對(duì)不上。而在互聯(lián)網(wǎng)運(yùn)行的產(chǎn)品中,數(shù)據(jù)從來都是第二位的,因?yàn)閿?shù)據(jù)大部分都是文章,或者博客,很多統(tǒng)計(jì)也是點(diǎn)擊數(shù)。這些數(shù)據(jù),點(diǎn)擊數(shù)少幾個(gè)多幾個(gè)、文章的發(fā)表數(shù)量的統(tǒng)計(jì)少幾篇多幾篇沒人會(huì)說什么。如果一定要追求完美,程序的復(fù)雜程度將增加許多,而這種復(fù)雜程度將直接導(dǎo)致系統(tǒng)的故障頻繁。
第二種,就是真實(shí),這是很多優(yōu)秀程序員最容易犯的錯(cuò)誤。系統(tǒng)出錯(cuò)了,老老實(shí)實(shí)報(bào)一個(gè)大錯(cuò),有時(shí)候還怕別人不知道,用大大的紅字提醒。在此,我借用產(chǎn)品的一個(gè)詞,就是用戶感受度。因?yàn)閷?duì)于互動(dòng)產(chǎn)品來說,很多人過來用,都是尋一開心,博客也罷,論壇也罷,貼吧也罷,都是能有一個(gè)愉悅的心情。是否是真的,他并不在乎。所以出了錯(cuò),最好的方式是向那些政客們學(xué)習(xí),掩蓋住,別讓用戶知道。如果有較真的用戶,系統(tǒng)可以再提示他出了一些小問題。很多時(shí)候,系統(tǒng)有點(diǎn)小故障,一會(huì)也就過去了。在這一點(diǎn)上,一定要注意把握好度,你不能什么都欺騙,而具體的度在哪里,就看個(gè)人的掌握。
第三種,系統(tǒng)之間,關(guān)聯(lián)度比較小。很多人在設(shè)計(jì)互動(dòng)架構(gòu)的時(shí)候,由于第一種思維方式,系統(tǒng)和系統(tǒng)之間、機(jī)器和機(jī)器之間、模塊和模塊之間,耦合度非常高,這種高耦合度的好處就是保證數(shù)據(jù)的完整和真實(shí),但對(duì)應(yīng)的就是開發(fā)的成本和穩(wěn)定運(yùn)行就會(huì)很差。
以上幾點(diǎn),我覺得是互聯(lián)網(wǎng)互動(dòng)產(chǎn)品和傳統(tǒng)開發(fā)中,思考方式最大的區(qū)別。在總結(jié)這么多問題的前提下,下面我來談?wù)勛约簩?duì)互動(dòng)產(chǎn)品開發(fā)和運(yùn)維方式的一些感受。
開發(fā)和運(yùn)維
對(duì)于互動(dòng)產(chǎn)品來說,一期開發(fā)完畢并且上線,只是走完了萬里長城的第一步,接下來將面對(duì)越來越大的問題和劫難。對(duì)于Web2.0互動(dòng)產(chǎn)品來說,一般有一個(gè)臨界點(diǎn)。在這個(gè)點(diǎn)之前,一切都很順利,性能穩(wěn)定、速度快、用戶反應(yīng)也很好,開發(fā)也是有條不紊。突然有一天,一切都改變了,系統(tǒng)開始不穩(wěn)定、速度變得極慢、各個(gè)方面的需求開始增多,開發(fā)開始出現(xiàn)混亂。這么多問題,怎么解決?是先解決穩(wěn)定問題,還是先招人解決開發(fā)問題,還是加機(jī)器?
我的建議是,如果問題已經(jīng)產(chǎn)生了,首要解決的一定是穩(wěn)定。穩(wěn)定一般都是由數(shù)據(jù)庫引起的,優(yōu)化數(shù)據(jù)庫、索引,然后更改讀取的方式,把數(shù)據(jù)進(jìn)行分拆,都是你可以做的。優(yōu)化完了之后,砍掉一期開發(fā)中華而不實(shí)的功能。注意,一般的互動(dòng)產(chǎn)品通常是讀取具體內(nèi)容的那個(gè)頁面訪問量最大,所以那個(gè)程序需要做到最簡單——什么功能都不要帶,就是讀取,最好是讀取的靜態(tài)頁面。至于動(dòng)態(tài)的部分,可以使用js回填的方式來控制,如果能跑出來,當(dāng)然是完美的頁面,如果這個(gè)動(dòng)態(tài)部分跑不出來,也不影響用戶瀏覽主要的內(nèi)容。這些做完后,下面的工作才是重點(diǎn)。
如何高效率地開發(fā)
系統(tǒng)穩(wěn)定后,需要考慮運(yùn)維中長期會(huì)碰到的問題,畢竟對(duì)于穩(wěn)定來說,最后其實(shí)就是通過系統(tǒng)架構(gòu),完成一個(gè)可以通過添加機(jī)器來完成對(duì)整體流量的上漲平衡。但對(duì)于日常的開發(fā),一旦處理不好,每天就會(huì)疲于應(yīng)付那些新需求,不太可能有精力投入對(duì)新系統(tǒng)的構(gòu)架和開發(fā)。其實(shí),對(duì)于那些突發(fā)奇想的功能,一般按照劃分,最多的就是對(duì)內(nèi)容的操作,畢竟現(xiàn)在所謂的2.0產(chǎn)品,歸到底,個(gè)人感覺就是圍繞文章如何分類的問題。
編輯或者產(chǎn)品的需求,一般最常見的也就是突發(fā)奇想的幾種分類或者排序而已,只是由于他們很在乎這種體現(xiàn)形式,如紅的還是藍(lán)的、帶圖還是不帶圖、或者是純圖,系統(tǒng)自動(dòng)出還是他來選擇、用戶能看不能看等。這些東西開發(fā)人員可能覺得不起眼,但對(duì)于編輯或者產(chǎn)品來說很重要,他們就是靠這些來實(shí)現(xiàn)他們的想法和創(chuàng)意,實(shí)現(xiàn)產(chǎn)品的推廣和運(yùn)營。對(duì)此,很多負(fù)責(zé)開發(fā)的人一般是兩種態(tài)度。
第一種是來者不拒,一視同仁,排期,一個(gè)一個(gè)做。這種做法一般是被下屬罵死,使得工程師流失率極高。由于流失率大,開發(fā)的質(zhì)量和速度自然不能保證。第二種來者皆拒,我這里很忙,我系統(tǒng)要升級(jí)。這種態(tài)度一般開始是慢慢地沒人搭理,后來就直接被投訴,然后
被干掉。
對(duì)于這些,最好的方式應(yīng)該是有選擇地答應(yīng)用戶的需求,要達(dá)到90%的需求都能滿足,然后自己開發(fā)一個(gè)開發(fā)平臺(tái)。不要覺得那是微軟或Borland才能做的事情,其實(shí)自己設(shè)計(jì)一個(gè)開發(fā)平臺(tái)很容易。當(dāng)那些瑣碎且重復(fù)的需求在你的工作計(jì)劃中占了2/3的時(shí)候,就需要這樣一個(gè)開發(fā)平臺(tái)了。
這個(gè)基本的開發(fā)思想,就是程序生成程序,完成開發(fā)中80%代碼重復(fù)的部分,然后完成剩下的20%。在開發(fā)說明中,按照要求一步一步去做,最后完成需求。面對(duì)這樣一個(gè)需求,一個(gè)初級(jí)工程師也能在30分鐘左右完成,并且保質(zhì)保量。這樣,你設(shè)置一個(gè)半人,就能應(yīng)付所有的需求。我見過很多人都有類似的自己代碼生成系統(tǒng),這里我講一下我當(dāng)時(shí)是怎么設(shè)計(jì)的。
當(dāng)時(shí)的工作主要是更新網(wǎng)站的內(nèi)容頁面,當(dāng)時(shí)有近30個(gè)頻道,每個(gè)頻道都有一個(gè)社區(qū)首頁,每個(gè)頻道基本是3 個(gè)月要求整體改一個(gè)版。平均下來,就是每三天就會(huì)有一個(gè)頻道需要改版。其他小的改動(dòng),基本每個(gè)頻道是每2周會(huì)有一個(gè)。也就說,一周的工作計(jì)劃中,一般會(huì)有2個(gè)大的頁面開發(fā),15 個(gè)的改動(dòng)。分析后發(fā)現(xiàn),就是圖、文、人繞來繞去,不同的形式顯示,寫了三個(gè)對(duì)象:
l 圖的對(duì)象
l 文字的對(duì)象
l 人的對(duì)象
然后,根據(jù)對(duì)象寫一個(gè)代碼生成,這個(gè)初期設(shè)計(jì)也比較簡單。就是說,就是幾種方案,就是文字取的方式和顯示方式,他們當(dāng)時(shí)就幾種,或者大類選取,比方說整個(gè)女人購物分類。下面所有版面的文章,然后顯示出最新的10條,開發(fā)一個(gè)選擇的條件,根據(jù)選擇的條件,選擇不同的類對(duì)象的代碼,然后傳入對(duì)象方法中的參數(shù),再把代碼顯示在一個(gè)頁面中,拷貝后,放在程序中。熟練后,一個(gè)工程師在幾分鐘就能完成一個(gè)版塊。一般小的需求,都是一個(gè)版塊,大的頁面,也就是20~30個(gè)版面。這樣,小的需求基本是當(dāng)時(shí)來,當(dāng)時(shí)就能完成;大的也是上午提交需求,下午就能給用戶,這樣有很多好處。大體結(jié)構(gòu)圖如下:
1由于基本類可以集中很好的人來開發(fā),核心代碼質(zhì)量代碼很高,初級(jí)的人員由于只寫表現(xiàn)層,不涉及數(shù)據(jù)庫和底層的操作,不會(huì)影響整個(gè)系統(tǒng)。
2 由于速度非常快,需求還沒來得及換,我已經(jīng)寫完并且上線了,對(duì)方?jīng)]有時(shí)間提,避免了需求朝令夕改。
3 由于對(duì)具體操作人員要求很低,而且能保證時(shí)間和質(zhì)量。
4 大量瑣碎的工作可以由初級(jí)員工完成,這樣一個(gè)可以鍛煉他們對(duì)于程序的理解,也避免了高級(jí)工程師做這種大量重復(fù)而低級(jí)的工作。
有人曾經(jīng)建議過我用模板的方式來寫,就是大家常說MVC的模式,顯示和邏輯完全分開。這個(gè)我考慮后,個(gè)人覺得不太適合互動(dòng)產(chǎn)品,主要是從效率來考慮,畢竟,很多傳統(tǒng)的開發(fā)中間速度一般是不太考慮的。而對(duì)于互動(dòng)產(chǎn)品來說,如果慢或者說消耗系統(tǒng)資源巨大,那么這個(gè)開發(fā)基本是非常失敗的。
結(jié)語
對(duì)于互動(dòng)產(chǎn)品的開發(fā)和維護(hù)來說,需要抓住開發(fā)的重點(diǎn),而歸結(jié)起來,就是效率。很多項(xiàng)目經(jīng)理能注意到程序本身的效率以及修改的效率,其實(shí)更重要的是開發(fā)本身的效率,就是通過開發(fā)的積累,把很多開發(fā)的工作,變得像流水線一樣,可以讓比較初級(jí)的人員處理大量重復(fù)簡單的工作,這樣才能保證本部門人員慢慢從日常繁雜的開發(fā)中抽出時(shí)間做一些更基礎(chǔ)的工作。
作者簡介:
錢宏武,職脈網(wǎng)技術(shù)合作人,原搜狐互動(dòng)產(chǎn)品開發(fā)部主管,構(gòu)架并開發(fā)能承擔(dān)6000萬/日訪問的社區(qū)論壇,協(xié)助設(shè)計(jì)并運(yùn)營搜狐體育直播間,最高承擔(dān)48萬人同時(shí)在線觀看NBA直播,對(duì)于LAMP下的互動(dòng)產(chǎn)品開發(fā),有7 年的開發(fā)管理經(jīng)驗(yàn)。聯(lián)系方式:msn:qhw108@hotmail.com;qq: 690889126。