`
can_do
  • 浏览: 248492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MQ相关

阅读更多
关键特征:
1、可靠性(一般通过消息持久化实现,可持久化到磁盘、数据库等,没有持久化的可靠性如何保证)
2、优先级(0-9,这个是JMS的规范)
3、节点间组网(分布式特性,实现消息跨节点路由)
4、消息模型(PTP || Pub/Sub,这个是JMS的规范)
性能指标:
4、高吞吐量
5、低延迟

1、AMQ是完全遵循JMS1.1规范的;有多种协议支持:openwire(nio)、stomp、mqtt、amqp
2、Moquette不遵循JMS1.1规范,实现了MQTT协议,能做到高吞吐量和低延迟==>注意:moquette是基于Netty实现的,其是一个客户端/服务器端模式,因此其不支持节点间组网。
3、Kafka

>>>MQ性能指标测试http://x-aeon.com/wp/2013/04/10/a-quick-message-queue-benchmark-activemq-rabbitmq-hornetq-qpid-apollo/

>>>影响性能的因素有以下:

1.the network topology
2.transport protocols used
3.quality of service
4.hardware, network, JVM and operating system
5.number of producers, number of consumers
6.distribution of messages across destinations along with message size

1、使用的网络拓扑和技术(网络环境:卫星、专网、广域网、个域网);
2、使用的传输协议:opwenwire、stomp、amqp、mqtt;
3、服务质量(处理消息的超时时间、使用topic还是queue、消息是否持久化<某些场景允许消息可丢>);

4、硬件、网络(网卡百兆还是千兆),JVM和操作系统;
5、生产者数量、消费者数量;
6、要分发到目标的消息大小;

提示:对于1-2K的消息,单个topic,1个生产者和1个消费者,21000--22000/sec

>>>不能单说某个MQ性能最快,而要聚焦到具体的应用场景,而且每个MQ不同版本也有区别,

建议用较新版本的。

>>>为什么影响MQ性能的因素和消费者的数量有关系?==>
例如:对于队列的预取值,如果队列只有一个消费者时,预取值可以稍大些,但是当队列有多个消费者时,预取值尽量小点,设置为1最好。
因为:有多个消费者时,慢的消费者会在它所在的客户端累积消息,而其他快的消费者又消费不了这些消息,导致MQ整体的吞吐量下降。

/////////////////////begin////////////
To evaluate the performance of a broker correctly you should ask yourself the following questions:

1.Do I need a broker for financial transactions or online games?
2.What is more important for the use: guaranteed transactional service or speed and bandwidth?
3.How big may be the delay in delivery of messages?
4.What size are the messages to be transmitted?
5.How many queues are needed?
6.How many clients simultaneously access the broker?

为了正确评估Broker的性能,你应该问下你自己以下几个问题:
1.你所用的Broker是用于金融交易还是在线游戏?==>MQ用在什么地方?
2.使用中更看重哪项指标:保证交易服务还是速度和带宽?==>关心什么指标
3.消息分发需要有多大的延迟?==>服务质量
4.要传输的消息大小是多少?==>消息大小
5.需要多少个队列?==>队列个数
6.有多少个客户端同时访问Broker?==>并发客户端个数
/////////////////////end//////////////

///////begin/////////
Practical experience:
Usually not the brokers is the bottleneck, but message consumer that are slowed down by slow backend systems or database queries.
实际经验告诉我们:
通常,Broker不是瓶颈,而消息的消费者成为了瓶颈,由于后端系统或者数据库查询导致消费者慢下来。
///////end////////////

>>>JMeter测试方式



>>JMeter实测及调优:

性能和环境因素的关系:如:网络状况、磁盘IO等有较大关系
LevelDB没有像官网上说的那样,比KahaDB性能高(使用LevelDB同样的配置,对带宽的利用率没有KahaDB高)
>> 环境:



>> 调优要点:
1、传输通道采用nio模式,即:nio://0.0.0.0:61617,客户端采用failover方式,如:failover:(tcp://10.88.112.165:61617)
2、队列分发策略调优参数:
2.1:optimizedDispatch="true"
2.2:lazyDispatch="false"
2.3:producerFlowControl="true"
2.4:<fileQueueCursor/>
2.5:useCache="true"
2.6:queuePrefetch="1"  or queuePrefetch="0"
2.7:memoryLimit="128MB"
3、JVM参数:
   -Xms1024M -Xmx1024M -Xmn256M -Xss228K -Dcom.rf.emq.UseDedicatedTaskRunner=false -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError
4、OS:
4.1:ulimit -n 65535
4.2:采用磁盘的异步写IO,要求MQserver实现真正的异步IO调用才可以。(JDK1.7已经支持异步IO,即NIO2.0)
>> 监控方法:
1、查看tcp连接数及是否稳定:
1.1、netstat -an|grep '61617' |grep 'ESTABLISHED' |wc -l
1.2、netstat -an|grep '61617' |grep 'CLOSE_WAIT' |wc -l

2、查看文件句柄数:
lsof -p <pid> |wc -l
3、查看MQ server资源使用情况:memory、cpu
top -p <pid>

>>结论:
1、在该环境下,消息大小为1KB时,最大吞吐量为4250个/sec,最大并发在3000个连接数(客户端)。
2、每个连接会对应三个线程:
2.1:EMQ Connection Dispatcher: tcp://10.88.112.165:42079
2.2:Timer-*
2.3:EMQ NIO Worker *
3、在并发500客户端时达到最大吞吐量,JVM线程保持在1500以下, JVM线程数大概为并发连接数的3倍左右。
   注意:并发500时线程数为1426个,并发520个时,达到1470个线程,并发480时,达到1384个线程;
4、在500个客户端并发连接(JVM线程达快达到1500时),对网络带宽的利用率基本保持在95%以上,偶尔100%。

Tip:通过Apollo测试磁盘IO效率,如下:

>>windows环境调整:

1、线程模型

2、TCP MTU:

分享到:
评论

相关推荐

    MQ相关资料 内容齐全

    mq 入门 与培训 mq 集群 MQ 开发 与实验 MQ 简明手册

    MQ 相关介绍PPT

    MQ 相关介绍 PPT IBM WebSphere MQ 概念与对象 JMS使用 发布/订阅的实现 ActiveMQ介绍

    MQ相关资料文档.rar

    MQ相关资料文档.rar

    MQ相关常见问题集锦(FRQ)

    MQ相关常见问题集锦(FRQ)

    ibm mq 第三部分

    ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分ibm mq 第三部分

    ibmmq所需jar包.rar

    ibmmq所需jar包,用于ibmmq连接建立,消息发送与接收,导入这些jar就能完成ibmmq相关功能。

    IBM MQ7.5_jar包

    Java连接IBM WebSphere MQ 7处理队列信息所需jar包,从安装目录直接打的包。主要包括: /com.ibm.mq.commonservices.jar /com.ibm.mq.defaultconfig.jar /com.ibm.mq.fta.jar /com.ibm.mq.headers.jar /...

    MQ开发培训

    IBM MQ 培训 开发 如何开发MQ相关交易

    rabbit mq相关文件

    消息队列,先进先出

    IBM.MQ.pdf

    IBM.MQ相关的资料~~~~~~ 看看,还不错

    用于连接MQ和操作xml文件的实例

    本项目使用hibernate技术对用MQ传输的数据进行相关的入库,解析操作,如果只是想学习MQ的相关操作,可以吧里面的两个与MQ有关的类给拷贝出现,然后做学习之用。

    dubbo+zookeeper+MQ极简搭建版

    dubbo+zookeeper+MQ极简搭建版,在里面搭建了一个非常基础简单的dubbo+zookeeper。并编写了文档,方便每一个新手使用。...同时,我添加了一个MQ有关类。又想看mq的正好可以一起看了,直接执行就可以了。非常舒服。

    com.ibm.mq.headers.jar

    IBM-MQ服务包mq相关包

    Websphere MQ相关

    Websphere MQ

    MQ相关文档

    MQ常见问题汇总.pdf MQ错误码.txt MQ学习.chm Websphere MQ API.chm WebSphere MQ管理指南.chm 基本常用的都有了

    ibm mq 7.5开发依赖jar包

    java开发ibm mq 7.5对接所需要的jar依赖包,由于maven没有授权,所以必须手动下载

    IBMMQ_7.0.1.3 相关jar包

    IBMMQ 7.0.1.3 相关jar包 1. com.ibm.mq-7.0.1.3.jar 2. com.ibm.mq.jmqi-7.0.1.3.jar 3. com.ibm.mqjms-7.0.1.3.jar 4. dhbcore-7.0.1.3.jar

    mq-7.0.1.7.jar

    用于MQ相关开发的Jar包,包含java开发使用的API,为7.0.1.7版本,解决了之前低版本中的一些Bug,不仅适用于本地API开发,还可以适用spring-jms的开发方式,一般基于MQ的开发还需要添加mqjms.jar,jms-api.jar,jmqi....

    IBM MQ jdk1.7以上

    IBM MQ 是一个十分完备的消息传递解决方案,可以安全、快速、轻松地传输业务相关数据。IBM MQ 可以作为本地软件使用,也可以推送到云端,并用于混合集成,是业务发展的重要支柱。

    mq+cxf相关资源jar包

    行业应用ibm mq与cxf+spring的部分jar包

Global site tag (gtag.js) - Google Analytics