加载中

MQ

文章分类

浏览该分类下的所有文章

3 篇文章 1

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

消息队列用于解耦、异步、削峰填谷,分点对点和发布/订阅两种模式。选型要考虑顺序、伸缩、留存、容错、可靠性、时序、吞吐、路由等因素。Kafka 具高吞吐、持久、分区可扩展,适合日志、流处理,但全局有序和延时消息不足。RabbitMQ 基于 AMQP,支持多路由类型和定时消息,易用但学习成本高,适合中小流量。Pulsar 将计算存储分离,支持无限扩容、跨地域复制和延时消息,适合云原生大规模实时业务。RocketMQ 兼具高性能和严格顺序队列,可靠性强,偏向金融互联网等高可靠场景。

聊聊幂等设计

幂等指一次和多次请求产生相同副作用,主要用于防止超时重试导致重复操作,如转账、MQ 消费或表单重复提交。实现幂等的核心是为每个请求生成全局唯一 ID(UUID、Snowflake、UidGenerator 等),在业务处理前先检查该 ID 是否已存在,若存在直接返回上次结果。文中归纳了八种常见实现方式:①先查询再插入并捕获唯一键冲突;②直接插入利用冲突判断重复;③基于状态机的条件更新;④使用专用防重表;⑤Token 令牌(Redis 保存一次性 token);⑥悲观锁(select for update);⑦乐观锁(版本号校验);⑧分布式锁(Redis/ZooKeeper)。此外,对 HTTP 方法的幂等性进行说明:GET、HEAD、OPTIONS、DELETE、PUT 为幂等,POST 不具备幂等。通过这些设计和方案,可确保系统在网络异常或并发情况下保持数据一致性。

面试现场【MQ篇】

消息队列(MQ)是用于发送、存储、消费消息的中间件,常见实现有Kafka、RocketMQ、RabbitMQ。其核心场景包括应用解耦、流量削峰、异步处理、消息通信和远程调用。为防止消息丢失,需要在生产端采用同步/事务发送、存储端实现同步刷盘与多副本复制、消费端确认消费成功;顺序性可通过同分区单消费者或局部有序策略实现;重复消费通过唯一业务标识或缓存进行幂等处理。积压时可排查业务、批量消费、水平扩容或临时增设分区。技术选型依据吞吐、语言、持久化、顺序等特性;高可用通过集群、leader‑follower 复制实现。事务消息通过半事务、提交/回滚机制保证数据一致性。设计自研 MQ 时应考虑整体流程、RPC、持久化、消费模型、幂等、高可用、事务和伸缩等关键模块。