当前位置: 首页 > news >正文

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),仅供参考

http://www.jsqmd.com/news/748406/

相关文章:

  • 2026年24小时发电机出租标杆名录:乙醇发电机组、停电应急发电机租赁、备用发电机出租、大型发电机出租、就近发电机租赁选择指南 - 优质品牌商家
  • 从 SOIDC 开始,把 ABAP 系统接入 OIDC 登录体系
  • 大模型越狱攻防:从提示注入到对抗训练的安全实践
  • 含分布式电源配电网故障区段定位及恢复拓扑识别【附代码】
  • GPU加速分子动力学模拟:MPS技术优化实践
  • OpenMemory性能优化终极指南:记忆衰减、评分算法与检索动态全解析
  • 2026会所移动隔断哪家好:会议室移动隔断、伸缩隔断、公共卫生间隔断、公共厕所隔断、办公室移动隔断、办公楼卫生间隔断选择指南 - 优质品牌商家
  • SpartanEngine:10分钟快速入门指南 - 打造你的第一个3D游戏世界
  • Smarter Weather开发者平台:REST API与MCP服务器集成实战指南
  • AI驱动浏览器:基于LLM的网页智能理解与自动化交互架构解析
  • 第19篇:Vibe Coding时代:Docker 部署 LangGraph Agent 实战,解决本地能跑、服务器跑不起来问题
  • 掌握vue-slider-component多滑块同步:打造动态交互界面的终极指南
  • 《AI大模型应用开发实战从入门到精通共60篇》048、边缘端部署:在树莓派或Jetson上运行小模型
  • The-NLP-Pandect项目深度解析:如何构建完整NLP知识体系
  • 2026年电商外包客服公司TOP5推荐:推荐几家客服外包公司/推荐本地外包客服公司/哪家客服外包有优势/四川外包客服公司/选择指南 - 优质品牌商家
  • 八大网盘直链下载助手:告别限速与强制客户端的终极解决方案
  • core.async高级模式实战:状态机、广播通信与动态流程编排
  • 基于Supabase与OpenAI构建私有文件智能问答系统
  • 构建多功能CLI工具集:从架构设计到工程实践
  • DoL-Lyra完全指南:自动化游戏Mod整合系统的终极使用教程
  • Cypress Testing Library 终极指南:如何快速提升E2E测试质量
  • 如何为 Claude Code 编程助手配置 Taotoken 作为后端服务
  • 如何使用visx与CSS Houdini打造惊艳数据可视化:Paint API实战指南
  • 基于React/Vue的JSON树可视化组件开发:优化LLM输出解析与调试体验
  • React Native HTMLView 实战教程:10个真实场景中的最佳实践案例
  • 从零开始学习CNN:用Machine Learning Experiments打造智能石头剪刀布识别系统
  • 2026佛山专业配镜指南:佛山配镜、佛山防蓝光眼镜、佛山专业配眼镜、佛山太阳镜、佛山成人配镜、佛山散光配镜、佛山眼镜店定制选择指南 - 优质品牌商家
  • Claude代码助手:从对话到协作的AI开发工具深度解析
  • Windows批处理色彩管理工具:零依赖命令行颜色转换与配色方案生成
  • 如何快速实现Jets.js与jQuery集成:传统项目现代化的终极解决方案