上面几篇都是聊消息中间件遇到的问题以及相关的解决方案。那如果需要你来设计一个消息系统该怎么设计呢。
回顾梳理
- 先回想下我们第一篇文章 ,消息队列主要有三个功能解耦,异步,削峰,并且有提高系统复杂性,降低系统可用性等弊端。
- 以及我们后面几篇提到的问题:
- 其中与消息中间件相关的有下面几个点:
- 高可用,可扩展。
- 不能说我用着用着就挂了。或者是我某个机器挂了,整个queue数据都丢了
- 解决方案:可以参考kafka的高可用架构。数据分partition存储,partition自有备份。多个副本之件选举出leader于follower.一旦leader挂掉,就可以有其他的follower升级为leader.
- 支持可伸缩
- 我要异步其实就是为了提高并发,提高吞吐量。加机器增加我吞吐量总得支持。
- 解决方案:参考kafka。如果吞吐量不够。先增加机器->topic增加partition->做数据迁移.就可以存放更多的数据,提高并发量了。
- 持久化
- 我机器有可能会挂,那么如果都放在内存里面,一旦某个机器挂掉,部分数据还是有丢失的可能性。
- 解决方案:就做数据持久化,按照消息的顺序写磁盘。这样下次读取数据的时候,不会因为消息地址散乱导致加载缓慢。
- 高可用,可扩展。
- 还有其他的问题:具体可以看下我们之前梳理的那么多问题。见招拆招即可。