一.系統吞度量要素:
一個系統的吞度量(承壓能力)與request對CPU的消耗、外部接口、IO等等緊密關聯。單個reqeust 對CPU消耗越高,外部系統接口、IO影響速度越慢,系統吞吐能力越低,反之越高。
系統吞吐量幾個重要參數:QPS(TPS)、並發數、響應時間
QPS(TPS):每秒鍾request/事務 數量
並發數: 系統同時處理的request/事務數
響應時間: 一般取平均響應時間
(很多人經常會把並發數和TPS理解混淆)
理解了上面三個要素的意義之后,就能推算出它們之間的關系:
QPS(TPS)= 並發數/平均響應時間 或者 並發數 = QPS*平均響應時間
舉個例子:
銀行窗口業務,早上8點上班,窗口數量為10個窗口,平均每個人辦理業務的時候為5分鍾。可以用下面的方法計算。
並發數=10個窗口
平均響應時間為 = 5*60 秒
QPS = 10/(5*60) 事務/秒
一個系統吞吐量通常由QPS(TPS)、並發數兩個因素決定,每套系統這兩個值都有一個相對極限值,在應用場景訪問壓力下,只要某一項達到系統最高值,系統的吞吐量就上不去了,如果壓力繼續增大,系統的吞吐量反而會下降,原因是系統超負荷工作,上下文切換、內存等等其它消耗導致系統性能下降。
決定系統響應時間要素
我們做項目要排計划,可以多人同時並發做多項任務,也可以一個人或者多個人串行工作,始終會有一條關鍵路徑,這條路徑就是項目的工期。
系統一次調用的響應時間跟項目計划一樣,也有一條關鍵路徑,這個關鍵路徑是就是系統影響時間;
關鍵路徑是有CPU運算、IO、外部系統響應等等組成。
二.如何提高系統QPS?
由前面的公式:QPS(TPS)= 並發數/平均響應時間 可以看出,要提高qps,我們必須做2個方面努力
增加並發數
-
比如增加tomcat並發的線程數,開喝服務器性能匹配的線程數,可以更多滿足服務請求。
-
增加數據庫的連接數,預建立合適數量的TCP連接數
-
后端服務盡量無狀態話,可以更好支持橫向擴容,滿足更大流量要求
-
調用鏈路上的各個系統和服務盡量不要單點,要從頭到尾都是能力對等的,不能讓其中某一點成為瓶頸。
-
RPC調用的盡量使用線程池,預先建立合適的連接數。
減少平均響應時間
- 請求盡量越前結束,越好,這樣壓力就不要穿透到后面的系統上,可以在各個層上加上緩存
- 流量消峰。放行適當的流量,處理不了的請求直接返回錯誤或者其他提示。和水壩道理很類似
- 減少調用鏈
- 優化程序
- 減少網絡開銷,適當使用長連接
- 優化數據庫,建立索引
最后,要優化的地方還有很多,上面只是列舉常見一些要注意的地方,優化的指導原則就是
增加並發數 和減少平均響應時間