行业动态
数据压缩:压缩广域网流量
作者:张志刚 摘自中国计算机报 网络与通信
数据压缩是人们所熟知的一种技术,也一直被视为提高带宽的一种策略。但在WAN中,其作用就要重新定位了。在电信术语的字典中对压缩是这样定义的:“通过消除相同的或在后续的采样间隔中没有变化的位串,来减少对信息或信号编码时所需的位数量或带宽的技术”。由此看来,压缩的工作方式更像是一种速记,它把更多的流量填入相同的管道中,在流量到达目的地之后再解压缩,而实际的信息数据并没有发生变化。
减少压缩带来的延迟
虽然研究人员早就开始通过压缩实现带宽效率最大化的工作,但收效甚微。从理论上讲,针对某一特定的应用,使用压缩技术可在不增加延迟的条件下提高有效带宽,并减少WAN在升级和基础设施扩容时的成本,还可以低廉的成本将流量聚合到一个低能量的管道中,从而降低WAN的成本。虽然压缩技术是克服WAN链路中容量和阻塞问题的较好的方式,但现在很少有IT管理员在其企业路由器中选择压缩这个选项,因为一旦输入量到达256kbps到512kbps的时候,路由器会因处理负荷过重而性能急剧下滑;如果低于这个标准,带宽的效率则会较通常时提高1.5~2倍;如果高于这个标准,则因要求的处理太多而产生大量的延迟。
针对这一情况,一些厂商推出了新的产品,如Expand Networks公司和Peribit Networks公司的CPE设备就是通过以字节为单位扫描数据,从而提供了更高的压缩率,而且,无论接入方式或应用协议是什么,他们都将应用带宽提高到了以前的2.5~10倍。以往由于缺乏标准来统一协同工作,所以每个节点要遵从相同的厂商。现在这些新产品使用传统的压缩算法和自己的算法相结合的方法来提高系统的整体性能,通常他们都具有带宽管理或QoS功能。例如,Expand的设备就兼具加速和缓冲功能。
串与算法
因为流量会频繁地承载重复的数据元素,因此,数据压缩的目的就是减少用来存储或传输信息的位的数量。例如某个通用的报头,或用来响应的有效载荷元素,或在某PDF文件的多个页面中显示的页眉等。压缩技术要求识别出冗余的信息后,再从被压缩的应用中删除。而压缩达到的力度要依靠在源信息中发现的冗余总量,以及这些冗余元素被压缩设备吸收的效率。用户可以选择无损压缩和有损压缩。前者适合于数据库记录、电子表格的工作表以及Word文件,而后者更适合图像、视频及语音的压缩,当然前提是少许的QoS损伤是可接受的。
压缩算法的发展要回溯到上世纪40年代末期,当时的信息理论导致了第一个算法Shannon-Fano的产生,其原理是在文件中为每一个不同的符号分配一个二进制的代码。而它的出现又很快引发了时至今日还是两大重要算法的发明,即Lempel-Ziv和Huffman编码。
Lempel-Ziv算法在给定的流量或应用中寻找重复出现的称为串的字节序列,并以字节为单位找到第一个出现的最长的串,然后告诉其他的重复串,指出其长度和起始位置,并将这些信息存储在与路由器或压缩设备相关的数据库中。而Huffman编码从另一个方面减少了平均的串长度:它的代码封装了压缩的内容,并代表着一个字母表中的每个元素。这个字母表包含了以不同频率出现的符号或字符。通常,ASCII表示法规定了每个确定的文本字符要求8位,而Huffman编码方案将最短的代码分配给那些出现频率最高的字符,而将长一些的代码分配给那些不常出现的字符。常见的字符会以少于8位的代码来表示,而不常出现的字符会以多于8位的代码来表示。因此,用来表示文件内容的位的总量就大大减少了。
这两种压缩方案可用在不同类型的文本上:Huffman最适合于具有大众化的源文件字符的流量中,并且重现的字符串通俗易懂。而Lempel-Ziv可用于不同类型的源文件,不要求用户对文件中的重现字符串有过深的了解。从这点上说,Lempel-Ziv的应用更为广泛。其他的压缩算法主要包括:arithmetic compression和dictionary-based compression,但这些算法都鲜有使用,最流行的还是基于Lempel-Ziv、Huffman及其派生的算法。
新技术走向前台
传统的压缩方法主要面临两个问题:首先,传统压缩技术受制于他们搜索重复串时所使用的方法,也就是采样间隔的单位,正如以上所提到的,本地路由压缩通常以数据包为单位来搜寻串。而压缩算法设置了一套尺寸的“窗口”,例如,以2kbits的窗口寻找合适的串,如果目标串出现在窗口之外,它就不会被识别也不会被压缩。同样,数据库会在那个窗口通过之后清除其搜寻结果。这当然会保障数据库的时效性,但却删除了可以重复利用的有价值信息。如果一味地扩大窗口尺寸,则会因为窗口的尺寸越大,要求的处理越多,最后导致整体性能的下滑。因此,在扩大窗口的同时要保证不增加压缩处理的延迟。
为解决这些问题,Expand和Peribit等设备厂商除了努力达到数兆位级的容量,还拿出了至少另外两套开发计划来大幅地提高压缩结果:他们利用自己研制的技术来扩大搜寻窗口的尺寸,所以即便是兆位级的信息也能在任何给定的时间内被搜寻到,而串也能在任何数量的应用或用户范围内被检测到,所以在某个流中发现的目标串也可应用到另一个流中。此外,这些串可存储在数据库中达更长的时间,只有当更通用的重复出现的串被发现时,他们才被清除,即总是最新的输入挤走最早的输入。

通过将搜寻窗口最大化,并把压缩引擎连接至数据库,使每一个数据包都能被搜索到,并基于从以前的包中得到的知识进行压缩。同样地,Expand运行payload检测,并基于所检测到的payload类型动态地优化算法。它也可与企业应用厂商,如IBM和Oracle相结合,因此,其算法可在放置到网络之前为某一给定应用进行预优化。
对于最终用户而言,关心的只是压缩率。目前,没有具体的公式来确定一个应用被压缩了多少,无论是压缩率还是绝对的字节数。因为信息是动态的,访问同一个应用的并发用户数量也影响着最终的结果。请求的用户越多,服务器端要压缩的内容越多,因为重复出现的串的数量增加了。SAP、SQL和HTTP等可被压缩至75%。Intranet流量不好预测,因为Web流量经常承载已经过预压缩的数据,例如Zip文件、图像或视频等,预压缩的源数据是不能被第二个设备进一步压缩的。根据Peribit所称,对ERP、CRM、数据库、文件系统和Intranet Web等应用,其压缩率能达到70%甚至更高。Expand宣称Accelerator platform具有加速和缓冲功能,能更有效地优化任何应用,并将平均网络容量提高到原来的100%~400%。