news 2026/5/4 3:41:56

QMQ高可用架构深度剖析:支撑60W QPS与4W+ Topic的核心技术揭秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QMQ高可用架构深度剖析:支撑60W QPS与4W+ Topic的核心技术揭秘

QMQ高可用架构深度剖析:支撑60W QPS与4W+ Topic的核心技术揭秘

【免费下载链接】qmqQMQ是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。项目地址: https://gitcode.com/gh_mirrors/qm/qmq

QMQ作为去哪儿网自主研发的消息中间件,自2012年诞生以来已成为支撑所有业务场景的关键基础设施,尤其在订单交易等高可靠性场景和报价搜索等高吞吐量场景中表现卓越。本文将深入解析QMQ如何通过创新架构设计实现60W QPS吞吐量和4W+ Topic的稳定运行,揭示其高可用设计的核心奥秘。

一、突破传统:QMQ的无Partition架构设计

传统消息中间件普遍采用基于Partition的存储模型,这在消费者扩容和负载均衡方面存在天然局限。QMQ创新性地采用消费与存储完全解耦的架构设计,使Consumer能够轻松实现扩容缩容。

图1:QMQ架构设计示意图,展示了消息日志、调度日志和内存哈希轮的协同工作流程

这种设计带来了显著优势:当需要提高某个subject的可用性时,只需添加更多机器节点,消息会通过负载均衡策略自动分布到不同机器上。即使某台机器离线,Producer也能自动将消息路由到其他可用节点,确保服务不中断。目前去哪儿网的酒店订单变更消息已有近70个不同的消费组订阅,这种无Partition架构使得大规模订阅场景下的负载均衡成为可能。

二、双重保障:分片与复制的高可用策略

QMQ从两个关键维度构建高可用能力:分片机制和主从复制。

1. 分片机制:横向扩展的弹性基础

QMQ通过将消息按负载均衡策略分布在不同机器节点上实现分片,这种设计使得系统能够通过简单添加机器来提升吞吐量和可用性。当某个节点出现故障时,Producer会自动将消息发送到其他健康节点,避免单点故障导致整个系统不可用。

2. 主从复制:数据可靠性的坚实保障

QMQ将服务端集群划分为多个group,每个group包含一个master和一个slave节点。所有消息的发送和消费都指向master节点,slave节点则通过同步机制与master保持数据一致,仅在master故障时提供容灾能力。

图2:QMQ消息发送与主从同步流程示意图

消息发送流程采用"同步写成功再响应"的机制:

  • Producer发送消息到master节点
  • master将消息同步到slave节点
  • 只有当slave确认同步完成后,master才向Producer返回成功响应

这种强同步机制确保了master和slave数据的一致性。当主从之间的同步延迟增大时,系统会自动将该group标记为readonly状态,此时只提供消息消费服务,不再接收新消息,避免数据不一致问题。

三、关键组件的高可用部署方案

为确保整体系统的高可用性,QMQ的各个组件都有特定的部署要求:

1. MetaServer:服务发现的高可用基石

MetaServer建议部署两台实例,并通过Nginx实现负载均衡。虽然MetaServer依赖MySQL数据库,但运行时并不强依赖MySQL。即使MySQL故障,也只会影响新主题和新消费者的上线,对已有服务无影响。

图3:QMQ MetaServer启动配置界面,展示了关键参数设置

2. Broker:消息存储的核心节点

Broker采用主从分组部署方式,每组包含一主一从两台服务器,建议至少部署两组(4台服务器)。这种配置既保证了数据的可靠性,又提供了足够的处理能力。

3. Delay Server:延时消息的可靠保障

Delay Server的部署方式与Broker相同,采用主从架构。如果业务中没有延时消息需求,可以不部署此组件。

4. Watchdog:事务消息的补偿机制

Watchdog作为扫库应用,建议部署两台实例,但同一时刻只有一台处于工作状态。当主实例故障时,系统会自动切换到备用实例,确保事务消息的可靠处理。

四、实战经验:高可用架构的最佳实践

1. 故障处理机制

  • Master离线:目前QMQ不提供自动切换功能,需要人工介入启动新的master。
  • Slave离线:该group将进入只读状态,不再接收新消息,仅提供消费服务。
  • 数据恢复:当master出现故障导致消息丢失时,可以将其切换为slave,原来的slave升级为master,通过同步机制恢复数据。

2. 性能优化策略

QMQ通过多种机制优化性能,包括:

  • 内存哈希轮(hash wheel in memory)实现高效的消息调度
  • 预加载索引(pre load index)加速消息查询
  • 批量处理机制减少IO操作,提高吞吐量

这些优化使得QMQ能够轻松应对60W QPS的高并发场景,同时支持4W+ Topic的大规模消息处理。

五、总结:QMQ高可用架构的核心价值

QMQ的高可用架构设计通过无Partition模型、分片机制和主从复制等创新技术,成功解决了传统消息中间件在可用性和扩展性方面的局限。其最小化部署方案(4台Broker+2台MetaServer+2台Watchdog)即可满足企业级高可用需求,而弹性扩展能力又能应对业务增长带来的挑战。

无论是支撑跟交易息息相关的订单场景,还是处理报价搜索等高吞吐量场景,QMQ都展现出卓越的稳定性和可靠性,成为去哪儿网消息驱动架构的核心支柱。对于需要构建高可用消息系统的企业而言,QMQ的架构设计理念和实践经验无疑具有重要的参考价值。

要开始使用QMQ,只需通过以下命令克隆仓库:

git clone https://gitcode.com/gh_mirrors/qm/qmq

然后参考官方文档进行部署和配置,即可快速构建属于你的高可用消息中间件系统。

【免费下载链接】qmqQMQ是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。项目地址: https://gitcode.com/gh_mirrors/qm/qmq

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 3:41:28

Arm SSE-200子系统复位架构与Cortex-M33配置解析

1. SSE-200子系统复位架构解析在嵌入式系统设计中,复位机制如同城市供电系统中的紧急断电开关,当电网出现异常时能够快速切断所有电路,待故障排除后重新有序供电。SSE-200作为Arm面向物联网和边缘计算设计的子系统,其复位架构采用…

作者头像 李华
网站建设 2026/5/4 3:39:55

如何3分钟完成Windows和Office智能激活:KMS_VL_ALL_AIO终极指南

如何3分钟完成Windows和Office智能激活:KMS_VL_ALL_AIO终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗?Office软件突然变成只读模…

作者头像 李华
网站建设 2026/5/4 3:34:34

Neovim光标轨迹插件smear-cursor.nvim:实现原理、配置与优化指南

1. 项目概述:一个为Neovim设计的“涂抹式”光标增强插件如果你和我一样,是个深度Neovim用户,每天有超过8小时的时间都泡在代码编辑器里,那你一定对光标的“存在感”有很高的要求。默认的Neovim光标,无论是块状&#xf…

作者头像 李华
网站建设 2026/5/4 3:31:54

如何快速构建高效QQ机器人:Go-CQHTTP完整实战指南

如何快速构建高效QQ机器人:Go-CQHTTP完整实战指南 【免费下载链接】go-cqhttp cqhttp的golang实现,轻量、原生跨平台. 项目地址: https://gitcode.com/gh_mirrors/go/go-cqhttp 你是否曾为社群管理而烦恼?每天手动审批加群请求、处理违…

作者头像 李华
网站建设 2026/5/4 3:31:30

5分钟快速搭建OCaml开发环境:Dune构建系统入门指南

5分钟快速搭建OCaml开发环境:Dune构建系统入门指南 【免费下载链接】dune A composable build system for OCaml. 项目地址: https://gitcode.com/gh_mirrors/du/dune Dune是OCaml生态中一款功能强大的构建系统,它能帮助开发者轻松管理项目依赖、…

作者头像 李华