SOFARegistry通讯数据压缩

书中人 2022年09月09日 1,894次浏览

为了支撑超大规模集群以及大内容传输的支持,增加传输效率,减少网络带宽,考虑对消息进行压缩处理,SOFARegistry的data和session以及session和client (目前只有go支持)添加了对压缩数据传输的支持,同时增加缓存来减少压缩带来的较高的cpu的消耗。

  1. SofaRegistry通讯默认支持了哪些压缩算法

目前SofaRegistry默认支持了gzip和zstd两种压缩算法。
gzip是目前使用最广泛,压缩比较高的一种压缩算法。
zstd是由Facebook的Yann Collet开发的一个无损数据压缩算法,Zstandard在设计上与DEFLATE(.zip、gzip)算法有着差不多的压缩比,但是相比gzip有更高的压缩和解压缩速度。

  1. 两种压缩的基本实现代码如下:
    image

  2. 整体结构如下如:
    image-1662715830608

    CompressUtils工具类采用静态map对象(compressorMap),以编码方式为key,以具体编码对应的压缩对象为value进行装载,然后待其使用的时候通过编码方式进行获取对应的编码对象实现类。
    启动的时候装载到一个Map对象,key为上图的两种编码常量,value为具体实现类。当需要压缩的时候通过一下find方法或者重载方法进行获取具体压缩对象。代码如下:
    image-1662715860268
    2.缓存的使用
    由于压缩和解压缩的对资源的消耗极大,SOFARegistry采用了Google的Guava缓存来提升部分性能,当需要获取压缩的时候首选从缓存中获取,缓存中没有, 才进行压缩操作,同时将压缩结果缓存起来,以便下次获取的时候能直接获取。 具体代码细节参考如下:

小注:默认采用hession进行序列化
image-1662715891459
image-1662715900701
image-1662715908743

3.数据推送以及通讯两端的数据协商机制
发送端压缩对象的选择由订阅者接收端配置信息决定,所以可以保证发送端和接收端的压缩格式的统一

image-1662715925320
image-1662715957189

小结:
SofaRegistry是一种定位大型金融级分布式注册中心,数据通信定位偏向于大数据包大流量,因此对于数据传输效率和数据安全较为关注,采用高效的压缩方式,能有效的增加传输效率和使用安全性。目前支持的两种压缩方式都是市面上主流的压缩算法,同时配合这缓存的机制,极好的解决了大数据包带来大流量对网络带宽的压力,因此非常适合大型项目,但是相较于小型项目,这种压缩机制就显得很多余,压缩带来较高的cpu压力,因此SofaRegistry同时支持关闭压缩传输方式,以支持一些小型项目,具体使用根据业务来定。