## 兩種測試場景
* chameleongb請求模式: 獨立使用chameleongb作為http web服務器直接對外提供提供http服務
* nginx請求模式: 使用nginx做代理,chameleong作為后端server通過nginx對外提供http服務
## 基于上面兩種測試場景具體說明
* chameleongb為基于golang iris框架實現web服務
* 兩種模式均在同一容器下測試
* 兩種測試場景下除了部署模式不同,網絡和服務器配置,容器環境均保持相同和一致
## ab和wrk不同場景數據測試結果匯總
| 壓測工具 | 命令 | 是否長連接 | nginx請求模式 | chameleongb請求模式 |
|------|----------------------------------------------|-------|-----------|-----------------|
| ab | ab -n 1000 -c 2 <請求> | 否 | 2966 | 3283 |
| ab | ab -n 1000 -c 8 <請求> | 否 | 7884 | 9117 |
| ab | ab -n 1000 -c 20 <請求> | 否 | 5435 | 12157 |
| ab | ab -n 1000 -c 50 <請求> | 否 | 12751 | 13060 |
| ab | ab -n 1000 -c 100 <請求> | 否 | 11759 | 12437 |
| ab | ab -n 1000 -c 300 <請求> | 否 | 11924 | 11793 |
| ab | ab -n 1000 -c 100 <請求> | 否 | 12950 | 10262 |
| ab | ab -n 3000 -c 100 <請求> | 否 | 9999 | 8012 |
| ab | ab -n 5000 -c 100 <請求> | 否 | 8579 | 7373 |
| ab | ab -n 10000 -c 100 <請求> | 否 | 8379 | 7078 |
| ab | ab -n 20000 -c 100 <請求> | 否 | 8146 | 6854 |
| ab | ab -n 50000 -c 100 <請求> | 否 | 8339 | 6891 |
| ab | ab -n 100000 -c 100 <請求> | 否 | 8331 | 6917 |
| ab | ab -n 500000 -c 100 <請求> | 否 | 7756 | 6960 |
| ab | ab -n 1000 -c 20 -k <請求> | 是 | 16200 | 41365 |
| ab | ab -n 1000 -c 100 -k <請求> | 是 | 27612 | 38782 |
| ab | ab -n 10000 -c 100 -k <請求> | 是 | 10827 | 13620 |
| ab | ab -n 10000 -c 300 -k <請求> | 是 | 10231 | 13837 |
| ab | ab -n 200000 -c 200 -k <請求> | 是 | 10269 | 13568 |
| wrk | wrk -d 3 -c 100 <請求> | 是 | 11261 | 12714 |
| wrk | wrk -d 15 -c 100 <請求> | 是 | 10527 | 12253 |
| wrk | wrk -d 30 -c 200 <請求> | 是 | 10357 | 13189 |
| wrk | wrk -d 60 -c 500 <請求> | 是 | 11006 | 13737 |
| wrk | wrk -H "Connection: Close" -c 100 -d 30 <請求> | 否 | 5754 | 3752 |
| wrk | wrk -H "Connection: Close" -c 200 -d 30 <請求> | 否 | 4736 | 4332 |
| wrk | wrk -H "Connection: Close" -c 200 -d 90 <請求> | 否 | 4222 | 3020 |
## 通過nginx:ab -n 1000 -c 100 <請求> 測試浮動情況匯總
| 壓測工具 | 是否長連接 | nginx請求模式 |
|------|-------|-----------|
| ab | 否 | 11847 |
| ab | 否 | 8374 |
| ab | 否 | 8317 |
| ab | 否 | 10493 |
| ab | 否 | 8827 |
## 通過nginx:ab -n 1000 -c 100 <請求> 每次結果為連續執行30次求平均值
| 壓測工具 | 是否長連接 | nginx請求模式 |
|------|-------|-----------|
| ab | 否 | 9744 |
| ab | 否 | 6791 |
| ab | 否 | 11618 |
## 基于上述壓測驗證情況并對結果進行分析:
1. 在客戶端使用長連接模式下,使用ab(使用請求總數+并發數)和wrk(使用請求時間+并發數)
進行壓測,通過nginx代理請求+chameleongb每秒QPS均低于直接通過chameleongb進行請求20-25%左右
2. 在客戶端非長連接模式下,通過nginx代理+chameleongb反而高于直接通過chameleongb進行請求10-15%左右
出現了倒掛的情況,現根據測試結果對該情況的原因結合兩種情況模式進行分析推論:
* nginx代理/chameleongb模式: 客戶端和nginx建立短鏈接 + nginx和chameleongb建立長連接和數據傳輸 +
chameleongb服務
* chameleongb模式:客戶端和chameleongb建立短連接 + chameleongb服務
* 對比兩種場景模式: nginx代理/chameleongb模式唯一可能具備的優勢就在于通過nginx
處理和維護多客戶端連接的能力>通過chameleongb服務和多客戶端連接處理的能力
nginx模式下nginx和chameleongb建立的為長連接解決了直接通過chameleongb服務短鏈接的不足
* 在使用ab進行測試過程中客戶度使用短鏈接通過監測客戶端連接為獨立新建立連接 沒有連接復用的情況
* 如果使用ab和wrk直接切換為長連接模式,測試結果發生改變 直接通過chameleongb壓測性能均高于通過nginx代理請求模式
* 在nginx代理/chameleongb模式下 如果修改nginx和chameleongb之間的連接為
短鏈接模式則測試結果發生改變,直接通過chameleongb壓測性能均高于通過nginx代理請求模式
* 通過前面幾條的驗證結果分析 說明唯一當發生變化的就是客戶端連接修改為長連接之后數據測試結果才發生改變
充分說明是客戶端短鏈接的維護開銷和性能影響了測試結果,通過nginx
處理和維護多客戶端連接的能力>通過chameleongb服務和多客戶端連接處理的能力使在客戶端短鏈接模式下通過nginx
請求代理模式性能高于直接通過chameleongb訪問模式
3. 在通過ab -n 1000進行驗證的情況下測試浮動比較大 分析原因是數據量基數比較小 時間太短0.1秒左右 網絡延遲 系統瞬時負載
微小的系統和波動事件(比如垃圾回收、磁盤I/O延遲、網絡延遲等)都可能對測試結果產生顯著影響
* 測試數據差距浮動比較明顯 求平均值數據之間差距也比較大 說明每次測試結果隨機性比較大