压缩与载荷优化

在传输与存储层压缩数据:HTTP 响应压缩(gzip/brotli)、消息批量压缩与列式存储压缩各有适用;要在 CPU 开销与带宽节省之间测量取舍。

压缩用在哪一层

压缩可以作用在传输层与存储层,选哪一层取决于瓶颈位置:带宽受限时压缩接口响应或消息批量,磁盘与读写受限时用列式存储配合编码压缩。压不压、压哪一级属于工程取舍题,必须用实测数据回答,因为压缩同时消耗 CPU 与内存,而收益取决于数据自身的冗余程度。

怎么判断值不值得压

先看数据构成:文本类内容冗余度高,压缩收益明显;本身已是压缩格式的内容再压一次几乎没有收益。再看链路:内网带宽充裕而 CPU 紧张时压缩可能得不偿失,跨公网或按流量计费时价值更高。最后看压缩级别,级别调到极端档通常只换来很小的体积下降,延迟却明显上升,需要按实测曲线选档。

基本信息

传输压缩按客户端声明的内容编码协商算法与级别,文本类收益最高
消息压缩按批压缩比逐条压缩更有效,需要考虑批大小与延迟的权衡
存储压缩列式存储配合字典与增量编码,减少磁盘占用与读取量
代价构成CPU 与内存消耗、压缩后不利于随机读、端到端延迟变化
验证方式用真实数据测量压缩比与耗时,而不是凭经验设参数

分层取舍

层级适用情况注意事项
接口响应文本类响应、带宽紧张已压缩内容应跳过,避免白耗 CPU
批量消息吞吐优先的消息链路按批压缩,批太小收益有限
列式存储分析型查询与归档数据编码方式需与查询模式匹配
备份归档长期保存且极少随机读取可提高压缩级别换取体积下降

典型使用场景

  • 公网接口返回较大的文本或结构体响应,降低传输时间与流量成本
  • 日志与监控数据写入存储前压缩,减少磁盘占用与写入放大
  • 消息中间件按批压缩,提升有效吞吐并降低网络开销
  • 归档冷数据时使用高压缩比编码,换取更低的长期存储成本
压缩前先看数据构成:已是压缩格式的内容再压一次收益很低,却持续消耗 CPU,属于典型的负收益优化,应先分类再决定。
压缩级别不要直接调到最高档:多数场景下体积改善有限,但 CPU 占用与延迟上升明显,容量规划会因此失真。

易错点

  • 对已压缩内容再次压缩,CPU 被白白消耗却没有体积收益
  • 压缩级别调到极端档,延迟明显上升而收益有限,压测结论难以复现
  • 响应压缩后缓存键未区分编码,压缩内容与原文混缓存导致解析失败
  • 只在网关做压缩而忽略消息链路,跨机房传输的流量成本从未下降
  • 未用真实数据测量就设定参数,压缩比与耗时全靠猜,优化效果无法验证

数据来源与参考

  • RFC 9110 HTTP Semantics(内容编码)
  • 《数据密集型应用系统设计》(Kleppmann)第 4 章
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌