关于消息队列的一些历史


关于消息队列的一些历史

这是一篇关于消息队列的历史文章,有关消息队列的前世今生的一些信息。

起源

软件领域的消息队列最早是由Vivek Ranadive参考硬件中的系统总线提出来的,这老哥是一个印度裔,现在还是国王队的老板。
硬件领域中的系统总线主要分为数据总线、地址总线、控制总线这几个部分,用来连接不同的设备传输数据使用。
系统总线
硬件上的系统总线着重在于通过线连接不同设备之间的交互,而消息队列是软件领域的连接不同系统之间交互的方式有应用层协议,现代的消息队列主要着重点是在于队列上。

上古时期

  • 1985
    Vivek Ranadive根据系统总线设计出来的第一个消息系统叫The Information Bus(TIB),TIB但是主要是在电信和金融领域进行使用。

  • 1993
    IBM MQ是由蓝色巨人IBM与1993年推出的消息队列产品,目前还保持更新现在迭代到了V9版本

  • 1997
    MS MQ是由微软推出的消息队列产品,不由感慨一句微软是真吊,为了.net硬是整了一个全家桶。

这一时期由于各家的MQ产品都是为了旗下其他产品进行服务,为了形成壁垒,各家的MQ产品并未形成一个统一的规范,导致不同公司下的产品并不能使用其他公司的MQ。

中古时期

由于早期的MQ产品各自为政的场景下,这一时期主要统一了消息队列的协议,这些协议一直影响到了现在,主要诞生了以下几种协议以及接入规范:

  • JMS
    JMS是一套接入MQ中间件产品的接口规范,java为了黏合各家的消息队列试图通过类似于JDBC的方案在java端通过统一的协议,在根据不同产品的驱动去连接MQ。
    各个厂商根据这套接口规范自行选择客户端进行实现,实现了这个接口规范的客户端可以在java应用程序内自由切换,类似于适配器模式

  • AMQP
    AMQP是实现消息队列的一种协议,在协议层规定了消息队列应该有的逻辑规范。AMQP与具体的MQ(例如RabbitMQ、ActiveMQ)的关系类似与jvm规范和JVM实现(HotSpot)一样

  • MQTT
    为嵌入式设备设计的一套消息队列协议

  • STOMP
    Stomp协议,英文全名Streaming Text Orientated Message Protocol,中文名称为 ‘流文本定向消息协议’。是一种以纯文本为载体的协议(以文本为载体的意思是它的消息格式规范中没有类似XMPP协议那样的xml格式要求,你可以将它看作‘半结构化数据’)
    双向消息通信协议还有很多,除了AMQP以外其他的大多都是即时消息协议。

  • ActiveMQ
    在这一时期还有根据AMQP还诞生了ActiveMQ这一开源产品,ActiveMQ是第一个广泛使用到的开源MQ产品

  • RabbitMQ
    RabbitMQ是2006年诞生的,现在和spring框架同属于vmware。由Erlang开发的。

现代时期

由于ActiveMQ和RabbitMQ发展了多年,背负着沉重的历史包袱支持这非常全的MQ功能,在现代的MQ使用场景中这些消息队列不符合当下数据爆炸,小型机组成分布式系统的场景了。这时候出现了针对某个细分领域的消息队列框架Kafka、RocketMQ、Pulsar

  • Kafka
    Kafka是Linkedin为解决ActiveMQ性能问题而开发的分布式消息队列,目前已经成为大数据领域实际的消息传递组件

  • RocketMQ
    RocketMQ是阿里开源的消息队列中间件,在设计上参考了kafka,通过java语言进行开发

  • Pulsar
    Pulsar是雅虎开源的,天然支持多组成并且是计算和存储分离式的实现

总结

消息队列的诞生是从金融场景出发,发展到现在最开始的那几种消息队列在功能上已经变得非常臃肿。现代的消息队列根据某一方面的着重点开始进行发展。

参考资料

http://tryrabbitmq.com/


  TOC