形成天才的决定因素应该是勤奋。——郭沫若
1 削峰填谷
在秒杀场景中比较常见,就是削平短暂的流量高峰,即使队列有挤压导致请求被短暂的延迟处理,但是只要我们实时监控队列中的堆积长度,在堆积量超过一阈值时,增加队列处理机就行了。
2 异步处理
我们秒杀场景中有重要的业务逻辑(生成订单,扣减库存),也有次要的业务逻辑(发放优惠卷,增加积分)。如果把次要的业务逻辑放到队列中异步处理,那么重要的逻辑就会相应的减少延迟,一定程度上解决用户等待过长时间的问题。
3 解耦合
除了异步处理和削峰填谷以外,消息队列在秒杀系统中起到的另一个作用是解耦合。
比如我们大数据团队想要获取商品活动的数据,那么在秒杀这样重要的场合我们可以选择处理的方式很多,比如http或者rpc同步调用大数据服务主动上报,但是这样明显会有缺陷,当大数据有问题的时候(比如延迟增加或者网络抖动),直接拖垮我们的秒杀服务,影响用户体验。因此最好的方式是解耦合,把这些活动的数据写入队列,这样大数据团队就可以订阅这个topic,然后获取数据做过滤和处理了。
4 小结
- 削峰填谷是消息队列最主要的作用,但是会造成请求处理的延迟。
- 异步处理是提升系统性能的神器,但是你需要分清同步逻辑和异步逻辑的边界,同时消息存在着丢失的风险,我们需要考虑如何确保消息一定到达。
- 解耦合可以提升你的系统整体的鲁棒性。
5 关注公众号
微信公众号:堆栈future