MQ系列9:高可用架构分析
MQ系列1:消息中间件执行原理
MQ系列2:消息中间件的技术选型
MQ系列3:RocketMQ 架构分析
MQ系列4:NameServer 原理解析
MQ系列5:RocketMQ消息的发送模式
MQ系列6:消息的消费
MQ系列7:消息通信,追求极致性能
MQ系列8:数据存储,消息队列的高可用保障
1 介绍
消息中间件是指在分布式系统中完成消息的发送和接收的基础软件。
消息中间件也可以称消息队列(Message Queue / MQ),互联网场景中经常使用消息中间件进行消息路由、订阅发布、异步处理等操作,来缓解系统的压力。
引入消息队列主要是为了解决如下问题的:
1、解耦 :如订单系统,可以通过消息队列把削减库存的工作交给库存系统去处理,而不用等实时响应。
2、执行有序性:先进先出原理,按照进入消息队列的顺序处理业务事件。
3、消息路由 :按照不同的规则,将队列中消息发送到不同的业务服务中。
4、异步处理 :将一些无需实时响应结果的计算放到异步中,提升系统的吞吐率。
5、削峰 :将峰值期间的操作削减,比如整个操作流程包含12个步骤,后11个步骤非强关注结果的数据,可以放在消息队列中。
既然本身就是为了解决大流量场面而设计的,那他自身的稳定性、健壮性就显的无比重要,下面我们来看看消息队列怎么去保证可用性的。
2 消息队列的基本构成
分析高可用特性前先复习下消息队列的基本组件,无论是哪一种类型的消息队列,基本都包含以下构成:
- Broker:消息服务器,以服务的形式运行在server端,给各个业务系统提供核心消息数据的中转服务。
- Producer:消息生产者,业务的发起方,负责生产消息传输给broker。
- Consumer:消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
- Topic:主题模块,发布/订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
- Queue:队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收。
- Message:消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输。

上图中以kafka为例子,这是典型的集群模式,Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。
- producer 负责生产消息
- consumer 负责消费消息
- broker 消息服务器,提供消息核心的处理工作
- zookeeper 用于生产者和消费者的注册与发现
3 高可用性架构保证
了解了一个消息队列的构成之后,我们来看看这种结构是怎么保障高可用性的。
首先,高可用是指系统的出错概率和无故障运行时长,从消息队列角度出发,至少要保证一下几点:
低消息丢失率:消息可靠性也是衡量消息中间件好坏的一个关键因素,尤其是在金融支付领域,消息可靠性尤为重要。
低故障率:消息中间件的可用性是指无故障运行的时间百分比,通常用几个 9 来衡量,如 99.99% 就是一个不错的指标。
多副本容错能力:一般会要求多副本及强一致性,多副本可以保证在 master 节点宕机异常之后可以提升 slave 作为新的 master 而继续提供服务来保障可用性。
3.1 RocketMQ
以为RocketMQ为例,集群模式如下:
- 多master 模式
- 多master多slave异步复制模式-
- 多 master多slave同步双写模式。
- Name Service 集群: RocketMQ 的 "中央大脑 " , RocketMQ 的服务注册中心,集群模式确保它的可用性。
- Produer 集群
- Consumer 集群:避免单例的消费服务故障导致消息堆积。
多master 多slave模式部署架构图:

Producer 与 NameServer集群中的其中一个节点(随机或者RR选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,既可以从 Broker Master 订阅消息,也可以从 Broker Slave 订阅消息。
3.2 Kafka
Kafka集群中包含如下组成部分:
- 几个消息生产者Producer(可以是业务的Web程序、定时任务服务,其他下游服务的请求等)
- 一个broker组(Kafka支持横向扩展,一般来说broker数量越多,集群吞吐率越高)
- 一个消费组 Consumer Group,在资源充足的情况下,消费者越多,消费效率越高,性能也就越好
- 一个Zookeeper集群:保证消费者和生产者的注册和订阅,避免业务之间的耦合,也提高了可用性。

两个关键点:
- Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。
- Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。
4 总结
上面介绍了简历高可用消息队列架构的条件,以及RocketMQ和Kafka实现方案。具体高可用性特性方面(如 消息顺序性保障、消息幂等性保障、消息安全性保障、消息事务性保障),我们会在后面的章节中详细的介绍。
MQ系列9:高可用架构分析的更多相关文章
- MySQL系列:高可用架构之MHA
前言 从11年毕业到现在,工作也好些年头,入坑mysql也有近四年的时间,也捣鼓过像mongodb.redis.cassandra.neo4j等Nosql数据库.其实一直想写博客分享下工作上的零零碎碎 ...
- MQ系列3:RocketMQ 架构分析
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 1 背景 我们前面两篇对主流消息队列的基本构成和技术选型做了详细的分析.从本篇开始,我们会专注当下主流MQ之一的RocketMQ. 从 ...
- MySQL 高可用架构在业务层面的应用分析
MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...
- 【亲述】Uber容错设计与多机房容灾方案 - 高可用架构系列
此文是根据赵磊在[QCON高可用架构群]中的分享内容整理而成.转载请事先联系赵磊及相关编辑. 赵磊,Uber高级工程师,08年上海交通大学毕业,曾就职于微软,后加入Facebook主要负责Messen ...
- (5.1)mysql高可用系列——高可用架构方案概述
关键词:mysql高可用概述,mysql高可用架构 常用高可用方案 20190918 现在业内常用的MySQL高可用方案有哪些?目前来说,用的比较多的开源方案分内置高可用与外部实现,内置高可用有如下: ...
- 【转】单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...
- [转载] 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
原文: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209406532&idx=1&sn=2e9b0cc02bdd ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...
随机推荐
- 『现学现忘』Git后悔药 — 32、revert撤销(一)
目录 1.Git的三种后悔药 2.revert命令原理 3.revert命令的使用 (1)移除某次提交的修改 (2)revert命令说明 1.Git的三种后悔药 在Git中后悔药有三种:amend.r ...
- 一天一道Java面试题----第十二天(如何实现接口幂等性)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.如何实现接口幂等性 1.如何实现接口幂等性 唯一id.每次操作,都根据操作和内容生成唯一的id,在执行之前先判断id是 ...
- 表单快速启用城市地区功能 齐博x1齐博x2齐博x3齐博x4齐博x5齐博x6齐博x7齐博x8齐博x9齐博x10
比如分类系统\application\fenlei\config.php 修改这个文件,里边加入参数 'use_area'=>true, 那么会员中心与后台的,修改发布页面,都会自动加上城市地区 ...
- 故事 --- Linux和UNIX之间的那些爱恨与情仇
Linux和UNIX具体有哪些关系及区别? UNIX 与 Linux 之间的关系是一个很有意思的话题.在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 ...
- 探究Presto SQL引擎(4)-统计计数
作者:vivo互联网用户运营开发团队 - Shuai Guangying 本篇文章介绍了统计计数的基本原理以及Presto的实现思路,精确统计和近似统计的细节及各种优缺点,并给出了统计计数在具体业务 ...
- Python基础之模块:3、os模块 sys模块 json模块 json实战
目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...
- 深入学习SpringBoot
1. 快速上手SpringBoot 1.1 SpringBoot入门程序开发 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 1. ...
- 7 STL-deque
重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍S ...
- 大趋智能打印机java api
对接飞鹅和易联云后 ,网上几乎没资料对大趋智能打印机java api分享,故此分享一波. 官方文档地址 SnParam.java package com.shanheyongmu.openapi.pa ...
- linux学习相关资料整理
linux常用指令记录 Python3.9.9安装 supervisor安装与监控nginx 使用supervisor监控mysql supervisor监控tomcat配置文件 nginx-1.22 ...