一句话总结
Guava数据分组+CountDownLatch多线程栅栏同步
实现高并发批量解决通知风暴难题
背景和业务痛点
场景
通知需要在5分钟内完成:
- 50万+客户持仓变动通知
- 30万+风险预警消息推送
- 10万+交易确认短信发送
技术挑战
- 百万级消息必须要在5分钟内触达
- 第三方短信通道存在QPS限制(500次/秒)
高并发架构设计
- Guava数据分组
- 线程池
- CountDownLatch协调器
核心代码实现
1.动态线程池
2. Guava数据分组
这里直接按照1000进行分组,主要是用来模拟的🤣
后续可以用动态的分片策略
List<List<T>> partitions = Lists.partition(taskList, 1000);
3.CountDownLatch分布式协调器
CountDownLatch countDownLatch = new CountDownLatch(taskList.size());
for (T task : taskList) {
threadPool.execute(()->{
try {
consumer.accept(task);
}finally {
countDownLatch.countDown();
}
});
}
countDownLatch.await();
效果
处理耗时从原来的超20分钟,优化后5分钟以内