一、基础信息
1、定义:腾讯云消息队列(Cloud Message Queue,CMQ)是分布式消息队列服务,可为分布式部署的不同应用或同一应用的不同组件之间提供基于消息的可靠异步通信机制,防止消息丢失。
2、架构特点:属于典型的三层架构,支持业界主流协议,业务可选择HTTP/AMQP/MQTT等多种协议,适配层负责协议适配和路由控制,后端Broker Set提供消息持久化存储、转发以及基于消息的高阶功能,控制Server和管控平台负责智能调度、故障处理、运营监控。
二、核心特性
1、高可用性
节点级:若Set中单个Slave发生故障,因Raft算法使故障对业务透明;Master故障时,Raft算法会自动发起选举,符合条件的Slave自动提升为Master,过程秒级且大多对业务无影响。
Set级:当一个Set中的多数节点同时故障导致不可用时,CMQ会通过双Set保障可用性,业务申请使用时会在两个Set上分别建立队列元数据,正常情况下一个Set对外服务,另一个Set备用,当主Set不可用超过一定时间,消息流会自动切换到备用Set。
园区级:金融业务多中心多活场景下,CMQ通过插件对两个数据中心的消息服务进行异步同步,当一个数据中心故障时,虽有少量数据可能丢失,但可通过log或对账恢复。
2、高性能优化
针对Raft算法中Master向所有Slave发起网络IO及同步刷盘这两个耗时操作,CMQ在消息个数和时间维度上合并消息,批量发送raft_log和批量刷盘来提高QPS。
3、弹性伸缩:分布式消息队列性能和消息堆积存储量理论上无上限,CMQ的路由控制Server会根据存储Set的实际负载调整消息收发路由信息并适配层,整个过程对使用者透明。
4、数据可靠性:利用数据多副本存储保证可靠性,通过Raft算法确保副本间数据强一致,以一个存储Set中3个节点为例,Master负责消息生产消费请求,收到请求后先通过Raft一致性模块写Raft log到本地并同步给所有Slave节点,Slave收到Master发来的Raft log持久化到本地同时返回成功信息,Master收到过半节点的成功信息后将请求信息提交到mq状态机,mq状态机处理请求信息后返回用户成功。
三、产品优势
1、高效支持亿级消息收发和推送,单集群QPS超过10万,满足业务消息收发需求。
2、底层系统可根据业务规模自动弹性扩展消息队列的队列数量和存储容量,对上层业务无感知。
3、支持HTTPS,并基于腾讯云平台多维度的安全防护,抵御网络攻击,保护业务隐私,同时支持腾讯云CAM账号权限管理,细化管理。
四、应用场景
1、消息永不丢失:如微信红包系统,微信架构组引入CMQ避免分布式事务增加系统开销,当资金入账失败时,账户系统可不断从CMQ重新拉取重试更新操作,保证入账消息不丢,避免入账失败回滚和频繁轮询数据库等问题。
2、同城容灾:适用于对消息可靠性要求极高的场景,确保在城市级别的灾难情况下,消息仍能可靠传递和处理。
3、实时消息推送:为QQ彩票等提供实时、精准的消息推送,确保重要信息及时送达。
4、游戏竞技消息和对话详情:为地下城与勇士DNF等游戏提供丰富的竞技消息和实时对话详情,提升玩家的游戏体验。
五、相关问题与解答
1、问题:CMQ如何保证消息的顺序性?
解答:CMQ本身无法严格保证跨分区消息的顺序性,但在同一分区内可以保证消息的顺序,如果对消息顺序有严格要求,可以在应用层面进行控制,例如按照一定的规则将相关联的消息发送到同一个分区。
2、问题:CMQ的队列模型中的各个属性具体是如何影响消息的处理的?
解答:maxMsgHeapNum决定了队列的存储和堆积能力,当达到最大值时,新的消息可能会被拒绝或丢弃;pollingWaitSeconds影响消费者获取消息时的等待时间,设置合理可平衡资源利用和消息处理效率;visibilityTimeout规定了消息被获取后的不可见时长,在此时间内其他消费者无法获取该消息,用于防止重复消费;maxMsgSize限制了单个消息的最大长度,超过此长度的消息将被拒绝;msgRetentionSeconds设定了消息在队列中的保存时间,到期后消息将被删除,可避免队列中积压过多无用消息;createTime记录队列创建时间,可用于管理和统计;lastModifyTime记录最后一次修改队列属性的时间;activeMsgNum表示处于Active状态的消息总数,近似值可用于监控队列活跃度;inactiveMsgNum表示处于Inactive状态的消息总数,近似值可用于了解正在消费的消息情况;rewindSeconds和rewindmsgNum用于控制消息回溯功能;minMsgTime表示消息最小未消费时间;delayMsgNum表示延时消息数量。
各位小伙伴们,我刚刚为大家分享了有关“cmq服务器”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/60197.html<