2018年7月26日 星期四

實作每秒千萬級別的訊息發送系統

場景

網路協議:       TCP/IP
網路程式介面: socket
CCU:            1000,000
每秒發送訊息次數: 10
總訊息傳送次數:    1000,000*10=10,000,000

瓶頸

linux內核
每秒送出的TCP/IP封包次數上限約 10,000,000/sec


要遍歷全部的連線,一個一個發送訊息,所以需要加鎖。
數量高達1000,000,所以這個過程很久,導致其他操作無法執行。
例如login,logout,都要等全部發送完解鎖後,才能執行。

頻寬
頻寬約需400MB-600MB之間。

解法

針對linux內核發送TCP/IP封包次數上限瓶頸
減少發送次數,一秒內的訊息,全部組合成一個訊息,統一發送。

針對鎖的瓶頸
把1000,000連線,分拆為多個集合,用併發的方式同步處理,
可有效減少上鎖時間。
鎖用讀寫鎖,不用互斥鎖。

針對頻寬瓶頸
訊息壓鎖。
換1GB網卡,加大頻寬。

單機架構



分散架構

沒有留言:

張貼留言