WDT:多TCP鏈路的數據傳輸開源庫
作為國際著名的社交網站,非死book與開源項目一直關系密切。目前,其設立的開源項目個數已經超過200個。這些開源項目在為廣大開發人員提供便利的同時,也為非死book帶來了各方面豐厚的回報。近日,非死book又公布了一個開源項目——超高速數據傳輸工具(Warp speed Data Transfer,WDT)。接下來,本文就對WDT項目進行簡要介紹。
從2004年上線開始,非死book迅速發展。時至今日,非死book每月的活躍用戶量超過20億。在西方的萬圣節,非死book每天所接收到的照片數量更是多達20幾億張。為了滿足用戶的巨大需求,該公司先后在美國俄勒岡州和北卡羅來納州等多個地方建立了數據中心。那么,如何在數據中心內部的主機之間以及數據中心之間進行高效的數據傳輸就成了迫切需要解決的問題。為此,非死book設立了WDT項目。
WDT可以被視為一個嵌入式的庫或者命令行工具,其目的是在盡量減少資源(CPU/內存等)消耗的情況下,利用多個TCP路徑提高兩個系統之間傳送文件的效率。為了提高代碼的可移植性,非死book盡量減少了WDT的依賴關系。由此,代碼的編譯時間也大量減少,并使得項目輕量化。此外,WDT沒有采用例外,以保證傳輸效率和代碼的易于集成。
在傳輸機制方面,WDT采用了阻塞式線程IO,保證在任何點都會有線程在讀和寫。這樣,數據就可以被緩沖在雙向傳輸道路上,使得最小內核/用戶空間切換的情況下,每個子系統仍然處于忙碌狀態。正是這樣的雙向傳輸機制進一步保證了系統吞吐率的最大化。
目前,WDT代碼已經托管在GitHub中。其代碼中包含了一個小的命令行工具wcp.sh,用來測試傳輸性能。據透露,在非死book內部傳輸系統之間的RocksDB快照時,WDT通過長距離和高延遲的傳輸鏈路提供了高達600MB/s的傳輸速率。相比于之前高度優化的基于HTTP的傳輸方案,WDT傳輸速率約是其3倍左右,且系統資源消耗更少。在沒有進行節流控制的情況下,WDT可以輕易使得40Gb/s的網卡飽和,并得到近乎理論的鏈路傳輸速度(大于4GB/s)。
未來,非死book會借助開源社區繼續對WDT項目進行改進。其關注點包括重新構建代碼來使用無需復制的流/緩存流水線和處理亂序的報文等。
來自:http://www.infoq.com/cn/news/2015/07/非死book-wdt