Site
Site
文章目录
  1. 消息队列的特性
  2. 为什么要使用消息队列?
  3. 消息队列的好处
  4. 常见的MQ
  5. RabbitMQ
  6. Redis
  7. ZeroMQ
  8. ActiveMQ
  9. RocketMQ
  10. Kafka

消息队列

消息队列的特性

普适性质的消息队列不需考虑上层的业务模型,只需要负责消息的分发,上层业务的不同模块需要依赖消息队列所定义的规范进行通信。
FIFO 先投递先到达的保证是一个消息队列和一个buffer的本质区别。
容灾,对于普适的消息队列组件来说,节点的动态增删和消息的持久化,都是支持其容灾能力的重要基本特性。当然,这个特性对于游戏服务器中大部分应用中的消息队列来说不是必须的,这个也是跟应用情景有关的,很多时候没有这种持久化的需求。

为什么要使用消息队列?

当生产和消费的速度和稳定性不一致的时候,需要消息队列作为抽象层,来弥合双方的差异。消息可以理解为两台计算机间传送的数据的单位,它可能只是一个字符串,也可能非常的复杂,消息队列是在消息传送过程中的容器。
从下面的例子中可以很形象的理解消息队列:

  1. 业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。就可以把短信发送申请丢到消息队列,直接返回用户成功(假装成功ing),短信发送模块再可以慢慢去消息队列中取消息进行处理。
  2. 调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。
  3. 任务处理类的系统,先把用户发起的任务请求接收过来存到消息队列中,然后后端开启多个应用程序从队列中取任务进行处理。

消息队列的好处

异步化,解耦,消除峰值。

  1. 提高系统的响应速度
  2. 提高系统的稳定性
  3. 提高用户的体验性

常见的MQ

RabbitMQ

是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

Redis

是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。

ZeroMQ

号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演了这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。

ActiveMQ

是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。

RocketMQ

阿里贡献给Apache的消息队列框架。 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具有以下特性:

  1. 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
  2. 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
  3. 支持拉(pull)和推(push)两种消息模式
  4. 单一队列百万消息的堆积能力
  5. 支持多种消息协议,如 JMS、MQTT 等
  6. 分布式高可用的部署架构,满足至少一次消息传递语义
  7. 提供 docker 镜像用于隔离测试和云集群部署
  8. 提供配置、指标和监控等功能丰富的 Dashboard

Kafka

目前最火的消息队列,消息队列之 Kafka会详细介绍

支持一下
扫一扫,支持xfan
  • 微信扫一扫
  • 支付宝扫一扫