为什么需要消息系统/消息队列/消息中间件
- 随着网站的发展,用户越来越多,业务也越来越复杂, 经常面临
高并发
问题 - 如同一时刻有大量的用户情况过来访问数据库,
如果没有缓冲机制,那么会导致数据库压力过大,连接溢出
- 那么这时候就需要一些机制来保证系统的正常运行,如之前学习的缓存,将查询请求挡在数据库之前,但是修改更新操作还是挡不住的,所以需要有消息缓冲队列来解决
消息队列的作用/应用场景
- 应用
解耦
:- 多个应用可通过消息队列对消息进行处理,应用之间相互独立,互不影响;
- 如下图的例子,图片上传完立马可以给用户响应上传成功,然后再由人脸识别系统进行图片识别,返回识别结果,也可以让用户
体验更好
- 再比如发送
短信验证码
,一点击发送,立马响应"验证码已发送",但实际上可以将发送请求放到消息队列,再调用运营商接口发送短信,内容放到redis一份做验证/次数限制等,也可以让用户体验很好
异步处理:
- 相比于串行和并行处理,
异步处理可以减少处理的时间
; - 如:
- 用户注册时,
- 之前没有使用消息队列那么就是同
步处理,点击完注册按钮,要发短信/发邮件/发站内欢迎信…一系列操作等待时间很久 - 现在使用了消息队列,那么就可以异步处理,点击完注册按钮,直接返回成功,然后再异步并行处理同时发短信/发邮件/发站内欢迎信…
流量削峰/数据限流:
- 流量高峰期,可通过
消息队列来控制流量, 避免流量过大而引起应用系统崩溃
; - 消息队列还具有很好的削峰作用,通过异步请求,
将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务
.在电商网站促销,秒杀活动中,合理使用消息队列,可有效抵御促销活动刚开始大量涌入的订单对系统造成的冲击
消息通信:
- 实现点对点消息队列或聊天室等。
消息系统/消息队列的模式分类
- 点对点:一对一
- 发布订阅
常见的消息系统有哪些
- 注意:
- RocketMQ是阿里开源的一款消息中间件, 底层参考Kafka做了一些改进
- 但是Kafka要比RocketMQ更加成熟,所以大数据领域用的最多的还是Kafka