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