一 數(shù)據傳輸
1 傳統(tǒng)數(shù)據從文件到網絡的傳輸路徑
1. 操作系統(tǒng)將數(shù)據從磁盤讀入內核空間的pagecache中
2. 應用程序將內核空間中的數(shù)據讀入用戶空間緩沖區(qū)
3. 應用程序將數(shù)據寫回內核空間的套接字緩沖區(qū)
4. 操作系統(tǒng)將數(shù)據從套接字緩沖區(qū)復制到NIC緩沖區(qū)(網卡)督弓,并發(fā)送到網絡上
其中1捎琐,2,3兔朦,4步驟均發(fā)生了數(shù)據拷貝。
2,3步驟發(fā)生了系統(tǒng)調用。
也就是發(fā)生了4次拷貝冀值,2次系統(tǒng)調用。
2 傳統(tǒng)數(shù)據從文件到網絡的傳輸路徑圖解
傳統(tǒng)數(shù)據從文件到網絡的傳輸路徑圖解
3 對傳統(tǒng)數(shù)據傳輸?shù)膬?yōu)化 --- sendfile
對傳統(tǒng)數(shù)據傳輸?shù)膬?yōu)化圖解
2 推拉模式的選擇
1. 如果選擇broker向消費者push消息
1. 各種消費者的處理能力不同宫屠,有的處理性能高列疗,有的處理性能低,如果broker在不了解消費者處理能力的前提下push消息浪蹂,有可能導致消費者不堪重負抵栈。
2. 基于Push的系統(tǒng)必須選擇立即發(fā)送請求,并且在不能感知下游消費者是否能馬上處理的情況下發(fā)送坤次。
如果傾向于低延遲的調整古劲,這將導致每次只能發(fā)送單條消息,這非常浪費缰猴。
2. 如果選擇消費者向broker pull消息
1. 消費者可以根據自己的消費能力來決定拉取消息产艾,比較靈活,也可以保證系統(tǒng)的穩(wěn)定性
2. pull模式可以引入批處理模式滑绒,一個基于Pull的設計消費者總是拉取日志中當前位置后所有有效的消息闷堡,
因此可以在不引入不必要的延遲的情況下得到最佳的批處理。