2.1mq模型
Pub/Sub发布订阅(广播):利用topic作为通信载体 PTP点对点:利用queue作为通信载体2.2 mq的组成
2.3 mq常用协议

2.4 MQ选型
RabbitMQ 利用Erlang编写的一个开源的行列步队,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适宜于企业级的开拓。同时实现了Broker架构,核心思想是生产者不会将直接发送给行列步队,在发送给客户端时先在中央行列步队排队。对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。多用于进行企业级的ESB整合。ZeroMQ 又称ØMQ、0MQ、ZMQ,号称最快的行列步队系统,专门为高吞吐量、低延迟的场景开拓,在金融界的运用中常常利用,侧重于实时数据通信场景。ZMQ能够实现RabbitMQ不善于的高等/繁芜的行列步队,但是开拓职员须要自己组合多种技能框架,开拓本钱高。因此ZeroMQ具有一个独特的非中间件的模式,更像一个socket library,你不须要安装和运行一个做事器或中间件,由于你的运用程序本身便是利用ZeroMQ API完成逻辑做事的角色。但是ZeroMQ仅供应非持久性的行列步队,如果down机,数据将会丢失。如:Twitter的Storm中利用ZeroMQ作为数据流的传输。 ZeroMQ套接字是与传输层无关的:ZeroMQ套接字对所有传输层协议定义了统一的API接口。默认支持 进程内(inproc) ,进程间(IPC) ,多播 ,TCP协议,在不同的协议之间切换只要大略的改变连接字符串的前缀。可以在任何时候以最小的代价从进程间确当地通信切换到分布式下的TCP通信。ZeroMQ在背后处理连接建立,断开和重连逻辑。 特性:无锁的行列步队模型 对付跨线程间的交互(用户端和session)之间的数据交流通道pipe,采取无锁的行列步队算法CAS;在pipe的两端注册有异步事宜,在读或者写到pipe的时,会自动触发读写事宜。批量处理的算法 对付批量的,进行了适应性的优化,可以批量的吸收和发送。多核下的线程绑定,无须CPU切换 差异于传统的多线程并发模式,旗子暗记量或者临界区, zeroMQ充分利用多核的上风,每个核绑定运行一个事情者线程,避免多线程之间的CPU切换开销。ActiveMQ Apache下的一个子项目。利用Java完备支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,少量代码就可以高效地实现高等运用处景。可插拔的传输协议支持,比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种措辞客户端 C++、Java、.Net,、Python、 Php、 Ruby等。Redis 利用C措辞开拓的一个Key-Value的NoSQL数据库,开拓掩护很生动,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,以是完备可以当做一个轻量级的行列步队做事来利用。对付RabbitMQ和Redis的入队和出队操作,各实行100万次,每10万次记录一次实行韶光。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。Kafka Apache下的一个子项目,利用scala实现的一个高性能分布式Publish/Subscribe行列步队系统,具有以下特性: 快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行持久化; 高吞吐:在一台普通的做事器上既可以达到10W/s的吞吐速率; 高堆积:支持topic下消费者较永劫光离线,堆积量大; 完备的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现繁芜均衡; 支持Hadoop数据并行加载:对付像Hadoop的一样的日志数据和离线剖析系统,但又哀求实时处理的限定,这是一个可行的办理方案。推举一个互换学习群:478030634 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码剖析,高并发、高性能、分布式、微做事架构的事理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多2.4MQ比拟
2.4.1利用场景建议
MQTPS量级(持久化)场景备注RabbitMQ3500-4000msg/s非海量高可靠性场景 大规模企业运用、ESB 繁芜路由策略 异构系统整合协议丰富兼容性强,功能完善,格式比较大,速率较慢,持久化对性能影响明显ZeroMq大于800000msg/s高并发连接场景,如:在线游戏 海量高实时性场景,如:股票行情侧重于网络开拓,开拓本钱高,高等功能需自行实现,不建议做传统MQ运用ActiveMq~3600msg/s非海量高可靠场景 企业级运用 分布式事务(XA) 异构系统整合相对Rabbitmq较轻量级,性能附近,完全JMS支持、配置较繁芜Redis~15000msg/s高吞吐低延迟 大量小体(<10K) 顺序性或排序哀求 异构系统整合轻量级MQ的快速大略实现,容灾与负载等功能需自行完善KafkaInput ~70000msg/s Output >150000msg/s日志等海量数据流 DB数据同步 高堆积离线处理非范例MQ,更侧重于流式数据批处理