這裡的高性能指的就是網卡有多快請求發送就能有多快,基本上一般的伺服器在一臺客戶端的壓力下就會出現明顯延時。
該篇實際是介紹pipe管線的原理,下面主要通過其高性能的測試實踐,解析背後數據流量及原理。最後附帶一個簡單的實現
實踐
先直接看對比測試方法
測試內容單一客戶的使用儘可能快的方式向伺服器發送一定量(10000條)請求,並接收返回數據
對於單一客戶端對伺服器進行http請求,一般我們的方式
1:單進程或線程輪詢請求(這個效能自然很低,原因會講到,也不用測試)
2:多條線程提前準備數據等待信號(對客戶端性能要求較高)
3:提前準備一組線程同時輪詢操作
4:使用系統/平臺自帶非同步發送機制(實際就是平臺線程池的方式,發送與接收使用從線程池中的不同線程)
對於測試方案1,及方案2測試中性能較低沒有可比性,後面測試不會展示其結果
以下展示後面2種測試方法及當前要說的管線式的方式
- 先講管線式(pipe)測試方案(原理在後面會講到),測試中使用100條管線(管道),實際上更少甚至一條管線也是能達到近似的性能,不過多數伺服器nginx限制一條管可以持續發送request的數量(大部分是100也有部分會是200或是更高),每條管線發送100個請求。
- 然後是線程組的方式準備100條線程(100條線程並不是很多不會對系統本身有明顯影響),每條線程輪詢發送100個request。
- 非同步方式的方式,10000全部提交發送線程,由線程池控制接收。
測試環境:普通家用PC,i5 4核,12G ,100Mb電信帶寬
測試數據:
GET http://www.baidu.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: http://www.baidu.com
Connection: Keep-Alive
這裡就是測試最常用的baidu,如果測試介面性能不佳,大部分請求會在應用伺服器排隊,難以直觀提現pipe的優勢(其實就是還沒有用到pipe的能力,伺服器就先阻塞了)
下文中所有關於pipe的測試都是使用PipeHttpRuner (http://www.cnblogs.com/lulianqi/p/8167843.html 為該測試工具的下載地址,使用方法及介紹)
先直接看管道式的表現:(截圖全部為windows自帶任務管理器及資源管理器)