压缩用在哪一层
压缩可以作用在传输层与存储层,选哪一层取决于瓶颈位置:带宽受限时压缩接口响应或消息批量,磁盘与读写受限时用列式存储配合编码压缩。压不压、压哪一级属于工程取舍题,必须用实测数据回答,因为压缩同时消耗 CPU 与内存,而收益取决于数据自身的冗余程度。
怎么判断值不值得压
先看数据构成:文本类内容冗余度高,压缩收益明显;本身已是压缩格式的内容再压一次几乎没有收益。再看链路:内网带宽充裕而 CPU 紧张时压缩可能得不偿失,跨公网或按流量计费时价值更高。最后看压缩级别,级别调到极端档通常只换来很小的体积下降,延迟却明显上升,需要按实测曲线选档。
基本信息
| 传输压缩 | 按客户端声明的内容编码协商算法与级别,文本类收益最高 |
|---|---|
| 消息压缩 | 按批压缩比逐条压缩更有效,需要考虑批大小与延迟的权衡 |
| 存储压缩 | 列式存储配合字典与增量编码,减少磁盘占用与读取量 |
| 代价构成 | CPU 与内存消耗、压缩后不利于随机读、端到端延迟变化 |
| 验证方式 | 用真实数据测量压缩比与耗时,而不是凭经验设参数 |
分层取舍
| 层级 | 适用情况 | 注意事项 |
|---|---|---|
| 接口响应 | 文本类响应、带宽紧张 | 已压缩内容应跳过,避免白耗 CPU |
| 批量消息 | 吞吐优先的消息链路 | 按批压缩,批太小收益有限 |
| 列式存储 | 分析型查询与归档数据 | 编码方式需与查询模式匹配 |
| 备份归档 | 长期保存且极少随机读取 | 可提高压缩级别换取体积下降 |
典型使用场景
- 公网接口返回较大的文本或结构体响应,降低传输时间与流量成本
- 日志与监控数据写入存储前压缩,减少磁盘占用与写入放大
- 消息中间件按批压缩,提升有效吞吐并降低网络开销
- 归档冷数据时使用高压缩比编码,换取更低的长期存储成本
压缩前先看数据构成:已是压缩格式的内容再压一次收益很低,却持续消耗 CPU,属于典型的负收益优化,应先分类再决定。
压缩级别不要直接调到最高档:多数场景下体积改善有限,但 CPU 占用与延迟上升明显,容量规划会因此失真。