加载中

MQ

文章分类

浏览该分类下的所有文章

3 篇文章 1

消息队列基本原理和选型对比

消息队列用于解耦、异步处理和削峰填谷,常见模式有点对点和发布/订阅。选型时关注顺序、伸缩、留存、容错、可靠性、时序、吞吐和路由等指标。Kafka 采用分区+副本,吞吐高、持久可靠,但仅分区内有序且不支持延时消息;适合日志收集、流式处理。RabbitMQ 基于 AMQP,支持多种 Exchange(direct、fanout、topic),功能完整、易用,适合业务流量中等且需定时、查询等高级特性。Pulsar 将计算与存储分离,支持无缝扩容、跨地域复制和延时消息,兼容流和队列模型,适合云原生大规模实时传输。RocketMQ 具备高可靠、顺序队列和多协议支持,适用于金融等对可靠性要求极高的场景。通过对比可根据业务需求选择最合适的中间件。

聊聊幂等设计

本文围绕幂等概念展开,先解释幂等在数学和计算机中的含义及其必要性,尤其在远程调用超时、重复消费、表单重复提交等场景中的风险。阐述处理超时的两种思路:查询下游状态或依赖幂等接口。随后指出实现幂等的关键是全局唯一标识(UUID、Snowflake 等),并提供八种常见实现方案:①先查后插+唯一键冲突;②直接插入捕获冲突;③基于状态机的更新判断;④使用独立防重表;⑤Token 令牌;⑥悲观锁;⑦乐观锁(版本号);⑧分布式锁(Redis/ZooKeeper)。最后列举 HTTP 方法的幂等性,说明 GET、HEAD、OPTIONS、DELETE、PUT 为幂等,而 POST 不具幂等性。整体强调幂等设计的流程、实现技巧及其在分布式系统中的重要性。

面试现场【MQ篇】

消息队列(MQ)是一种基于队列的消息中间件,常见实现有 RabbitMQ、RocketMQ、Kafka。它用于应用解耦、流量削峰、异步处理、消息通信和远程调用等场景。为防止消息丢失,需在生产者采用同步或事务发送、存储端实现同步刷盘和主从复制、消费者在业务成功后确认 ACK。顺序性通过同分区或同消费者串行消费实现,局部有序可兼顾吞吐。重复消费可通过唯一业务标识或 Redis 幂等校验避免。积压时应先排查业务 BUG,再优化消费逻辑、批量处理或水平扩容;必要时临时扩容分区并并行消费。技术选型对比:Kafka 吞吐最高、支持顺序和大规模持久化;RocketMQ 稳定、阿里出品;RabbitMQ 稳定性好但吞吐一般。高可用依赖集群复制、Leader‑Follower 选举。事务消息通过半事务、本地事务提交或回滚实现最终一致性。设计自研 MQ 时需考虑生产‑存储‑消费流程、RPC、持久化、消费模型、幂等、高可用、事务和水平扩展等核心要素。