消息中间件介绍

消息中间件介绍_第1张图片中间件

 

中间件自然是放在服务|模块之间的,用于处理服务之间的数据交互。

 

常见的中间件:消息中间件(比如Kafka、RabbitMQ)、缓存中间件(比如Redis)。

 

 

 

 

 

消息生产者、消息消费者

比如服务A发消息给服务B,那服务A就是消息生产者(产生消息、发送消息),服务B就是消息消费者(接收消息)。

 

 

 

 

 

消息的2种交互方式

peer to peer:即p2p,只有一个接收者。

发布/订阅:可有多个接收者。

 

 

 

 

消息中间件的作用

模块之间的解耦:

各系统|模块|服务通过消息中间件这个统一的接口来交换数据,无需耦合在一起

 

 

 

模块的扩展性

消息中间件是数据接口,各模块没有耦合在一起、可随意扩展。

 

 

 

消息冗余

计算机中的冗余有2个含义:一、多余的部分,二、数据备份、增强安全性。

 

有的消息中间件可以持久化消息,避免消息处理前丢失的风险。

 

 

 

并发压力

使用消息队列来处理消息,并发时可堆积、处理大量消息,减少各模块压力。

 

 

 

容错

某模块故障时,消息中间件中的消息不会丢失,待该模块恢复后,继续处理即可。

 

 

 

异步通信

如果不需要立即处理消息,可以将消息暂存在消息中间件中,合适的时候再处理。

 

 

 

 

 

常见的消息中间件

ActiveMQ、KafKa、RocketMQ、RabbitMQ,最常用的是Kafka、RabbitMQ。

 

MQ,即Message Queue 消息队列。

 

 

 

 

 

 

ActiveMQ

Apache开源的消息中间件,老牌消息中间件。

 

性能一般,一般场景够用了,但高并发时往往应付不了,在中小企业中使用广泛。

 

 

 

 

 

有2种集群模式:

 

 

 

一种是主从模式,另一种是分布式的主从模式。

 

slave 从属、奴隶

 

 

 

 

 

 

 

 

 

Kafka

最初由Linkedin公司开源,后来由Apache维护。

 

由Scala和Java编写,消息处理方式是 发布|订阅 。

 

 

 

kafka的特点:

 

高吞吐量、高性能:单台Kafka服务器的消息读写速率可达 100万条/秒,但消息直接存储在内存中,很吃内存

消息持久化:所有消息都会被持久化到磁盘(副本),单条消息发生故障时可从磁盘恢复。虽然支持持久化会拉低性能,但Kafka的性能依然剽悍。

不支持事务,如果一个事务(多条消息)失败,并不会回滚,所以安全性低(数据一致性差)。

 

 

Kafka适合收集、处理大量数据、但对数据一致性要求不高的场景,在大数据开发中用得多。

 

常用场景:

 

收集各服务的日志

记录用户的访问踪迹,比如用户访问的网页、点击的条目、搜索的关键词,发送给订阅者来分析、挖掘用户爱好、购买力

记录分布式系统各模块实时产生的数据,监控系统运行状况,方便报警、统计报告

 

 

 

 

集群模式:

 

 

 

 

 

replicate 复制

 

 

 

 

 

 

 

 

 

RocketMQ

最初由阿里开源,后来由Apache维护,纯java编写。

 

吸取了Kafka的思路,并修正了Kafka的不足(不支持事务、可靠性不高)。

 

高吞吐量、高可用、可靠性高、支持事务,适合大规模分布式系统。

 

但技术要求高(维护成本高)、要收费。

 

 

 

 

 

集群模式:

 

 

 

 

 

 

 

 

 

 

 

 

 

RabbitMQ

使用Erlang语言编写,基于AMQP协议。

 

追求安全、可靠性、稳定性、数据一致性,常在企业系统中使用。

 

性能、吞吐量略差(性能、吞吐量比Kafka、RocketMQ差,但比ActiveMQ高很多)。

 

 

 

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

 

基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

你可能感兴趣的:(java)