日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

借助Docker单机秒开数十万TCP连接

發(fā)布時間:2025/4/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 借助Docker单机秒开数十万TCP连接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

熟悉網(wǎng)絡(luò)編程的都清楚系統(tǒng)只有65535個端口可用,1024以下的端口為系統(tǒng)保留,所以除去系統(tǒng)保留端口后可用的只有65411個端口,而一個TCP連接由TCP四元組(源IP、源端口、TCP、目標(biāo)IP、目標(biāo)端口)唯一確定,所以單機(jī)一個網(wǎng)卡時客戶端最多只能打開65411個TCP連接,而有時我們的TCP服務(wù)需要數(shù)十萬、上百萬甚至更多TCP連接的壓力測試,這時怎么辦呢,通常有幾個辦法可以解決:掛多網(wǎng)卡、加機(jī)器
  1、掛多網(wǎng)卡要是真買網(wǎng)卡這也是個麻煩的事情或許你機(jī)器還不支持,還有就是添加虛擬網(wǎng)卡,這倒是不用什么成本,寫寫腳本或許能解決但也要費(fèi)不少神;
  2、加機(jī)器這個成本就比較高了,一臺機(jī)器開6wTCP連接,壓60w就需要開十臺這個太麻煩了;
  有沒有比較簡單可行的解決方案只要機(jī)器性能滿足就能秒開數(shù)十萬TCP連接呢,這里給出的方案是借助這幾年技術(shù)圈比較火的Docker,其實這里和上面一點(diǎn)中加虛擬網(wǎng)卡是一樣的,只是創(chuàng)建網(wǎng)卡這一步Docker幫我們做了,而且還能秒級啟動客戶端程序;

流程

  原理很簡單,發(fā)起TCP連接的客戶端程序丟到Docker容器中,由于Docker容器使用了Linux的網(wǎng)絡(luò)名稱空間(Network Namespace),容器會自己幫我們創(chuàng)建虛擬網(wǎng)卡,我們不必關(guān)系這塊,只要配好客戶端相關(guān)配置啟動容器即可;
  由于我們是要發(fā)起超過6w多個TCP請求連接,而手機(jī)啟動多個Docker容器也是件麻煩的事情,這里又借助了Docker的一個服務(wù)編排的工具Docker Compose這樣就可以一鍵發(fā)起數(shù)十萬TCP請求連接,是要你機(jī)器性能滿足開多少個連接都沒多大問題;
  如果服務(wù)的TCP通信壓力比較大那借助Docker Swarm或Kubernetes使用Docker集群發(fā)起TCP連接壓測更好;

示例

  在Docker宿主機(jī)中部署服務(wù)端,其實服務(wù)端不一定要部署在Docker宿主機(jī)中,然后把客戶端放在Docker鏡像中,啟動容器運(yùn)行該客戶端即可;

  1、啟動服務(wù)端:

  2、生成鏡像且鏡像中包含了該客戶端程序:
  Dockerfile文件內(nèi)容:

FROM alpine:3.6# 設(shè)置localeENV LANG en_US.UTF-8ENV LANGUAGE en_US:enENV LC_ALL en_US.UTF-8ENV TZ=Asia/ShanghaiRUN mkdir /app_homeRUN echo 'net.ipv4.ip_local_port_range = 8001 65000' >> /etc/sysctl.confWORKDIR /app_homeCOPY client /app_homeRUN chmod +x /app_home/clientENV CLIENT=/app_homeENV PATH $CLIENT:$PATH

  生成了:solinx.co/market/demo-client:0.1鏡像:

  3、編寫docker-compose.yaml文件:

version: '2'services:demo-client:image: "solinx.co/market/demo-client:0.1"environment:TEST: testcommand:sh -c "sysctl -p && client -serverAddr=172.16.187.228:28009 -total=35000"restart: alwaysprivileged: true

  啟動容器:docker-compose up -d --scale demo-client=2

  當(dāng)前配置為每個容器中的客戶端發(fā)起35000個TCP連接,所以服務(wù)端連接總數(shù)為70000;

  當(dāng)修改scale=3,再次執(zhí)行:docker-compose up -d --scale demo-client=3,容器將擴(kuò)容為三個,所以為105000個連接發(fā)起TCP連接;

  查看當(dāng)前容器數(shù):

  可以說分分鐘就發(fā)起N多TCP請求,完整的代碼示例在github上,需要的自行獲取;https://github.com/linxin26/TcpConnectionTest

文章首發(fā)地址:Solinx
http://www.solinx.co/archives/1119

轉(zhuǎn)載于:https://www.cnblogs.com/softlin/p/8315203.html

總結(jié)

以上是生活随笔為你收集整理的借助Docker单机秒开数十万TCP连接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。