1. 背景引入
这篇文章,我们来聊一下消息中间件高可用架构的一些原理。
对于一个合格的高级 Java 工程师而言,你肯定会碰到在系统里用到 MQ(消息队列)的场景。那么这个时候你需要基于你的业务场景和需求,考虑在使用 MQ 的时候可能遇到的一些技术问题。
接着,你必须得针对这些技术问题设计一套完整的技术方案。
你需要从 消息的订阅模式 、 消息的生产到消费全链路不丢数据 、 消息中间件本身如何保证高可用 等各个角度切入,来考虑好你的系统和 MQ 对接之后的完整技术方案。
所以,本文就来聊聊消息中间件高可用的架构原理。
2. 先来思考一下消息中间件的可用性问题
咱们先抛开各种具体的技术,思考一下什么是 MQ 的可用性问题?
大家看看下面的图,其实道理很简单。假设你的 MQ 就部署在一台机器上,那么正常情况下,生产者都会发送消息到 MQ 去,然后让消费者获取到。
但是万一天有不测风云,MQ 部署的那台机器因为一些莫名的原因 MQ 自己本身的进程挂掉了或者是那台机器直接就宕机了,那么这种时候该怎么办呢?
很尴尬,是不是?结果是很明显的。生产者没法发送数据出去,然后消费者也没法获取到数据了。
然后整个系统不就完蛋了?因为系统的核心流程根本无法跑通了,对不对?
MQ 宕机就直接导致你的系统本身也故障了,然后可能会导致你的公司对外的 App、网站等产品就无法运作了,用户无法使用你们公司的服务了