阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 5439阅读
  • 3回复

[解决方案]更高、更快、更强,奥运精神的多线程压缩方式

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2016-12-06) —
C*lJrFpB  
B1Oq!k  
=Runf +}  
前言 w=@Dv  
SY8C4vb'h  
送给 https://bbs.aliyun.com/read/301503.html 的帖子 CH/rp4NeSy  
y_9Ds>p!T  
_aMF?Pj~m  
网站搬家尤其是对那些大网站,动辄几百个 G 的文件真的是整个人都不好了。而且数据传输和解压缩都比较费时。这里就来讲一下,我觉得比较好的搬家压缩、解压方案。 tI{_y  
所以说,压缩方式这种东西,只有效率更高,压缩更快,支持率更强才是好的压缩,话说还挺符合奥运精神的呢,还好写这篇文字的时候至少残奥会还没有闭幕,不然就 TM 尴尬了。 /Q )\+  
lys#G:H]  
压缩方式 \C1nZk?3  
$7uA%|\  
L.WljNo  
W'.m'3#z  
一般来说,我们可能会使用 gzip 或者 zip 压缩网站目录,但其实压缩率是比较低的。这样我们在输入传输的时候,如果旧的服务上行带宽非常小的话,真的是能等死人了。 *9i{,I@  
不知道大家有没有体验过,在己的电脑上,用 Windows 原生的文件浏览器解压 zip 文件慢的可以,但是用某些压缩软件,几乎是秒解压。就是因为专业的压缩软件对多核心、多线程做了优化。 s9d_GhT%-  
这里推荐 xz 和 bzip2 压缩方案,两者的压缩率都比 gzip 高,前者压缩率最高。但是压缩的耗时就和压缩率完全反一下了。不过,我们可以利用多线程技术进行优化。 9k=3u;$v  
PYzvCf`?  
介绍 -!9G0h&i|  
TOAAQ  
JMM W  
pbzip2 i 3SHg\~Z  
>"<Wjr8W!$  
bzip2 有一个多核心支持版本,就是 pbzip2,基于 GNU Parallel 并行计算项目,让 bzip2 可以进行多线程的压缩和解压缩。缩短压缩时间,但是压缩率并没有明显变化。 k$7Jj-+~  
pbzip2 在各大系统上都有很好的兼容性,这就是为什么压缩率明明比 xz 方式低,却依然要介绍的原因。 O| hpXkV  
A+)`ZTuO  
安装 dq[xwRU1  
+t;7tQDVB  
Debian/Ubuntu:
  1. apt-get install pbzip2
"wHFN>5B  
!Rt>xD  
RHEL/CentOS:
  1. yum install pbzip2
Z(!\% mn  
40<mrVl  
XZ Utils GM<-&s!Uj  
})?GzblI&  
XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。已在 Linux 各发行版中广泛使用。最典型的就是 Linux Kernel 内核,4.7.2 版本的 xz 压缩包仅 90.4 MB,解压后能达到 633.0 MB。 w+{LAS  
#C3.Jef  
JO< wU  
但是,XZ 的压缩耗时极其长,且支持多线程压缩的 5.2 版本在各大 Linux 发行版中并没有获得广泛的支持,所以如果想获得更加积极的压缩耗时,就必须自己编译。 ,4oo=&  
?3xzd P  
安装 :08,JL{  
  1. wget http://tukaani.org/xz/xz-5.2.2.tar.xz
  2. tar -Jxf xz-5.2.2.tar.xz
  3. cd xz-5.2.2
  4. ./configure --prefix=/usr --docdir=/usr/share/doc/xz-5.2.2
  5. make && make install
  6. mv -v   /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin
  7. mv -v /usr/lib/liblzma.so.* /lib
  8. ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so
XvlU*TO~(~  
# N cK X  
6i~WcAs  
对比 3Ims6I]  
%|i`kYsy  
`^y7f  
这里使用 Pbzip2、Pigz(gzip 的多线程支持版)和 XZ Utils 做对比。 xK\d4 "  
压缩一个 395.1 M 的 PHPCMS 门户网站。 Nu7 !8[?r*  
ox (%5c)b|  
/~f'}]W  
压缩命令 Oo% d]8W  
  1. tar zcvf mf8-test1.tar.gz mf8.biz-test   #单线程 gzip 压缩
  2. tar jcvf mf8-test2.tar.bz2 mf8.biz-test  #单线程 bzip2 压缩
  3. tar -c -I pigz -f mf8-test3.tar.gz mf8.biz-test #多线程 gzip 压缩
  4. tar -c -I pbzip2 -f mf8-test4.tar.bz2 mf8.biz-test #多线程 bzip2 压缩
  5. tar -cJf mf8-test5.tar.xz mf8.biz-test -T0 #使用 T0 自动判断多线程 xz 压缩
FG*r'tC~r  
Hg$lXtn]  
压缩结果 q#=(e:aCb  
R!N%o~C2-  
"!%l/_p?  
  1. rice8@mf8-biz-test-Platform:~/test$ ls -lh
  2. 总用量 1.7G
  3. drwxrwxr-x 58 ivmm ivmm 4.0K 9月   4 17:06 mf8.biz-test # 395.1 M 的 PHPCMS 目录
  4. -rw-rw-r--  1 ivmm ivmm 306M 9月   4 17:07 mf8-test1.tar.gz #单线程 gzip 压缩结果
  5. -rw-rw-r--  1 ivmm ivmm 286M 9月   4 17:09 mf8-test2.tar.bz2 #单线程 bzip2 压缩结果
  6. -rw-rw-r--  1 ivmm ivmm 293M 9月   4 17:20 mf8-test3.tar.gz #多线程 gzip 压缩结果
  7. -rw-rw-r--  1 ivmm ivmm 286M 9月   4 17:23 mf8-test4.tar.bz2 #多线程 bzip2 压缩结果
  8. -rw-rw-r--  1 ivmm ivmm 238M 9月   5 10:11 mf8-test5.tar.xz #多线程 xz 压缩结果
9j9TPyC/2  
=$Nq   
结果 DZ PPJ2}  
R[x_j  
 O+Y6N  
可见,xz 的压缩率达到 40%,确实是不错的压缩方式,pbzip2 的压缩效果也非常不错。 o$lM$E:  
-I,$_  
Y\?"WGL)p  
引用 @wNG{Stj  
DG:Z=LuJr  
级别: 论坛版主
发帖
3606
云币
2556
只看该作者 沙发  发表于: 2016-12-06
安装个试试效果
我的中国 教程整理:https://bbs.aliyun.com/read/317306.html
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 板凳  发表于: 2016-12-06
回 1楼(我的中国) 的帖子
去high吧~
级别: 架构狮
发帖
1217
云币
1946
只看该作者 地板  发表于: 2018-01-23
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)