聊聊消息队列(六)(自己设计一个消息系统怎么玩)

上面几篇都是聊消息中间件遇到的问题以及相关的解决方案。那如果需要你来设计一个消息系统该怎么设计呢。

回顾梳理

  • 先回想下我们第一篇文章 ,消息队列主要有三个功能解耦异步削峰,并且有提高系统复杂性降低系统可用性等弊端。
  • 以及我们后面几篇提到的问题:
    • 高可用
    • 重复消费如何解决(幂等)
    • 消息丢失如何解决(可靠性)
    • 保证消息消费的顺序型
    • 消息失效或者是延时如何解决
    • 消息堆积如何解决
    • 一般自己搭建消息队列都需要那些模块

      见招拆招

  • 其中与消息中间件相关的有下面几个点:
    • 高可用,可扩展。
      • 不能说我用着用着就挂了。或者是我某个机器挂了,整个queue数据都丢了
      • 解决方案:可以参考kafka的高可用架构。数据分partition存储,partition自有备份。多个副本之件选举出leader于follower.一旦leader挂掉,就可以有其他的follower升级为leader.
    • 支持可伸缩
      • 我要异步其实就是为了提高并发,提高吞吐量。加机器增加我吞吐量总得支持。
      • 解决方案:参考kafka。如果吞吐量不够。先增加机器->topic增加partition->做数据迁移.就可以存放更多的数据,提高并发量了。
    • 持久化
      • 我机器有可能会挂,那么如果都放在内存里面,一旦某个机器挂掉,部分数据还是有丢失的可能性。
      • 解决方案:就做数据持久化,按照消息的顺序写磁盘。这样下次读取数据的时候,不会因为消息地址散乱导致加载缓慢。
  • 还有其他的问题:具体可以看下我们之前梳理的那么多问题。见招拆招即可。

参考大佬

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