在衡量一個系統(tǒng)性能時,一定要有可量化的指標,無法量化就無法有效的優(yōu)化系統(tǒng)性能。系統(tǒng)每秒可以承載多大請求量,每個請求的響應(yīng)時間,并發(fā)數(shù)都是衡量一個系統(tǒng)的關(guān)鍵性能。
吞吐量
吞吐量指的是單位時間內(nèi)的事務(wù)處理數(shù)。在衡量系統(tǒng)性能一直作為一個經(jīng)典和重要的指標,適用于多用戶的交互式應(yīng)用,比如Web服務(wù)器的多用戶訪問和數(shù)據(jù)庫的多請求操作。常用的測試單位是每秒事務(wù)數(shù)(TPS)或者每秒請求數(shù)(QPS)。
事務(wù)和請求
用戶一個完整有意義的操作。比如,對于Web服務(wù)器,用戶對某一個頁面的一次請求,用戶對某系統(tǒng)的一次登錄,用戶對商品的一次確認支付過程;對于數(shù)據(jù),一次查詢、修改、新增、刪除。這些我們都可以看作一個事務(wù)或者請求。
響應(yīng)時間或者延遲
這個指標用于事務(wù)所需的整體時間。根據(jù)具體的應(yīng)用,測試的時間單位可能是微秒、毫秒、秒或者分鐘。根據(jù)不同的時間單位計算出平均響應(yīng)時間、最小響應(yīng)時間、最大響應(yīng)時間和所占百分比。最大響應(yīng)時間通常意義不大,因為測試時間越長,最大的響應(yīng)時間也可能越大。而且其結(jié)果通常不可重復(fù),每次測試都可能得到不同的最大響應(yīng)時間。因此,通常使用百分比響應(yīng)時間(percentile response time)來替代最大響應(yīng)時間。例如,如果95%的響應(yīng)時間都是5毫秒,則表示95%的請求都可以在5毫秒之內(nèi)完成。
并發(fā)性
Web服務(wù)器的并發(fā)性更準確的度量指標,是在任意時間有多少同時發(fā)生的并發(fā)請求。 而且,Web服務(wù)器的并發(fā)性也不等同于數(shù)據(jù)庫的并發(fā)性,而僅僅只表示會話存儲機制可以處理多少數(shù)據(jù)的能力。
Web服務(wù)器的高并發(fā),一般也會導(dǎo)致數(shù)據(jù)庫的高并發(fā),但服務(wù)器采用的語言和工具集對此都會有影響。注意不要將創(chuàng)建數(shù)據(jù)庫連接和并發(fā)性搞混淆。一個設(shè)計良好的應(yīng)用,同時可以打開成百上千個MySQL數(shù)據(jù)庫服務(wù)器連接,但可能同時只有少數(shù)連接在執(zhí)行查詢。所以說,一個Web站點“同時有50000個用戶”訪問,卻可能只有10~15個并發(fā)請求到MySQL數(shù)據(jù)庫。
可擴展性
簡單地說,可擴展性指的是,給系統(tǒng)增加一倍的工作,在理想情況下就能獲得兩倍的結(jié)果(即吞吐量增加一倍)?;蛘哒f,給系統(tǒng)增加一倍的資源(比如兩倍的CPU數(shù)),就可以獲得兩倍的吞吐量。當然,同時性能(響應(yīng)時間)也必須在可以接受的范圍內(nèi)。大多數(shù)系統(tǒng)是無法做到如此理想的線性擴展的。隨著壓力的變化,吞吐量和性能都可能越來越差。 可擴展性指標對于容量規(guī)范非常有用,來幫助發(fā)現(xiàn)應(yīng)用的瓶頸。
吞吐量、響應(yīng)時間和并發(fā)數(shù)的關(guān)系
三者推導(dǎo)公式: QPS(TPS)= 并發(fā)數(shù)/平均響應(yīng)時間
從上面的公式推出,只要不斷增大并發(fā)數(shù),平均響應(yīng)時間保持不變下,系統(tǒng)的吞吐量將不斷增大。但是受限于系統(tǒng)硬件、軟件等硬性條件,當并發(fā)數(shù)不斷增大,并發(fā)線程的上下文切換次數(shù)和內(nèi)存空間使用將越來越多,反而導(dǎo)致請求排隊等待,最終增大響應(yīng)時間,整體而言對于吞吐量的提升幫助不大,甚至會降低吞吐量。所以系統(tǒng)吞吐量有一個相對極限值,此時不斷增大并發(fā)數(shù),反而降低吞吐量。
當系統(tǒng)吞吐量到達一個峰值,如果系統(tǒng)具備可擴展性,橫向擴展服務(wù)器,將可以應(yīng)對更多的并發(fā)數(shù),提升集群的吞吐量。