當前位置:
首頁 > 知識 > 藉助Docker單機秒開數十萬TCP連接

藉助Docker單機秒開數十萬TCP連接

熟悉網路編程的都清楚系統只有65535個埠可用,1024以下的埠為系統保留,所以除去系統保留埠後可用的只有65411個埠,而一個TCP連接由TCP四元組(源IP、源埠、TCP、目標IP、目標埠)唯一確定,所以單機一個網卡時客戶端最多只能打開65411個TCP連接,而有時我們的TCP服務需要數十萬、上百萬甚至更多TCP連接的壓力測試,這時怎麼辦呢,通常有幾個辦法可以解決:掛多網卡、加機器

1、掛多網卡要是真買網卡這也是個麻煩的事情或許你機器還不支持,還有就是添加虛擬網卡,這倒是不用什麼成本,寫寫腳本或許能解決但也要費不少神;

2、加機器這個成本就比較高了,一台機器開6wTCP連接,壓60w就需要開十台這個太麻煩了;

有沒有比較簡單可行的解決方案只要機器性能滿足就能秒開數十萬TCP連接呢,這裡給出的方案是藉助這幾年技術圈比較火的Docker,其實這裡和上面一點中加虛擬網卡是一樣的,只是創建網卡這一步Docker幫我們做了,而且還能秒級啟動客戶端程序;


流程

原理很簡單,發起TCP連接的客戶端程序丟到Docker容器中,由於Docker容器使用了Linux的網路名稱空間(Network Namespace),容器會自己幫我們創建虛擬網卡,我們不必關係這塊,只要配好客戶端相關配置啟動容器即可;

由於我們是要發起超過6w多個TCP請求連接,而手機啟動多個Docker容器也是件麻煩的事情,這裡又藉助了Docker的一個服務編排的工具Docker Compose這樣就可以一鍵發起數十萬TCP請求連接,是要你機器性能滿足開多少個連接都沒多大問題;

如果服務的TCP通信壓力比較大那藉助Docker Swarm或Kubernetes使用Docker集群發起TCP連接壓測更好;

在Docker宿主機中部署服務端,其實服務端不一定要部署在Docker宿主機中,然後把客戶端放在Docker鏡像中,啟動容器運行該客戶端即可;

1、啟動服務端:

2、生成鏡像且鏡像中包含了該客戶端程序:

Dockerfile文件內容:

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

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

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

當前配置為每個容器中的客戶端發起35000個TCP連接,所以服務端連接總數為70000;

當修改scale=3,再次執行:docker-compose up -d –scale demo-client=3,容器將擴容為三個,所以為105000個連接發起TCP連接;


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PHP技術大全 的精彩文章:

緩存實戰二三事

TAG:PHP技術大全 |