面试 -- 核心篇 -- 中间件(消息)
- 消息队列的应用场景 参考网址:消息队列的四种应用场景
消息队列设计思路
(1)异步处理
用户注册时,可以同时将 发送邮件 和 发送短信 功能放到消息队列中实现。可以提高用户响应时间,提高系统吞吐量。
(2)应用解耦
用户下单和库存扣账中使用消息,可以防止库存系统出问题后,导致用户下单失败。
(3)流量削峰
秒杀活动中,由于瞬间吞吐量很大,那么可以在客户端和业务处理中间加入消息队列,限制人数,丢弃掉过多的用户请求。这样可以防止流量暴增导致服务器挂掉。
(4)日志处理
日志采集客户端,负责日志数据采集,定时写受写入Kafka队列
Kafka消息队列,负责日志数据的接收,存储和转发
日志处理应用:订阅并消费kafka队列中的日志数据
ELK stack 日志分析。(Elasticsearch, Logstash, Kafka) (5)消息通讯
点对点通讯
聊天室
- 消息的重发补偿解决思路 参考网址:RocketMQ 解决消息有序和重复的思路
- 消息的幂等性解决思路 MQ之如何做到消息幂等
幂等性
MQ消息可达性+幂等性+延时性架构设计
- 消息的堆积解决思路 处理消息堆积的方法就是把它存下来。只是这个存储可以做成很多方式。比如存储在内存里,存储在分布式KV里,存储在磁盘里,存储在数据库里等等。但归结起来,主要有持久化和非持久化两种。
持久化的形式能更大程度地保证消息的可靠性(如断电等不可抗外力),并且理论上能承载更大限度的消息堆积(外存的空间远大于内存)。 但并不是每种消息都需要持久化存储。很多消息对于投递性能的要求大于可靠性的要求,且数量极大(如日志)。这时候,消息不落地直接暂存内存,尝试几次failover,最终投递出去也未尝不可。
市面上的消息队列普遍两种形式都支持。当然具体的场景还要具体结合公司的业务来看。
- 消息的有序性保证思路
- 如何实现自己的消息队列 消息队列设计精要
原文地址:https://www.cnblogs.com/itxiaok/p/10356646.html
时间: 2024-10-10 10:02:24