跳轉到主要內容
工程的博客

創建一個更快的焦油器

2022年1月26日 工程的博客

分享這篇文章

包行業用於打包和分發文件,這是沒有什麼不同的磚。每天我們跨多個雲提供商推出數以百萬計的vm。第一個步驟在每一個虛擬機中提取一個相當可觀的焦油。Apache火花™lz4文件包含一個特定的運行時。作為工作的一部分來幫助降低引導時代,我們想知道能夠做些什麼來幫助加速的過程中提取這個大tarball。

現有的方法

現在,最常見的方法提取包調用一些命令(例如旋度,wget,甚至他們的瀏覽器)在本地下載原始tarball,然後用焦油中提取內容最後磁盤上的位置。一般有兩種方法,存在改進這一點。

管道直接下載到焦油

瀝青使用一個順序文件格式,這意味著提取總是在文件的開頭開始,使末。的副作用是,你不需要整個文件現在開始提取。事實上焦油可以在“-”作為輸入文件,它將從標準輸入讀取。夫婦用下載器傾銷到標準輸出(wget - o)可以有效地開始解壓文件並行其餘仍被下載。如果下載階段和提取階段花費大約同一時間,理論上可以減半所需的總時間。

並行下載

單流下載者往往不最大化機器的全部帶寬由於I / O路徑的瓶頸(例如,帶寬上限設置每下載流從下載源代碼)。現有的工具aria2c幫助減輕這種與平行流從一個或多個源下載相同的文件在磁盤上。這可以提供的加速效果,利用多個並行流,通過編寫他們下載到磁盤。

什麼fastar不同

並行下載+管道

fastar的第一個目標是把管道直接下載焦油的好處與並行下載速度的增加流。不幸的是aria2c是專為直接寫入磁盤。它沒有必要的同步機製需要將多個下載流轉換為一個邏輯為標準輸出流。

Fastar雇傭了一群工作線程,都是負責整個文件下載自己的片。類似於其他並行下載者,它利用了HTTP頭範圍,確保每個工人隻下載一部分負責。主要的區別在於,這些工人利用golang渠道和共享的io。作家對象同步和合並不同的下載流。這允許多個工人不斷拉數據並行而最終消費者隻能看到一個順序,順序的字節。

假設4工作線程(這個數字是用戶可配置),高級邏輯如下:

  1. 啟動線程(T1 - T4)開始下載並行塊在文件的開頭開始。T1開始立即寫入標準輸出而線程T2-T4保存到內存緩衝區,直到輪到他們了。

  1. 一旦寫完當前數據塊發送到stdout T1, T2信號,輪到他們,並開始下載下一塊它負責T4的當前塊後(右)。T2開始寫他們的數據保存在緩衝區stdout其餘線程繼續下載。這個過程持續整個文件。

多線程瀝青萃取

改進的另一個區域是由瀝青本身實際提取文件到磁盤。正如前麵提到的,aria2c的原因之一是如此快的文件下載器是它與多個流寫入磁盤。保持高的隊列深度寫作時確保磁盤總是有工作要做,不是閑置等待下一個命令。它還允許磁盤不斷重新安排寫操作以使吞吐量最大化。這是特別重要的,例如,許多小文件解壓。內置的tar命令是單線程的,從檔案中提取所有文件在一個熱循環。

為了解決這個問題,fastar也利用多個線程編寫單個提取文件到磁盤。對於每個文件的流,fastar將複製文件數據緩衝區,然後傳遞給線程在後台寫磁盤。在這裏處理一些文件類型需要不同的正確性。編寫文件夾同步,以確保他們在任何子文件寫入磁盤之前存在。另一個特殊情況是硬鏈接。因為他們需要依賴與符號鏈接文件存在,我們需要照顧同步文件創建。

生活質量的特性

Fastar還包括一些特性來提高易用性:

  • S3主持下載支持。從S3 bucket Fastar還支持下載使用S3: / /桶/關鍵的格式
  • 壓縮的支持。Fastar內部處理gzip壓縮和lz4壓縮包。它甚至可以自動推斷它壓縮模式使用嗅探的前幾個字節神奇的數字

性能數據

在本地測試,我們使用了一個lz4壓縮tarball的容器文件係統(未壓縮的壓縮2.6 gb, 4.3 gb)。這是托管在一個本地HTTP服務器服務從一個內存中的文件係統。那時tarball下載並提取相同的內存文件係統。這應該代表一個理論最好的情況我們沒有IO綁定與內存支持文件係統。

Fastar是3倍wget和焦油。

對生產的影響,下麵顯示了速度差提取最大的圖像時我們支持實時集群(未壓縮的壓縮7.6 gb, 16.1 gb)。Pre-fastar,我們使用aria2c Azure和boto3 AWS之前下載圖像提取焦油。

Fastar提供2 x加速在AWS上

從上麵的測試中,fastar速度可以顯著的改善,在合成和真實世界的基準。在合成工作負載,我們達到近3 x改進天真地調用wget & &焦油和雙性能相比,使用已經快aria2c & &焦油。最後在生產工作負載,我們看到1.3 x改善Azure磚,2 x改善磚在AWS上。

這樣的問題工作感興趣?考慮應用磚!

也讓我們知道如果你將發現這個工具有用,我們可以看看開源!

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map