如何系統性地(dì / de)保障軟件的(de)性能
一(yī / yì /yí)個(gè)正在(zài)持續增加新功能的(de)軟件,尤其是(shì)類似QQ這(zhè)種做爲(wéi / wèi)一(yī / yì /yí)個(gè)超大(dà)規模客戶端軟件,又随時(shí)需要(yào / yāo)适應用戶要(yào / yāo)求和(hé / huò)發展的(de)需求,需要(yào / yāo)不(bù)斷的(de)做 快速的(de)更新,開發節奏非常快。而(ér)且因爲(wéi / wèi)我們的(de)用戶是(shì)海量用戶,用戶的(de)軟硬件環境非常複雜。性能作爲(wéi / wèi)軟件的(de)用戶第一(yī / yì /yí)體驗,如何去系統性地(dì / de)保障軟件的(de)性能,對 于(yú)QQ來(lái)說(shuō)就(jiù)變得非常重要(yào / yāo)。
那麽要(yào / yāo)保障持續開發過程軟件的(de)性能能夠得到(dào)保障應該做些什麽呢?
1. 需求階段開始考慮性能
首先從需求提出(chū)階段說(shuō)起,需求提出(chū)階段應該要(yào / yāo)開始考慮性能問題了(le/liǎo),産品經理提出(chū)需求之(zhī)前,必須要(yào / yāo)系統性地(dì / de)了(le/liǎo)解哪些因素會影響到(dào)軟件的(de)性能,這(zhè)些 因素包括但不(bù)限于(yú):需求的(de)處理時(shí)機,需求的(de)處理數量,需求的(de)處理是(shì)否涉及大(dà)的(de)IO,網絡,以(yǐ)及CPU。尤其是(shì)在(zài)使用特性上(shàng)要(yào / yāo)思考清楚,比如涉及到(dào)消息記錄 的(de)需求,可能要(yào / yāo)考慮到(dào)有的(de)用戶的(de)消息記錄很大(dà),比如涉及好友列表的(de)需求,可能要(yào / yāo)考慮到(dào)有的(de)用戶的(de)好友列表很多等。
使用時(shí)機的(de)話,比如需求是(shì)在(zài)登錄過程中那麽可能要(yào / yāo)考慮該需求是(shì)否會影響到(dào)登錄速度,如果是(shì)在(zài)登錄後的(de)話,是(shì)否會造成登錄後卡。
結合這(zhè)些特征,對于(yú)一(yī / yì /yí)些從需求側就(jiù)可能有問題的(de)需求,要(yào / yāo)麽考慮直接不(bù)做這(zhè)個(gè)需求,要(yào / yāo)麽考慮針對不(bù)同的(de)使用特征做不(bù)同的(de)處理,比如考慮到(dào)消息記錄 可能有很大(dà)的(de)情況,那麽涉及消息記錄的(de)需求盡量不(bù)要(yào / yāo)去讀取整個(gè)消息記錄。有的(de)時(shí)候,也(yě)可以(yǐ)考慮切換需求處理的(de)時(shí)機,比如在(zài)更新好友資料的(de)需求,如果是(shì)做在(zài) 登錄過程可能是(shì)會引起登錄過程很慢,那麽需求可以(yǐ)修改成登錄過程先加載本地(dì / de)數據,登錄後某個(gè)空閑時(shí)機再去做必要(yào / yāo)的(de)更新。
2. 需求開發階段如何考慮性能
在(zài)一(yī / yì /yí)個(gè)需求開始開發之(zhī)前,一(yī / yì /yí)個(gè)有經驗的(de)程序員應該是(shì)要(yào / yāo)先做設計,在(zài)架構設計的(de)過程,我們應該要(yào / yāo)考慮性能,讓架構能夠支持足夠的(de)數據量,保持架構 上(shàng)能在(zài)各種場景都不(bù)會出(chū)現性能問題。各種處理分别是(shì)在(zài)什麽時(shí)機進行也(yě)是(shì)要(yào / yāo)在(zài)設計的(de)時(shí)候就(jiù)想好的(de),隻有性能出(chū)衆的(de)架構才是(shì)很好的(de)架構。
在(zài)實際開發的(de)過程,要(yào / yāo)充分考慮用戶的(de)使用場景和(hé / huò)并發數量,比如開發一(yī / yì /yí)個(gè)火車票訂票系統,如果不(bù)考慮春運的(de)時(shí)候的(de)特殊情況,那麽最終隻會在(zài)春運的(de)時(shí)候系統直接癱瘓。
可能這(zhè)個(gè)時(shí)候有人(rén)會問,春運的(de)時(shí)候就(jiù)是(shì)有那麽多用戶在(zài)訪問,系統就(jiù)是(shì)支持不(bù)了(le/liǎo)那麽應該怎麽辦呢?至少可以(yǐ)從兩個(gè)方面去解決,一(yī / yì /yí)個(gè)方面可以(yǐ)考慮在(zài) 訪問量很大(dà)的(de)時(shí)候,隻提供核心訂票等業務的(de)支持,而(ér)網頁上(shàng)的(de)一(yī / yì /yí)些圖片什麽的(de)完全可以(yǐ)不(bù)提供拉取。另一(yī / yì /yí)方方面,可以(yǐ)考慮提供給系統最大(dà)支持量的(de)用戶正常的(de)服 務,而(ér)可以(yǐ)對一(yī / yì /yí)些超出(chū)負載的(de)用戶提出(chū)的(de)服務短期内進行拒絕。設置可以(yǐ)提供一(yī / yì /yí)種排隊進入的(de)機制。
3. 測試階段如何關注性能
在(zài)測試階段我們還需要(yào / yāo)做什麽來(lái)保障性能呢?
首先我想強調的(de)是(shì),測試是(shì)保證産品的(de)性能最終是(shì)否達标的(de)最後保障,所以(yǐ)這(zhè)個(gè)環節一(yī / yì /yí)定要(yào / yāo)嚴格要(yào / yāo)求。
從信念上(shàng)來(lái)說(shuō),隻要(yào / yāo)開發同學有對代碼進行修改,那麽都是(shì)要(yào / yāo)懷疑可能引入性能問題的(de),之(zhī)前我們的(de)一(yī / yì /yí)個(gè)打開好友聊天窗口的(de)時(shí)候卡的(de)一(yī / yì /yí)個(gè)性能問題,就(jiù)是(shì)因爲(wéi / wèi)在(zài)桌面快捷圖标的(de)時(shí)候在(zài)打開聊天窗口的(de)過程加了(le/liǎo)一(yī / yì /yí)行代碼。
測試方法上(shàng),要(yào / yāo)注意用接近現實的(de)一(yī / yì /yí)些數據來(lái)進行測試,包括前面說(shuō)到(dào)的(de)消息記錄的(de)大(dà)小和(hé / huò)好友列表的(de)數目。另外要(yào / yāo)注意覆蓋各種使用場景。最後還有一(yī / yì /yí) 點尤其要(yào / yāo)注意的(de)是(shì)要(yào / yāo)注意用多種機器多種網絡環境多種軟件環境來(lái)測試,機器的(de)話,主要(yào / yāo)包括性能好的(de)機器和(hé / huò)性能差的(de)機器,機器的(de)網絡環境的(de)話要(yào / yāo)考慮網絡丢包比 較大(dà)的(de)一(yī / yì /yí)些情況,還要(yào / yāo)集合局域網廣域網以(yǐ)及中國(guó)的(de)各大(dà)運營商之(zhī)間的(de)不(bù)同網絡場景。軟件環境的(de)話,一(yī / yì /yí)方面包括不(bù)同的(de)操作系統,一(yī / yì /yí)方面包括同時(shí)運行和(hé / huò)安裝的(de)軟 件環境,比如殺毒軟件,安全軟件,或者是(shì)同時(shí)在(zài)運行一(yī / yì /yí)些大(dà)型遊戲的(de)情況。
當然最好的(de)情況是(shì),建立一(yī / yì /yí)系列的(de)自動化測試框架,把一(yī / yì /yí)些我們平常關注的(de)重要(yào / yāo)數據,比如QQ的(de)登錄速度,登錄後卡不(bù)卡,打開好友聊天窗口的(de)速度等 等通過自動化跑出(chū)來(lái)。通過定期進行自動化測試,同時(shí)把數據進行各個(gè)曆史版本橫向比較,最後可以(yǐ)做到(dào)快速監控,最快速度發現性能問題。
4. 反饋跟蹤如何關注性能
産品發布之(zhī)後,依然還要(yào / yāo)繼續關注它的(de)性能。一(yī / yì /yí)方面由于(yú)我們的(de)用戶群體非常大(dà),所以(yǐ)難免有些情況和(hé / huò)使用場景沒有考慮周全,所以(yǐ)最後運營階段沒有問題的(de)版本才是(shì)合格的(de)版本。
我們一(yī / yì /yí)般通過定期關注微博,關注産品本身的(de)反饋論壇,以(yǐ)及外面的(de)一(yī / yì /yí)些相關論壇來(lái)收集信息。同時(shí)關注周邊的(de)朋友,以(yǐ)及同事的(de)反饋也(yě)是(shì)一(yī / yì /yí)個(gè)很重要(yào / yāo)的(de)方面。
在(zài)用戶反饋有問題的(de)時(shí)候,應該要(yào / yāo)及時(shí)去處理,處理方法一(yī / yì /yí)方面要(yào / yāo)先了(le/liǎo)解用戶的(de)使用場景和(hé / huò)使用情況,另一(yī / yì /yí)方面可以(yǐ)給用戶一(yī / yì /yí)些工具,通過這(zhè)些工具去記 錄當時(shí)的(de)CPU,内存,IO的(de)使用情況,當時(shí)是(shì)否界面有無響應等信息。同時(shí)工具最好能夠記錄在(zài)有性能問題的(de)時(shí)候軟件正在(zài)忙什麽,當時(shí)的(de)堆棧以(yǐ)及系統調用函 數是(shì)什麽,有了(le/liǎo)這(zhè)些信息就(jiù)可以(yǐ)快速的(de)解決問題了(le/liǎo)。
5. 總結
整體來(lái)看,貫穿整個(gè)軟件開發的(de)過程,從需求,到(dào)設計,到(dào)開發,到(dào)測試,最後到(dào)發布反饋,都得要(yào / yāo)持續關注軟件的(de)性能,這(zhè)樣才能得到(dào)一(yī / yì /yí)個(gè)系統性地(dì / de)保證。可見,性能優化是(shì)一(yī / yì /yí)個(gè)需要(yào / yāo)持續運營的(de)過程。

登錄 參與評論
評論
暫無任何評論