如果让你设计一个消息队列,该如何进行架构设计?

面试题

如果让你写一个消息队列,该如何进行架构设计?说一下你的思路。

面试官心理分析

一般问这种开发性问题,主要考察两块:

  • 你有没有对一个消息队列做过较为深入的原理了解,有没有从整体架构上把握住消息队列的原理。
  • 看看你的设计能力,能不能从整体架构上,把握住消息队列设计的关键点。

说实话,问类似问题的时候,大部分人是懵逼的,因为平常都在埋头工作,很少有从整体架构上思考过类似的问题。

面试题剖析

其实这类问题,不是要求必须看过技术源码,但最起码要大概知道那个技术的基本原理,核心组成部分。参照开源项目,把大体上的架构组成说一下,比如:

  • 首先这个消息队列需要支持可伸缩性,在需要的时候进行快速扩容,可以参照Kafka的理念,broker->topic->partition,每个partition放一台机器,存放一部分的数据。如果现在资源不够了,就可以增加partition,然后数据迁移,就可以承载更多的数据了。
  • 其次消息需不需要做持久化,一般情况下为了追求可靠性就会进行数据持久化,需要写入到磁盘,采用顺序写的方式,这样就没有寻址开销了。
  • 然后就是消息队列的高可用性,具体参考Kafka的设计,多副本,然后有leader和follower,当leader挂掉的时候,进行选举。
  • 数据0丢失可以参考之前的方案。
发布了17 篇原创文章 · 获赞 0 · 访问量 319

猜你喜欢

转载自blog.csdn.net/qq_26375325/article/details/105123725