面试题答案
一键面试消息队列实现流量削峰填谷原理
- 削峰:在高并发场景下,大量请求快速涌入系统。消息队列作为中间层,会接收这些请求并将其暂存为消息。例如,在电商促销活动时,瞬间会有大量用户下单请求。消息队列可以快速接收这些下单请求消息,而不会让后端系统直接面对所有请求,避免系统因瞬间高负载而崩溃。
- 填谷:后端系统按照自身的处理能力,从消息队列中逐步拉取消息进行处理。比如,后端订单处理系统每秒钟能处理100个订单消息,它就以这个速度从消息队列中获取消息处理,而不是像没有消息队列时,在高并发时被瞬间大量请求压垮,在低峰时又闲置。这样就可以平缓流量,将高峰流量“削去”,低谷时仍能有消息处理,实现“填谷”。
在高并发场景下缓解系统压力的方式
- 解耦请求与处理:客户端发送请求到消息队列后即可返回,无需等待后端处理完成。后端系统从消息队列中异步获取消息处理,降低了系统间的耦合度,使各部分可以独立伸缩。例如,在一个大型网站的用户注册流程中,注册请求发送到消息队列后,前端可以立刻提示用户注册成功,后端再慢慢处理用户信息的入库等操作。
- 流量控制:通过设置消息队列的相关参数,如队列长度、消费速度等,来控制进入后端系统的流量。如果队列满了,后续请求可以选择等待、返回错误或者进行其他处理,避免后端系统过载。
适合场景举例
- 电商秒杀:秒杀活动瞬间会有大量用户请求购买商品,使用消息队列可以接收这些请求,后端系统按处理能力从队列中获取消息处理订单,防止系统因高并发崩溃。
- 日志处理:系统运行过程中会产生大量日志,将日志写入消息队列,后端日志处理系统从队列中读取日志进行存储、分析等操作,避免因集中写入日志文件或数据库造成系统性能问题。
- 大数据分析:在收集业务系统数据进行大数据分析时,业务系统产生的数据发送到消息队列,数据分析系统从队列获取数据进行分析,既不影响业务系统性能,又能保证数据分析的数据来源。