文档章节

rocketmq稳定可靠性测试报告

tantexian
 tantexian
发布于 2016/06/30 22:59
字数 1206
阅读 129
收藏 0
 
 
一、测试结论:
 
在本次测试周期7*24h,在该次稳定、可靠性测试中,总计随机发送消息5947825条。异常消息数量为0。消息队列可靠性较高。
注:本次并未对消息队列做异常破坏性测试,因此稳定性,可靠性较高。后续会针对在异常环境下的破坏性测试,再次测试稳定可靠性。
 
 


二、以下为本次测试场景、测试原理解析及测试结论数据截图等。

1、测试环境:
双master-双slave,同步双写,异步刷盘
机器配置:均为 16G内存,100G磁盘 VMware虚拟机
 
 
2、测试原理:
#1、生产者使用多个(N个)线程产生消息(能够通过参数N动态调节多线程数量)
#2、生产者每个线程每次能够生产M条消息(能够通过参数M动态调节每次产生的消息数量)
#3、每次根据生产者发送的信息SendStatus返回值,保存到对应数据库。如果SendStatus = ok则正常保存。如果SendStatus != ok则数据库保存记录为置deleted=44

 

3、测试稳定性代码及工具设计:
#1、数据库用来保存所有发送的msg,数据库能保存消息正常,异常,及重复发送的状态。

其中body_hashcode是保存对应msg的body的hashcode值,用于后续消费者收到消息,来进行内容正确与否验证。
repeat_num表示消费者收到重复消息的数量统计字段。
deleted则表示消息状态:
#1、deleted = Null表示生产者正常生产的消息  
#2、deleted =1 表示消费者收到生产者消息,且验证body内存正常
#3、deleted = 44 表示消费者收到了异常消息(例如传输过程中,消息body内容发送了变化)
#4、deleted = 444 表示生产者发送消息SendStatus != ok

 

 

4、测试核心代码设计:
生产者核心代码:


上述代码表示:
#1、默认多线程数量为1w,消息size为2048字节,每个线程一次性发送消息次数为1w。
#2、上述1中各值,都可以通过调用main函数,动态传参设置
#3、每一次发送消息调用testMsgHA()方法
 
测试生产消息核心逻辑代码:

上述代码表示:
#1、每次测试代码的body是动态变化的。bodyHashcode为body.hashcode()值。
#2、每次发送代码完毕,咋保存该条msg的关键信息到数据库DB中
#3、如果发送消息返回状态不为SEND_OK,则置deleted=444

 

5、测试场景:
主要模拟在不同线程数、随机发送不同msg,持续运行来测试消息队列文档性目的。
生产者进程:


消费者进程:

 
6、web监控结果:
 
7、数据库验证:
当前数据库数据
 
8、统计分析消息队列消息发送状态结果:


当前发送测试消息总数:594W


当前异常消息条数为0


当前发送失败消息为0


重复消息数量为0


结论:在持续一周的稳定可靠性测试中,共计随机发送594w条消息,其中异常消息为0,说明稳定性很高。

 

 

9、补充:附本次测试原理简要描述:
#1、使用多线程测试方式
#2、创建reliability-topic-1~reliability-topic-M,总计M个topic
#3、每个topic连续发送N条变化的数据
#4、支持设置运行时间配置(即支持1day、1week、1month设置)

思路:
发送者:每次发送消息前,把topic 、msg_hashcode、msg_body的hash_key 保存到mysql中。
(由于数据量大,根据topic 分表)增加默认deleted置null字段

消费者:每次接到消息,根据topic,msg_key、msg_body的msg_hashcode,去对应的mysql取数据,
对比是否正常。如果正常deleted字段置1,如果检测到msg_body的hash_key不一致,置为44,表示数据异常。

PS:
#1、为了增加数据库查询效率,msg_key需要建立索引。作为查询检索条件。
#2、每次检索查询时,需要使用where deleted!= 1作为数据库过滤条件(因为deleted= 1数据会非常多)
#3、最终是否有失败,直接查看数据库表中 deleted!= 1
#4、如果消费者收到消息使用使用where deleted!= 1条件查询不到对应的msg_key,那么去掉where deleted!= 1条件,直接全表检索。如果查询到了则置deleted=3表示是重复消息。每重复消息增加一次,则deleted值++。
如果还是查找不到,则置deleted=44表示异常消息(此类情况正常不应该出现)。


数据库字段设计:
id topic key body_hash body repeat deleted 


查看消息堆积:
mqadmin consumerProgress HAConsumer -g HAConsumer

© 著作权归作者所有

tantexian
粉丝 228
博文 527
码字总数 746616
作品 0
成都
架构师
私信 提问
RocketMQ与Kafka对比

RocketMQ与Kafka对比(18项差异) 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步...

莫问viva
2015/05/08
637
0
Kafka vs RocketMQ—— Topic数量对单机性能的影响

引言 上一期我们对比了三类消息产品(Kafka、RabbitMQ、RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务只...

a137268431
2018/04/15
0
0
滴滴出行基于RocketMQ构建企业级消息队列服务的实践

本文整理自滴滴出行消息队列负责人 江海挺 在Apache RocketMQ开发者沙龙北京站的分享。通过本文,您将了解到滴滴出行: 1. 在消息队列技术选型方面的思考; 2. 为什么选择 RocketMQ 作为出行...

阿里巴巴中间件
2018/11/01
0
0
《Apache RocketMQ用户指南》官方文档

RocketMQ–导读 原文链接 译者:小村长 最近两个项目中用到了RocketMQ消息中间件,每次都是在网上找几个Demo,而没有去看它的官方文档。年前面试某大型互联网企业。RocketMQ多有提及。今借此...

小村长
2018/01/23
0
0
深圳社区 | Apache RocketMQ开发者沙龙

活 动 流 程 嘉 宾 介 绍 演讲主题:《Apache RocketMQ 101》 个人简介:厉启鹏 Apache RocketMQ中国社区发起人,Linux OpenMessaging Advisory Board Member,阿里百年技术大学讲师。具有多...

ApacheRocketMQ社区
07/13
64
0

没有更多内容

加载失败,请刷新页面

加载更多

linux负载均衡总结性说明 四层负载和七层负载有什么区别

这篇文章主要为大家详细介绍了linux负载均衡的相关资料,什么是负载均衡?四层负载和七层负载有什么区别?具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在常规运维工作中,经常会运用到...

天子剑毅
23分钟前
3
0
mysql in与or效率比较

在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看《mysql数据库开发的36条军规》的文章,里面提到了or和in的效率问题,文中提到or的效率为O(n),而in的效率为O(l...

whatwhowhy
23分钟前
4
0
使用docker 基于pxc镜像搭建mysql高可用集群

前置条件 docker已安装: 第一步:拉取镜像 docker pull percona/percona-xtradb-cluster:5.7.21 第二步:复制重命名镜像(可选) docker tag percona/percona-xtradb-cluster:5.7.21 pxc 第...

小海bug
29分钟前
6
0
windows安装nginx负载均衡

第一步:下载安装nginx 地址:http://nginx.org/en/docs/windows.html 下载完成,比如放在C盘根目录下: cd c:\ unzip nginx-1.15.3.zip //解压文件 cd nginx-1.15.3 //进入目录 start ngin...

你好夜故事
32分钟前
6
0
Jenkins CLI,助你轻松管理 Jenkins

本文首发于:Jenkins 中文社区 作者:Donghui Wang Jenkins CLI,简称 jcli,一个使用 Golang 开发的开源的 Jenkins 命令行工具。 它可以帮忙你轻松地管理 Jenkins。 无论你是 Jenkins 插件开...

Jenkins中文社区
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部