如何写个消息中间件

首先我们需要明确地提出消息中间件的几个重要角色,分别是生产者消费者Broker注册中心

简述下消息中间件数据流转过程,无非就是生产者生成消息,发送至 BrokerBroker 可以暂缓消息,然后消费者再从 Broker 获取消息,用于消费。

而注册中心用于服务的发现包括:Broker 的发现、生产者的发现、消费者的发现,当然还包括下线,可以说服务的高可用离不开注册中心。

然后开始简述实现要点,可以同通信讲起:各模块的通信可以基于 Netty 然后自定义协议来实现,注册中心可以利用 zookeeper、consul、eureka、nacos 等,也可以像 RocketMQ 自己实现简单的 namesrv (这一句话就都是关键词)。

为了考虑扩容和整体的性能,采用分布式的思想,像 Kafka 一样采取分区理念,一个 Topic 分为多个 partition,并且为保证数据可靠性,采取多副本存储,即 Leader 和 follower,根据性能和数据可靠的权衡提供异步和同步的刷盘存储。

并且利用选举算法保证 Leader 挂了之后 follower 可以顶上,保证消息队列的高可用。

也同样为了提高消息队列的可靠性 ,利用本地文件系统存储消息,并且采用顺序写的方式来提高性能。

可根据消息队列的特性利用内存映射、零拷贝进一步的提升性能,还可利用像 Kafka 这种批处理思想提高整体的吞吐。
之后可以深挖的点就很多了,比如提到的 Netty,各种注册中心,比如各注册中心之间的选型对比等。

而且还提到了选举算法,所以可能会问 Bully 算法、Raft 算法、ZAB 算法等。

还有提到了分区,可能会问这个分区和 RocketMQ 的队列有什么不同啊?具体分区要怎么实现?

然后提到顺序写,可能会问为什么要顺序写啊?内存映射和零拷贝又是什么啊?那你知道 RocketMQ 和 Kafka 用了哪个吗?

当然还有可能问各种细节,比如消息的写入如何存储、消息的索引如何生成等,来深挖看你有没有看过消息中间件的源码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

℡folk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值