消息队列核心功能和消息队列做异步的优势
前言
消息队列是后端处理高并发流量最常用的手段,面试必问,是后端开最核心的中间件之一
下面我先简单介绍一下消息队列的核心功能、与异步线程相比消息队列做异步的核心优势是什么,为什么要使用消息队列
消息队列三大核心功能
消息队列核心解决的是通信问题,主要应用在耗时操作、流量波动、解耦的场景上
消息队列三大核心功能异步、解耦、削峰
异步是可以对内存资源瓶颈进行突破,异步将请求放入消息队列后立即释放线程加快响应速度
异步是解决耗时操作场景
解耦是生产者和消费者解耦,本质上是空间换时间,通过把消息队列这个中间存储,生产者和消费者可以在合适的时间进行操作,实现了生产者和消费者在时间、空间和技术上的独立性
削峰是为了系统中同一时间出现大量请求,可以先累积到消息队列中,后面以缓慢的速度进行一个一个请求的消费
削峰是解决流量波动场景
消息队列异步与异步线程相比的优势
1、MQ解耦能力强,可以实现对生产者和消费者进行隔离
2、线程挤压会造成内存资源消耗,MQ可以突破对内存资源进行突破
3、MQ可以应对突发大流量进行削峰,就是平稳的让这些请求进行慢慢消费,而异步线程会出现拒绝或者内存出现OOM
4、无法持久化请求数据,可能会造成丢失
5、异步线程的扩展性和容错率很低,MQ可以动态的扩容存储空间,使用死信队列等策略对特殊情况进行处理
常见的消息队列选型
RabbitMQ
轻量级消息队列,适合吞吐量不太高的项目使用
功能丰富,轻主题,主题模式只是一个转发模式
单机吞吐量在万级,常用于吞吐量要求不高的场景
运维成本低
Kafka
全球消息处理性能最快的⼀款MQ,适合海量数据处理
单体吞吐量可达百万级,常用于大数据领域
运维成本高
RocketMQ
是阿里巴巴借鉴了 Kafka 的分区思想编写的一款消息队列
不仅适合海量数据处理还提供了更丰富的功能使用
单机吞吐量在十万级,常用于电商金融领域
运维成本适中