消息队列作为服务/应用之间的通信中间件,可以起到业务耦合、广播消息、保证最终一致性以及错峰流控(克服短板瓶颈)等作用。本文不打算详细深入讲解消息队列,而是体系化的梳理消息队列可能涉及的技术点,起到提纲挈领的作用,构造一个宏观的概念,使用思维导图梳理。
再介绍之前,先简短比较下RPC和消息队列。RPC大多属于请求-应答模式,也包括越来越多响应式范式,对于需要点对点交互、强事务保证和延迟敏感的服务/应用之间的通信,RPC是优于消息队列的。那么消息队列(下文也简称MQ,即Message Queue)可以看做是一种异步RPC,把一次RPC变为两次,进行内容转存,再在合适的时机投递出去。消息队列中间件往往是一个分布式系统,内部组件间的通信仍然会用到RPC。
目前开源界用的比较多的选型包括,ActiveMQ、RabbitMQ、Kafka、阿里巴巴的Notify、MetaQ、RocketMQ。下文的技术点梳理也是学习借鉴了这些开源组件,然后萃取出一些通用技术点。
关于消息队列的体系化认知,见下方的思维导图。
1. 整体架构
一般分为producer,broker,consumer三者。
2. RPC通信
详细参考《体系化认识RPC》。
3. 高性能保证
主要考虑MQ的延迟和吞吐。
高性能投递方面,分为producer和broker考虑。producer可以同步变异步、单条变批量保证发送端高性能,批量发送的触发条件可以分为buffer满或者时间窗口到了。br