首页 » PHP教程 » php磁盘队列技巧_消息队列介绍及选型

php磁盘队列技巧_消息队列介绍及选型

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

2.1mq模型

Pub/Sub发布订阅(广播):利用topic作为通信载体 PTP点对点:利用queue作为通信载体

2.2 mq的组成

php磁盘队列技巧_消息队列介绍及选型

Broker:做事器,作为server供应核心做事Producer:生产者,业务的发起方,卖力生产传输给brokerConsumer:消费者,业务的处理方,卖力从broker获取消息并进行业务逻辑处理Topic:主题,发布订阅模式下的统一搜集地,不同生产者向topic发送,由MQ做事器分发到不同的订阅者,实现的广播Queue:行列步队,PTP模式下,特定生产者向特定queue发送,消费者订阅特定的queue完成指定的吸收Message:体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现的传输

2.3 mq常用协议

php磁盘队列技巧_消息队列介绍及选型
(图片来自网络侵删)
AMQP AMQP即Advanced Message Queuing Protocol,一个供应统一做事的运用层标准高等行列步队协议, 是运用层协议的一个开放标准,为面向的中间件设计。
基于此协议的客户端与中间件可通报,并 不受客户端/中间件不同产品,不同开拓措辞等条件的限定。
优点:可靠、通用MQTT协议 MQTT(Message Queuing Telemetry Transport,行列步队遥测传输)是IBM开拓的一个即时通讯协 议,有可能成为物联网的主要组成部分。
该协议支持所有平台,险些可以把所有联网物品和外部连接起来, 被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
优点:格式简洁、占用带宽小、移动端通信、PUSH、嵌入式系统STOMP协议 STOMP(Streaming Text Orientated Message Protocol)是流文本定向协议,是一种为MOM(Message Oriented Middleware,面向的中间件设计的大略文本协议。
STOMP供应一个可互操作的连接格式,许可客户端与任意STOMP代理(Broker)进行交互。
优点:命令模式(非topic\queue模式)XMPP协议 XMPP(可扩展处理现场协议,Extensible Messaging and Presence Protocol)是基于可扩展标记措辞(XML)的协议,多用于即时(IM)以及在线现场探测。
适用于做事器之间的准即时操作。
核心是基于XML流传输,这个协议可能终极许可因特网用户向因特网上的其他任何人发送即时,纵然其操作系统和浏览器不同。
优点:通用公开、兼容性强、可扩展、安全性高,但XML编码格式占用带宽大其他基于TCP/IP自定义的协议 有些分外框架(如:redis、kafka、zeroMq等)根据自身须要未严格遵照MQ规范,而是基于TCP\IP自行封装了一套协议,通过网络socket接口进行传输,实现了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,更侧重于流式数据批处理

标签:

相关文章

rabbimq的php讲授技巧_RabbitMQ讲解

what?消费-生产者模型?对,没错!便是大学操作系统课程里面的“消费者-生产者模式”,记得当时被这个问题坑的不轻啊。在项目中,将...

PHP教程 2024-12-17 阅读0 评论0

介绍“对碰”算法,精准营销的秘密武器

在当今信息爆炸的时代,如何从海量数据中找到精准的目标客户,成为企业营销的关键。而“对碰”算法作为大数据时代下的一种智能营销技术,凭...

PHP教程 2024-12-17 阅读0 评论0

php实现星座代码技巧_接口测试02

什么是接口测试基于HTTP协议,通过工具或者代码仿照要求,检讨相应结果是否符合接口解释文档的一种测试接口测试分类系统对外的接口系统...

PHP教程 2024-12-17 阅读0 评论0