掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
性能工程是發(fā)現(xiàn)和解決軟件系統(tǒng)性能問題最主要的方法體系和技術(shù)手段,它一般包含以下幾個部分:性能測試,性能輪廓,性能分析,性能優(yōu)化和性能規(guī)劃(容量規(guī)劃)。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供洛川網(wǎng)站建設、洛川做網(wǎng)站、洛川網(wǎng)站設計、洛川網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、洛川企業(yè)網(wǎng)站模板建站服務,10余年洛川做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
在性能工程中,技術(shù)層面上最難的部分是性能分析和性能優(yōu)化,而整體上最為繁瑣和復雜的則是性能規(guī)劃,因為其包括了性能測試,基礎設施,性能建模和資源協(xié)調(diào)等相關(guān)的工作,甚至需要做系統(tǒng)架構(gòu)調(diào)整才能滿足相應的規(guī)劃工作。
對于用戶量不大的中小型系統(tǒng),因為單機或者少量的多機就可以滿足所有的業(yè)務性能需求,所以一般不需要做性能規(guī)劃。但是隨著業(yè)務性能需求的增大,產(chǎn)品環(huán)境的資源需求隨之增加。但是為了避免增加過多資源,盡可能地減少資源的浪費,所以需要找到滿足業(yè)務性能需求的最小資源量。
通過性能規(guī)劃,可以找到這個最小的資源量。其次,有些項目的產(chǎn)品環(huán)境和測試環(huán)境的資源是不一樣的,甚至有巨大的區(qū)別。使用性能規(guī)劃的一系列實踐,可以通過測試環(huán)境的性能指標,推測或者計算出產(chǎn)品環(huán)境中大概的性能情況。從而判斷當前的產(chǎn)品環(huán)境是不是滿足業(yè)務性能需求。
現(xiàn)代彈性云平臺出現(xiàn)之前,如果要部署一個服務器系統(tǒng),必須購買固定配置和數(shù)量的物理機,應用服務器多機擴展也相對很困難,成本也很高。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)則更難以進行擴展,雖然以NewSQL為代表TiDB等數(shù)據(jù)庫已經(jīng)支持了水平橫向擴展的能力,但是和應用服務器一樣,硬件水平橫向擴張也相對很困難,成本也很高。所以在傳統(tǒng)的基礎設施上做性能規(guī)劃的痛點比較多,難度也比較大。
現(xiàn)代彈性云平臺出現(xiàn)之后,在其上的服務實例的硬件配置和數(shù)量可以非常容易地變更,數(shù)據(jù)庫的硬件能力也可以進行變更。所以在這種基礎設施下,可以更為容易地進行性能規(guī)劃的工作。
在進行性能規(guī)劃之前,一定要熟悉整個系統(tǒng)的架構(gòu),并針對三個關(guān)鍵點進行隔離分析:網(wǎng)關(guān),應用服務器和數(shù)據(jù)庫。
以現(xiàn)在的技術(shù),很難對已有的網(wǎng)關(guān)系統(tǒng)本身進行水平橫向擴展,只能對其進行單機擴展,包括升級CPU,內(nèi)存等。對于應用服務器,單機配置最好要和產(chǎn)品環(huán)境的實例保持一致,只是改變服務器數(shù)量來進行性能規(guī)劃測試。對于無法進行水平橫向擴展的應用系統(tǒng)來說,一般不需要做性能規(guī)劃。最后對于數(shù)據(jù)庫,如果無法水平擴展的數(shù)據(jù)庫系統(tǒng),可以使用云平臺自帶的數(shù)據(jù)庫系統(tǒng),因為現(xiàn)在大部分云數(shù)據(jù)庫系統(tǒng)都支持擴展數(shù)據(jù)庫的單機能力,比如Amazon RDS和 Azure SQL Database等。如果使用的是分布式數(shù)據(jù)庫,則可以像應用服務系統(tǒng)一樣在云平臺上進行水平橫向擴展。
只有根據(jù)業(yè)務性能需求,對關(guān)鍵三點都盡可能分別做性能規(guī)劃,才能做到真正的全方位的性能規(guī)劃。
步驟:
做性能規(guī)劃,一般有以下6個基本步驟:
首先準備測試環(huán)境,最好選用云平臺作為測試環(huán)境,如果無法使用云平臺則需要準備足夠量的物理機,以便得到足夠的擬合數(shù)據(jù)。選取性能指標和建立測試模型是最關(guān)鍵和重要的兩步,它們的正確和有效性直接影響到性能規(guī)劃的工作量和結(jié)果的有效性。對于業(yè)務需求和系統(tǒng)架構(gòu)的不同,重點關(guān)注的指標也有所不同,比如數(shù)據(jù)密集型的系統(tǒng),一般會選取Response Time和TPS等作為關(guān)鍵指標;而數(shù)據(jù)存儲型的系統(tǒng),則選擇吞吐量和IO作為關(guān)鍵指標。對于測試模型則可以考慮基于獨立功能或者是基于場景,是需要有Think Time還是不需要,下圖就是一個簡單的測試模型的示例:
變化測試指標并進行性能測試則是最繁瑣的步驟,因為需要改變各種配置和指標來進行測試,并收集各種測試結(jié)果數(shù)據(jù)。最后兩步則是通過分析和數(shù)學擬合,并根據(jù)業(yè)務性能需求產(chǎn)出性能規(guī)劃結(jié)果。
最后為了驗證性能規(guī)劃的有效性,需要在產(chǎn)品環(huán)境中通過各種監(jiān)控手段,比如應用系統(tǒng)埋點采集或者日志采集,服務器探針等獲取應用系統(tǒng)和服務器的各種性能數(shù)據(jù),從而驗證性能規(guī)劃的有效性。
在性能規(guī)劃的步驟里面有一步是擬合測試數(shù)據(jù),它是通過數(shù)學的擬合方法,通過測試數(shù)據(jù)打點之后,得到一個曲線和與之相應的數(shù)學函數(shù),然后通過這個數(shù)學函數(shù)可以估計性能的變化規(guī)律,從而對于硬件資源和系統(tǒng)配置進行規(guī)劃的工作。
下表是一個以實例數(shù)量作為變化指標,在特定時間內(nèi)完成的請求數(shù)作為觀察指標的測試結(jié)果數(shù)據(jù):
然后通過這些數(shù)據(jù)生成散列圖(以下演示圖使用的是MS Excel生成的,可以使用任何其他的數(shù)學工具或者庫來生成以下的演示圖,比如SageMath,Mathematica等)
擬合有很多種方式,比如指數(shù)擬合,線性擬合和多項式擬合等。一般情況下,多項式擬合可以獲得比較準確的結(jié)果,下面三張圖是通過Excel生成的多項式擬合(包括方程)。其中R=1則表示多項式完全符合所有的坐標點,且斜率為正。但是測試結(jié)果數(shù)據(jù)本身就存在一些不確定性,所以一般會找盡可能R接近1并且曲線盡可能平滑的擬合結(jié)果來進行推算。比如下圖中我就會選擇第一張圖中的擬合函數(shù)來進行推算。
擬合圖1:
擬合圖2:
擬合圖3:
一般情況下,做性能規(guī)劃測試時,還可以選取下圖中的指標來進行測試,并得到相應的數(shù)據(jù)來做二維擬合:
除了二維擬合,還可以做三維擬合,下圖是常規(guī)情況下做三維擬合需要關(guān)注和變化的指標:
性能規(guī)劃在大型應用服務系統(tǒng)中的地位越來越高,因為它可以發(fā)現(xiàn)系統(tǒng)在常規(guī)性能測試的情況下很難發(fā)現(xiàn)的一些性能瓶頸問題,找到性能規(guī)律,從而根據(jù)不同的業(yè)務性能需求來規(guī)劃產(chǎn)品環(huán)境的資源和配置,從而可以有效地防止服務器過載或者節(jié)約產(chǎn)品環(huán)境的資源和成本,一舉多得。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流