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