juejin.cn

  1. 频繁的库存同步更新
  2. 哔哩哔哩的排行榜单更新

通过积攒一批数据执行更新操作,降低写压力

一、背景

“攒批”指的是收到数据之后,不需要立马调用下游业务处理,需要在内存中进行积攒,等到满足条件后(一般是积攒总数目到达最大值,或者已经积攒的元素总大小超过一个设定阈值)再执行数据处理。

想象下,在下面的流水线中,一个瓶子的内容没装满之前显然不能装箱,需要“攒满”一瓶的“数据”之后才能交付下游进行装箱(进行数据消费)。

image.png

设计攒批队列最开始的起因是负责的业务中台需要在收到消息之后去调用下游业务的注册接口,但是消息一到就去调用下游接口,就可能导致下游接口的qps压力非常大,多积攒一点数据再去调用下游接口,对于整体调用效率和接口稳定性层面都会有很大提升。

目前开源代码中的攒批队列支持下述功能:

需要关注的是攒批队列是个单机内存版本的攒批,不适用于分布式场景“攒批”。

攒批队列(waiting-bus-batch 以下简称WBB)项目内部版本已经在多个组件中进行生产使用,功能正常,但是由于是开源项目,相比内部正式版本做了大量代码简化,旨在为读者提供一种设计思路,如需使用到生产环境建议,建议做好功能测试和压力测试工作。