1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      Linux大文件傳輸

      更新時間: 2012-02-08 09:34:57來源: 粵嵌教育瀏覽量:2721

          我們經(jīng)常需要在機(jī)器之間傳輸文件。比如備份,復(fù)制數(shù)據(jù)等等。這個是很常見,也是很簡單的。用scp或者rsync就能很好的完成任務(wù)。但是如果文件很大,需要占用一些傳輸時間的時候,怎樣又快又好地完成任務(wù)就很重要了。在我的測試用例中,一個的方案比差的方案,性能提高了10倍。

          復(fù)制文件
          如果我們是復(fù)制一個未壓縮的文件。這里走如下步驟:

          壓縮數(shù)據(jù)
          發(fā)送到另外一臺機(jī)器上
          數(shù)據(jù)解壓縮
          校驗(yàn)正確性
          這樣做會很有效率,數(shù)據(jù)壓縮后可以更有效的利用帶寬

          使用ZIP+SCP
          我們可以通過ZIP+SCP的組合實(shí)現(xiàn)這個功能。

          gzip -c /home/yankay/data | ssh yankay01 "gunzip -c - > /home/yankay/data"這條命令是將/home/yankay/data經(jīng)過GZIP壓縮,通過ssh傳輸?shù)統(tǒng)ankay01的機(jī)器上。

          data文件的大小是1.1GB,經(jīng)過Zip壓縮后是183MB,執(zhí)行上面的命令需要45.6s。平均吞吐量為24.7MB/s

          我們會發(fā)現(xiàn)Scp也有壓縮功能,所以上面的語句可以寫成

          scp -C -c blowfish /home/yankay/data yankay01:/home/yankay/data這樣運(yùn)行效果是相同的,不通之處在于我使用了blowfish算法作為Scp的密匙算法,使用這個算法可以比默認(rèn)的情況快很多。單單對與scp,使用了blowfish 吞吐量是62MB/s,不使用只有46MB/s。

          可是我執(zhí)行上面一條命令的時候,發(fā)現(xiàn)還是需要45s。平均吞吐量還為24MB/s。沒有絲毫的提升,可見瓶頸不在網(wǎng)絡(luò)上。

          那瓶頸在哪里呢?

          性能分析

          我們先定義幾個變量

          壓縮工具的壓縮比是 CompressRadio

          壓縮工具的壓縮吞吐是CompressSpeed MB/s

          網(wǎng)絡(luò)傳輸?shù)耐掏率?NetSpeed MB/s

          由于使用了管道,管道的性能取決于管道中慢的部分的性能,所以整體的性能是:

          speed=min(NetSpeed/CompressRadio,CompressSpeed)

          當(dāng)壓縮吞吐較網(wǎng)絡(luò)傳輸慢的時候,壓縮是瓶頸;但網(wǎng)絡(luò)較慢的時候,網(wǎng)絡(luò)傳輸/吞吐 是瓶頸。

          根據(jù)現(xiàn)有的測試數(shù)據(jù)(純文本),可以得到表格:    

       

      壓縮比

      吞吐量

      千兆網(wǎng)卡(100MB/s)吞吐量

      千兆網(wǎng)卡吞吐量,基于ssh(62MB/s)

      百兆網(wǎng)卡(10MB/s)吞吐量

      ZLIB

      35.80%

      9.6

      9.6

      9.6

      9.6

      LZO

      54.40%

      101.7

      101.7

      101.7

      18.38235294

      LIBLZF

      54.60%

      134.3

      134.3

      113.5531136

      18.31501832

      QUICKLZ

      54.90%

      183.4

      182.1493625

      112.9326047

      18.21493625

      FASTLZ

      56.20%

      134.4

      134.4

      110.3202847

      17.79359431

      SNAPPY

      59.80%

      189

      167.2240803

      103.6789298

      16.72240803

      NONE

      300

      100

      62

          可以看出來。在千兆網(wǎng)卡下,使用QuickLZ作為壓縮算法,可以達(dá)到的性能。如果使用SSH作為數(shù)據(jù)傳輸通道,則遠(yuǎn)遠(yuǎn)沒有達(dá)到網(wǎng)卡可以達(dá)到的性能。在百兆網(wǎng)卡的情況下,各個算法相近。對比下來QuickLZ是有優(yōu)勢的。

          對于不同的數(shù)據(jù)和不同的機(jī)器,可以得出不同的壓縮算法。但有一點(diǎn)是肯定的,盡量把瓶頸壓在網(wǎng)絡(luò)上。對于較慢的網(wǎng)絡(luò)環(huán)境,高壓縮比的算法會比較有優(yōu)勢;相反對于較快的網(wǎng)絡(luò)環(huán)境,低壓縮比的算法會更好。

          結(jié)論

          根據(jù)上面的分析結(jié)果,我們不能是用SSH作為網(wǎng)絡(luò)傳輸通道,可以使用NC這個基本網(wǎng)絡(luò)工具,提高性能。同時使用qpress作為壓縮算法。  

          scp /usr/bin/qpress yankay01:/usr/bin/qpress
          ssh yankay01 "nc -l 12345 |  qpress -dio > /home/yankay/data" &
          qpress -o /home/yankay/data |nc yankay01 12345行是將gpress安裝到遠(yuǎn)程機(jī)器上,第二行在遠(yuǎn)程機(jī)器上使用nc監(jiān)聽一個端口,第三行壓縮并傳送數(shù)據(jù)。

          執(zhí)行上面的命令需要2.8s。平均吞吐量為402MB/s,比使用Gzip+Scp快了16倍!!

          根據(jù)上文的公式,和自己的數(shù)據(jù),可以繪出上面的表格,就可以選擇出適合的壓縮算法和傳輸方式。達(dá)到滿意的效果。如果是一個長期運(yùn)行的腳本的話,這么做是值得的。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 五月天婷婷亚洲熟女一区 | 人人视频久久精品视频 | 日韩欧美中文字幕在线三区 | 日韩精品卡通动漫中文字幕 | 五月婷婷丁香视频在线 | 在线观看片a免费观看岛国 亚洲综合在线区尤物 |