CMQ 消息队列介绍
消息队列 CMQ(Cloud Message Queue,以下简称 CMQ)是基于腾讯自研消息引擎的分布式消息队列系统,CMQ 通过腾讯自研分布式 Raft 算法保证消息强一致,消息同步3副本落盘保障消息高可靠,提供消息队列、发布订阅、消息回溯、延时消息、顺序消息、消息轨迹等服务。具有高可靠、高可用、高性能、动态伸缩等优势。 CMQ 的开发迭代历程超过7年,为腾讯内部包括微信、webank、QQ 秀、手机 QQ 等大型业务提供异步的消息服务支持。
CMQ 已经正式商用,目前在腾讯云全球多个地域提供了高可用消息云服务,机房硬件设施按照腾讯自建 IDC 的高标准来实施。单个地域内采用多机房部署,即使整个机房都不可用,仍然可以为应用提供消息发布服务。同时在深圳金融专区、上海金融专区均有部署,提供金融级数据高可靠消息队列服务。
CMQ 目前提供 HTTP(S)、TCP 协议的接入。提供 PHP、Java、Python 等丰富语言的 SDK 接入。
接入方式 | HTTP(S) 接入 | TCP 接入 |
面向场景 | 提供基于 HTTP(S) 协议的同步接入方式,支持 Restful API 和多语言的 SDK 简单方便接入。 | 提供 TCP 同步/异步接入方式,支持多语言 SDK,提高生产端和消费端的效率,提供更高性能的消息队列服务。 |
亮点能力 | 消息无限堆积、水平扩展金融级消息高可靠,消息实时落盘。 | TCP 异步非阻塞方式收发消息,提升效率。消息无限堆积、水平扩展金融级消息高可靠,消息实时落盘。 |
说明
以下视频将为您介绍 CMQ 消息异步通信和安全可靠的特点:
应用场景概述
在需要进行异步通信的应用情景中推荐使用 CMQ。例如:
应用需要确保消息的可靠传递,即使发送消息时接收者由于断电、宕机或 CPU 负载过高等原因不可用,消息也可以在接收者可用时被送达。传统的消息队列把消息储存在内存中,故而不具备这一功能。腾讯云 CMQ 分布式消息队列中的消息会被持久化保存,直到接收者成功获取它。
需要在访问量与日俱增、囤积在队列中的消息数日益增长的情况下也能正常运转。传统的消息队列把消息存在本地内存中,单机的处理能力和内存容量都是有限的,不具备可扩展性。腾讯云 CMQ 的分布式架构保证了其扩容的简易性,更重要的是扩容对 CMQ 的使用者是完全透明的。
两个服务在网络不能互通或者应用的路由信息(例如 IP 和端口)不确定的情况下需要通信。例如,两个腾讯云上的服务在不知道对方地址的情况下需要进行通信,则可以通过约定队列名,一个向队列发送消息,一个从队列中收取消息而实现。
系统组件之间或者应用之间通信较多,需要组件或者应用自身维护彼此的网络连接,而且通信的内容不仅一种。这时,使用传统的架构会使得系统设计复杂。例如:当有一个中央处理服务需要向多个任务处理服务分派任务时(类似于 master-worker 模式),master 需要维护与所有 worker 的连接,并判断 worker 是否开始处理任务从而决策是否需要重新分派任务。同时,worker 的任务结果也需要汇报给 master。要在一个层面维护这样的系统会导致设计复杂,实现难度和维护成本大。如下图所示,使用腾讯云 CMQ 减轻两方之间的耦合性会使系统简洁高效许多。
系统组件之间或者应用之间耦合较紧,尤其对依赖的组件可控性较弱的情况下,希望降低耦合度。例如公司业务 CGI 收到用户提交的内容,将部分数据存储在自身的系统中,并将处理后的数据转发给其他业务应用(如数据分析系统、数据存储系统等)。传统的解决方案是服务间通过 socket 建立连接,此时如果接收方的 IP 或端口改变,或换了另一个接收方,则需要数据发送者进行修改。使用腾讯云 CMQ,发送者和接收者对彼此信息无感知,耦合度大大降低。