zoukankan      html  css  js  c++  java
  • 使用tar+pigz+ssh实现大数据的高效传输

    以前我们跨主机拷贝大数据的时候,比如要拷贝超过100GB的mysql原始数据,我们通常的做法如下:

    • 在源端打包压缩为tar.gz文件
    • 采用scp或者rsync等方式拷贝到目标主机
    • 在目标主机解压文件

      这三个过程是同步阻塞,即不能同时异步执行,导致效率低下。

      现在我们将过程优化为以数据流的方式,同时执行(非阻塞模式),则效率一般可以提高到原来的3倍以上,具体实现如下:

      磁盘读取---->打包---->压缩------>传输---->解压缩-->拆包---->落盘

                           |->tar     |->gzip      |->ssh      |->gzip   |->tar

      比如我要将本地的test目录拷贝到“目标IP”的的data目录,则命令如下:

      tar -c test/ |pigz |ssh -c arcfour128 目标IP "gzip -d|tar -xC /data"

      当然,这里的解压过程仍然用了效率比较低下的gzip,如果将解压工具换成lz4(但需要单独编译安装),则效率可以再提高不少。

      如果不需要解压,则命令变为:

      tar -c test/ |pigz |ssh -c arcfour128 目标IP "cat >/data/test.tar.gz"

      注:因为采用了流式压缩,解压过程必须加上-i参数,及tar –ixf /data/test.tar.gz 。

      说明: pigz是一个高效的压缩工具,可以将多核CPU的每一分剩余性能都用来做压缩计算。而传统的gzip则只能用单核CPU。比如一台2个8core cpu服务器采用pigz和gzip压缩相同的数据,一般性能差距至少在7-8倍以上(一般不会达到理论的16倍,因为受限于磁盘的读写速度和内存等资源)。

    1. 相关阅读:
      Weex框架源码分析(Android)(一)
      Android之手机振动和振铃
      使用selenium实现模拟淘宝登陆
      Android—修改button属性
      一个ROS的服务,使机器人向前移动指定距离
      用python写一个百度翻译
      python的特殊数字类型(无穷大、无穷小等)
      ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键
      设计的不错的网站
      轻功到底有没有?
    2. 原文地址:https://www.cnblogs.com/chjbbs/p/6472236.html
    Copyright © 2011-2022 走看看