MQ学习笔记

1.作用:异步(提高系统的响应速度和吞吐量),解耦(可以实现数据分发),削峰(以稳定的系统应对突发的流量冲击)

2.缺点:系统的可用性降低,MQ宕机导致不可用。系统的复杂性提高,如何保证消息不丢失。数据一致性:A系统发消息,BC同时处理,B成功C失败,数据一致性如何保证。

3.选型:Kafka(吞吐量大,性能好,集群高可用,会丢数据,功能单一)

             RabbitMQ(消息可靠性高,功能全面,吞吐量低,消息积累会严重影响性能,erlang语言不好定制,小规模项目)

             RocketMQ(高吞吐,高可用,功能非常全面,开源版不如商业版,生态不够成熟,只支持Java, 几乎覆盖全场景)

4.保证消息不丢失: 考虑跨网络

            1. 生产者发送到MQ丢失:

                   Kafka: (1)消息发送+回调

                   RocketMQ: (1)消息发送+回调    (2)消息事务

              RabbiltMQ: (1)消息发送+回调    (2)手动事务  channel.txSelect()    channel.txCommit()   channel.txRollback()  channel会发生阻塞,造成吞吐量下降。(3) Publish Confirm

             2. MQ主从同步丢失: (1) 同步同步:主->从->确认  (2) 异步同步:主->确认  异步同步    Dledger集群  至少要3个节点  大多数节点确认

             3. 内存会断电丢失,会存硬盘。消息写入内存,没写入硬盘   同步刷盘,异步刷盘

             4. 消费者消费丢失

5. 设计一个MQ

(1) 实现一个单机的队列数据结构,高效,可扩展。

(2) 将单机队列扩展成为分布式队列,分布式集群管理。

(3) 基于topic定制消息路由策略,  发送者路由策略,消费者与队列对应关系,消费者路由策略。

(4) 实现高效的网络通信。 Netty Http

(5) 规划日志文件,实现文件高效读写。零拷贝,顺序写。服务重启后,快速还原运行现场。

(6) 定制高级功能,死信队列,延迟队列,事务消息等。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值