-
前言:为什么“批处理”和“请求合并”是高性能系统的隐形神器?
- 高并发场景下,许多请求其实是重复的
- 大量热点 key 的请求被重复访问
- 如果能合并成一条请求,系统压力可减少 90%+
-
什么是请求合并(Coalescing)?
-
多个相同请求 → 合成一次
-
常用于:
- 配置读取
- 文件元数据读取
- 用户信息请求
-
Netflix、Google、AWS 系统普遍使用
-
-
什么是批处理(Batch Processing)?
-
将 N 条请求聚合为一条批量操作
-
如:
- 批量更新
- 批量写入
- 批量 RPC
- 批量 DB 查询
-
降低 CPU 切换、网络 IO、DB 连接消耗
-
-
请求合并的核心难点
- 等待窗口(batch window)多长?
- 如何避免延迟过高?
- 如何处理失效 key?
- 如何支持并发安全?
-
批处理的三大关键点
- Batching Window
- Buffer Flush 条件
- Backpressure(背压)
-
工程实现模式
- Future 合并(Java CompletableFuture)
- RingBuffer(类似 LMAX Disruptor)
- Queue + Flush Thread
- 内存通道(Memory Channel)
-
请求合并在分布式系统中的应用
- Redis 热 key 防击穿
- 配置中心多租户拉取
- 元数据查询
- 在线计算中的向量批量处理(AI 系统常用)
-
实时批处理(Streaming Batch)
- 每 10ms 聚合一次
- 适合读多写少的场景
- 产生“准实时”的高性能数据管道
-
企业案例:批处理让某服务吞吐翻 10 倍
- 原来每秒 3k QPS
- 合并请求后达到 30k+ QPS
- 延迟仅增加 5ms
-
总结
- 请求合并是高性能架构中的隐藏王牌
- 批处理是吞吐优化的根基
- 很多看似复杂的性能问题,一招批处理就解决了