消息中间件简介

 

中间件

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

常见的中间件:消息中间件(比如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,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

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

 

 

 

posted @ 2020-02-18 12:15  chy_18883701161  阅读(504)  评论(0编辑  收藏  举报