学校网站建设的申请书,八里庄网站建设公司,中小企业网站构建设计,html基础知识点总结MQ简介 MQ,Message queue,消息队列#xff0c;就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等#xff0c;用来保存数据的。当然#xff0c;与数据库、缓存等产品比较#xff0c;也有自己一些特点#xff0c;具体的特点后文会做详细的介绍。
现在常用…MQ简介 MQ,Message queue,消息队列就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等用来保存数据的。当然与数据库、缓存等产品比较也有自己一些特点具体的特点后文会做详细的介绍。
现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、MetaMQ当然近年来火热的kafka,从某些场景来说也是MQ当然kafka的功能更加强大虽然不同的MQ都有自己的特点和优势但是不管是哪种MQ都有MQ本身自带的一些特点下面介绍MQ的特点。 MQ特点 1、先进先出
不能先进先出都不能说是队列了。消息队列的顺序在入队的时候就基本已经确定了一般是不需人工干预的。而且最重要的是数据是只有一条数据在使用中。 这也是MQ在诸多场景被使用的原因。
2、发布订阅
发布订阅是一种很高效的处理方式如果不发生阻塞基本可以当做是同步操作。这种处理方式能非常有效的提升服务器利用率这样的应用场景非常广泛。
3、持久化
持久化确保MQ的使用不只是一个部分场景的辅助工具而是让MQ能像数据库一样存储核心的数据。
4、分布式
在现在大流量、大数据的使用场景下只支持单体应用的服务器软件基本是无法使用的支持分布式的部署才能被广泛使用。而且MQ的定位就是一个高性能的中间件。
应用场景
那么,消息中间件性能究竟哪家强?
带着这个疑问,我们中间件测试组对常见的三类消息产品(Kafka、RabbitMQ、RocketMQ)做了性能比较。 Kafka Kafka是LinkedIn开源的分布式发布-订阅消息系统目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费追求高吞吐量一开始的目的就是用于日志收集和传输。0.8版本开始支持复制不支持事务对消息的重复、丢失、错误没有严格要求适合产生大量数据的互联网服务的数据收集业务。 RabbitMQ RabbitMQ是使用Erlang语言开发的开源消息队列系统基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由包括点对点和发布/订阅、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景对性能和吞吐量的要求还在其次。 RocketMQ RocketMQ是阿里开源的消息中间件它是纯Java开发具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka但并不是Kafka的一个Copy它对消息的可靠传输及事务性做了优化目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。 测试目的 对比Kafka、RabbitMQ、RocketMQ发送小消息(124字节)的性能。这次压测我们只关注服务端的性能指标,所以压测的标准是:
不断增加发送端的压力,直到系统吞吐量不再上升,而响应时间拉长。这时服务端已出现性能瓶颈,可以获得相应的系统最佳吞吐量。 测试场景 在同步发送场景中三个消息中间件的表现区分明显
Kafka
Kafka的吞吐量高达17.3w/s不愧是高吞吐量消息中间件的行业老大。这主要取决于它的队列模式保证了写磁盘的过程是线性IO。此时broker磁盘IO已达瓶颈。
RocketMQ
RocketMQ也表现不俗吞吐量在11.6w/s磁盘IO %util已接近100%。RocketMQ的消息写入内存后即返回ack由单独的线程专门做刷盘的操作所有的消息均是顺序写文件。
RabbitMQ
RabbitMQ的吞吐量5.95w/sCPU资源消耗较高。它支持AMQP协议实现非常重量级为了保证消息的可靠性在吞吐量上做了取舍。我们还做了RabbitMQ在消息持久化场景下的性能测试吞吐量在2.6w/s左右。 测试结论
这里写图片描述 在服务端处理同步发送的性能上KafkaRocketMQRabbitMQ。
附录
测试环境
服务端为单机部署机器配置如下 这里写图片描述 应用版本 这里写图片描述 测试脚本 这里写图片描述 消息队列优点对比 前面我们对比了最简单的小消息发送场景,Kafka暂时胜出。但是,作为经受过历次双十一洗礼的RocketMQ,在互联网应用场景中更有它优越的一面。 RabbitMQ 是使用Erlang编写的一个开源的消息队列本身支持很多的协议AMQPXMPP, SMTP, STOMP也正是如此使的它变的非常重量级更适合于企业级的开发。同时实现了一个经纪人(Broker)构架这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing)负载均衡(Load balance)或者数据持久化都有很好的支持。 Redis 是一个Key-Value的NoSQL数据库开发维护很活跃虽然它是一个Key-Value数据库存储系统但它本身支持MQ功能所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作各执行100万次每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明入队时当数据比较小时Redis的性能要高于RabbitMQ而如果数据大小超过了10KRedis则慢的无法忍受出队时无论数据大小Redis都表现出非常好的性能而RabbitMQ的出队性能则远低于Redis。 ZeroMQ 号称最快的消息队列系统尤其针对大吞吐量的需求场景。ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列但是开发人员需要自己组合多种技术框架技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式你不需要安装和运行一个消息服务器或中间件因为你的应用程序将扮演了这个服务角色。你只需要简单的引用ZeroMQ程序库可以使用NuGet安装然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列也就是说如果down机数据将会丢失。其中Twitter的Storm中使用ZeroMQ作为数据流的传输。 ActiveMQ Apache ActiveMQ 是最受欢迎且功能最强大的开源消息传递和Integration Patterns服务器。
Apache ActiveMQ速度快支持许多跨语言客户端和协议带有易于使用的企业集成模式和许多高级功能同时完全支持JMS 1.1和J2EE 1.4。Apache ActiveMQ是在Apache 2.0许可下发布 特征
支持Java消息服务(JMS) 1.1 版本
Spring Framework
集群 (Clustering)
支持的编程语言包括C、C、C#、Delphi、Erlang、Adobe Flash、Haskell、Java、JavaScript、Perl、PHP、Pike、Python和Ruby
协议支持包括OpenWire、REST、STOMP、WS-Notification、MQTT、XMPP以及AMQP [1] Jafka/Kafka Kafka是Apache下的一个子项目是一个高性能跨语言分布式Publish/Subscribe消息队列系统而Jafka是在Kafka之上孵化而来的即Kafka的一个升级版。具有以下特性快速持久化可以在O(1)的系统开销下进行消息持久化高吞吐在一台普通的服务器上既可以达到10W/s的吞吐速率完全的分布式系统Broker、Producer、Consumer都原生自动支持分布式自动实现复杂均衡支持Hadoop数据并行加载对于像Hadoop的一样的日志数据和离线分析系统但又要求实时处理的限制这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理这一点也是本课题所研究系统所看重的。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统除了性能非常好之外还是一个工作良好的分布式系统。