这是我参与「第五届青训营 」笔记创作活动的第 14 天
消息队列
综述
什么是消息队列?
消息队列 (Message Queue),指保存消息的一个容器,本质是个队列。
但这个队列,需要支持高吞吐,高并发,高性能。
发展历程
消息队列其实诞生的很早,早在1983年互联网应用还是一片荒芜的年代,有个在美国的印度小哥Vivek就设想了一种通用软件总线,世界上第一个现代消息队列软件 The Information Bus(TIB)。他的TIB受到了企业的欢迎,这家公司的业务引发了当时最牛其的IT公司IBM的注意,于是他们一开始研发了自己消息队列软件,于是才有了后来的wesphere mq,后来微软也加入了进来。接近2000年的时候,互联网时代已初见曙光,全球的应用程序得到了极大地丰富,对于程序之间互联互通的需求越来越强烈,但是各大IT公司之间还是牢牢建立着各种技术壁垒,以此来保证自己的商业利益,所以消息中间件当时是只有大型企业才能用得起的高级玩意。
但是时代的洪流不可逆转,有壁垒就有打破壁垒的后来者,2001年sun发布了jms技术,试图在各大厂商的层面上再包装一层统一的java规范。java程序只需要针对jms的api编程即可,不再需要关注使用了什么样的消息中间件,但是jms仅仅适用于java。2004年AMQP(高级消息队列协议)诞生了,才是真正促进了消息队列的繁荣发展,任何人都可以针对AMQP的标准进行编码。有好的协议指导,再加上互联网分布式应用的迅猛罚站成为了消息中间件一飞冲天的最大动力,程序应用的互联互通,发布订阅,最大契合了消息中间件最初的设计初衷。除了刚刚介绍的商业化的中间件,后来开源消息中间件开始层出不穷,常见比较流行的有ActiveMQ、RabbitMQ、Kafak、阿里的RocketMQ,以及目前存算分离的Pulsar,再目前互联网应用中消息队列基本成为了标配。
常用消息队列对比
到目前为止,比较流行的MQ主要是以下几个
- Kafka:
- 分布式的、分区的、多副本的日志提交服务
- 在高吞吐场景下发挥较为出色
- RocketMQ:
- 低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,
- 在一些实时场景中运用较广
- Pulsar:
- 下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用存算分离的架构设计
- BMQ:
- 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群