1、消息队列
(1)、使用消息队列的作用:解耦、异步、削峰
(2)、使用消息队列的缺点:
如果消息队列挂了,系统部分业务就异常了
消息队列的异步会导致部分数据延迟
2、常用的消息队列对比
吞吐量 | 延迟 | 可靠性 | 是否提供高可用 | 是否可以分布式 | 应用场景 | |
---|---|---|---|---|---|---|
RabbitMq | 万级 | 微妙级 | 一般 | 高(主从模式) | 否 | 性能好、延迟低、适合中小型项目,但是不适合分布式扩展,吞吐量一般 |
RocketMQ | 万级 | 毫秒级 | 一般 | 非常高(分布式) | 支持 | 接口简单、吞吐量好、分布式扩展强、支持大规模topic、适合复杂的MQ业务 |
kafka | 十万级 | 毫秒级 | 一般 | 非常高(分布式) | 支持 | 吞吐量很好、可用性、可靠性高,但是只提供了简单的功能、当topic越多消息延迟越大 |
3、rabbitmq高可用
rabbitmq可以采用镜像集群模式
去设置高可用,生产者的数据通过负载均衡到rabbitmq节点,每个节点的数据然后备份到其它节点,这样就可以实现高可用了,其中一个节点挂了,其它节点亦能提供服务。
但是此模式也有缺点:每个rabbitmq节点都要备份、都要复制数据,性能开销较大;节点无法扩容。
4、kafka分布式、高可用
kafka分布式: 每创建一个topic,这个topic可以划分成多个分区,每个分区可以存在于不同的broker上,每个分区就放一部分数据,这样就实现了分布式模式。topic的消息会被负载均衡分不到不同的分区上,每个分区在其他broker节点上也会备份了副本分区,这样就形成了高可用。
消费者: 通过消费组的模式去消费消息队列中的数据,每当消费者加入、退出消费组的时候也都会负载均衡到不同的分区上,每个分区只能给一个消费者消费,但是一个消费者可以消费多个分区的数据。