RTA 实战之 Disruptor 队列
摘要
在RTA系统(信息流广告获客流量筛选环节)中我们遇到一个这样的场景:RTA请求的入参和决策过程以及结果都需要一条一条的记录至数据库中,方便业务人员进行后续的效果分析,但我们都知道,RTA系统是个动辄超过几十万QPS的特殊业务系统,也就意味着系统每秒需要处理超过几十万条请求记录。一般在这种场景下,我们首先会想到利用内存队列进行批处理操作,以便达到降低数据库QPS的压力,否则大量的请求直接打入至数据库,集群规模和压力都是不敢想象的。但这时候如果简单利用Java内置的内存队列(如ArrayBlockingQueue、ConcurrentLinkedQueue等),通过压测后我们会发现单机处理能力上不去,因为这些内存队列会直接压榨机器的性能,导致单机处理能力达不到预期的效果。所以这时候我们就想要去找一款比Java自带内存队列具备更优性能,更强大处理能力的内存队列,用以应对此种场景,提高我们的单机处理能力。
后来通过调研,参考了Log4j等一些知名的开源项目,里面用到了一款叫Disruptor的高性能内存队列,通过对它的调研和了解,发现很适合RTA系统的这个场景,我们以disruptor为中心构建超百亿的消息处理模型。
欢迎在评论区写下你对这篇文章的看法。