体育外围

當前位置: 首頁 > Linux運維 > socat與Brook 端口轉發非權威對比測試,到底孰強孰弱?

socat與Brook 端口轉發非權威對比測試,到底孰強孰弱?

發布于:2021-1-14 Linux運維 0條評論 1,837 views
如需VPS代購、PHP開發、服務器運維等服務,請聯系博主QQ:337003006

常見的端口轉發程序有socat、Brook、nginx、rinetd、iptables等,大部分已經在博客做過介紹,有興趣的同學可參考我之前的文章。

網上關于端口轉發軟件的評測非常少,最近正好將socat與Brook都打包為了Docker鏡像,今天先用他兩來比一比,測一測,看看到底誰的效率更好一些。(非權威測試,結果僅供參考)

測試環境

已經在目標服務器163.172.35.xxx安裝好了WebServer(Nginx),同時在中繼服務器137.175.30.xxx上分別部署了socat和brook進行端口轉發到目標的80端口上,信息如下。

  • 目標服務器:163.172.35.xxx:80
  • 中繼服務器:137.175.30.xxx:32771(socat)
  • 中繼服務器:137.175.30.xxx:32770(brook)

初始環境(第一輪)

socat與Brook均是通過Docker方式部署,部署完畢后,沒有任何連接的情況下,內存占用情況如下。

socat占用內存不到800Kb

Brook占用1.8Mb內存

hey進行HTTP壓力測試(第二輪)

接下來通過工具分別對兩個不同的轉發端口進行HTTP并發壓力測試,測試命令為:

./hey -n 10000 -c 1000 -m GET http://xxx/

上面命令是對中繼服務器發起10000個請求,客戶端并發連接數為1000


socat壓測結果:最高內存占用154Mb,最高CPU使用率32%,耗時67s,平均耗時1.5347s,錯誤次數238

Summary:
  Total:        67.5975 secs
  Slowest:      19.9194 secs
  Fastest:      0.3516 secs
  Average:      1.5347 secs
  Requests/sec: 147.9345

Response time histogram:
  0.352 [1]     |
  2.308 [8318]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4.265 [738]   |■■■■
  6.222 [227]   |■
  8.179 [166]   |■
  10.136 [100]  |
  12.092 [48]   |
  14.049 [53]   |
  16.006 [31]   |
  17.963 [39]   |
  19.919 [41]   |

Latency distribution:
  10% in 0.3608 secs
  25% in 0.3721 secs
  50% in 0.7243 secs
  75% in 1.4874 secs
  90% in 3.3814 secs
  95% in 6.0845 secs
  99% in 14.1610 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0225 secs, 0.3516 secs, 19.9194 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:    0.0001 secs, 0.0000 secs, 0.0309 secs
  resp wait:    1.4584 secs, 0.3515 secs, 19.9191 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0270 secs

Status code distribution:
  [200] 9762 responses

Error distribution:
  [238] Get "http://137.175.30.xxx:32771/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

brook壓測結果:最高內存占用25Mb,最高CPU使用率64%,總耗時44s,平均耗時1.0304s,錯誤次數67

Summary:
  Total:        44.2130 secs
  Slowest:      19.4560 secs
  Fastest:      0.3522 secs
  Average:      1.0304 secs
  Requests/sec: 226.1777

Response time histogram:
  0.352 [1]     |
  2.263 [9106]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4.173 [528]   |■■
  6.083 [158]   |■
  7.994 [69]    |
  9.904 [22]    |
  11.814 [17]   |
  13.725 [7]    |
  15.635 [11]   |
  17.546 [9]    |
  19.456 [5]    |

Latency distribution:
  10% in 0.3605 secs
  25% in 0.3687 secs
  50% in 0.5565 secs
  75% in 1.0805 secs
  90% in 2.0481 secs
  95% in 2.8718 secs
  99% in 7.2565 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0192 secs, 0.3522 secs, 19.4560 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:    0.0001 secs, 0.0000 secs, 0.0117 secs
  resp wait:    0.9539 secs, 0.3519 secs, 19.4558 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0316 secs

Status code distribution:
  [200] 9933 responses

Error distribution:
  [67]  Get "http://137.175.30.xxx:32770/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

以上結果xiaoz反復壓測了幾次,數據方向基本一致。

axel多線程下載測試(第三輪)

測試命令

time axel -n 32 "http://137.175.30.xxx:32771/test"

測試文件為200M,使用axel開啟32線程進行下載。


socat測試結果:耗時48m44s,最高內存占用5.8Mb左右。

real    48m44.111s
user    0m1.934s
sys     0m10.616s

Brook測試結果:耗時36m3.646s,最高內存占用2.9Mb左右。

real    36m3.646s
user    0m1.730s
sys     0m8.930s

數據匯總

軟件名稱/測試項socatbrook
初始內存800Kb1.8Mb
hey壓測(耗時)67s44s
hey壓測(max(cpu))32%64%
hey壓測(錯誤次數)23867
hey壓測(max(mem))154Mb25Mb
axel 32線程下載(耗時)48m44s36m3s
axel 32線程下載(max(mem))5.8Mb2.9Mb
  • 初始內存socat占用比brook更低
  • 高并發情況下socat內存占用比brook更高
  • 高并發情況下brook CPU占用比socat更高
  • 多線程下載,brook效率好于socat

總結

以上結果僅針對HTTP轉發進行壓測,由于環境、網絡等多方面因素影響,也沒仔細研究socat參數,不保障數據100%準確性,有興趣的同學可以自行測試,針對以上測試數據,xiaoz給出的建議如下。

  • 如果是個人少量使用,并且機器配置較低的情況下建議socat
  • 如果并發較大,要求更高的效率,建議選擇brook

后續將對其它端口轉發軟件做對比測試,敬請關注。


發表評論