队列的最主要用途是异步任务和通信两个方面:
1.1 异步任务
异步的思路主要用来缓解瞬间压力、耗时操作、并行任务等:
- 缓解瞬间压力:若系统每秒处理能力是100请求,而最高峰值可能达到每秒1000请求,若不采用队列,很有可能会出现服务不可用或者长时间等待。此时可以用队列将未能成功执行的请求放入队列,顺序执行,直到所有请求都被处理
- 耗时操作:缩略图生成
- 并行任务:发贴后通知所有的好友
1.2 通信
通信的思路主要用来解决在不同的独立模块或者系统之间相互同步数据、通知执行某些操作耗时的操作,且业务需求允许的情况下,都可以放到异步队列中,比如:
- 发微博,把微博推送到你的好友收件箱(假定采用的是推的方式),类似的还有feed
- 上传图片要生成不同尺寸的缩略图
- 发帖子的同时,利用百度知道api同步一份到百度知道
- 群发邮件