关于消息队列其实已经有很多文章了,简单摘抄一些。 以下内容来自美团技术点评:消息队列设计精要
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。
常见的使用场景:
解耦
最终一致性
广播
错峰与流控
消息队列基本功能:
RPC通信协议
高可用
服务端承载消息堆积的能力
存储子系统的选择
消费关系解析
队列高级特性设计:
可靠投递(最终一致性)
消费确认
事务
正式接触过的消息队列有Kafka、RabbitMQ,其余还稍微了解过ZeroMQ、nsq。它们都有其独特之处,都有各自的使用场景。而使用场景决定了消息队列产品的选择。
Kafka 是在搞 ETL 项目时用到的。其设计初衷是高吞吐,所以放弃了传统消息队列的设计思路(维护消息状态,保证消息一次发送…等等特性),取而代之的消息的持久化、分片、偏移量等设计思路。
RabbitMQ 是在研究 OpenStack时接触到的。主要作用是进行 python 的进程间通讯:所有的进程都会连接 RabbitMQ;控制节点会通过RabbitMQ下发命令;计算节点会通过RabbitMQ回传命令执行情况、或者是本机的信息。选择RabbitMQ,应该是看中了其可以保证消息的到达的能力。
而随着Golang社区的发展,也开始有人不断的制造新轮子,前面提到的NSQ就是其中之一,此外还有一个NATS。
另外Rust社区也在不断的发展中,估计也会诞生出一些新的轮子,之后会持续关注这些新轮子。
comments powered by Disqus