我写了一个聚合组和计数查询,我打算模拟一个真实的场景,我有成千上万的用户每秒调用我的系统(每个调用将导致一个聚合查询)来获得一个他们的活动数量。
所以我将1000万条记录(代表用户活动)插入到我的数据库中,并使用JMeter来模拟聚合调用,但我遇到了以下问题:
由于上述原因我无法使用JMeter进行负载测试,如何回答以下问题:
我的服务器可以处理多少负载?在我的用例中有多少1台服务器 可以在1秒内处理聚合查询(由用户活动请求产生)?
保持其他因素不变(例如应用代码,网络,分片等)。
答案 0 :(得分:1)
我会首先关注记录生成。如果您需要模拟会话并将特定请求与特定用户ID相关联,那么最简单的方法是使用字符串操作(例如,在字符串中放置一个{USERID}标记,在python / java / bash / etc中加载每一行并替换USERID使用您为特定会话长度生成的ID)。基本上,我会考虑将数据集处理为脱机任务,我可以对其进行流式处理和操作以模拟USERID或其他任何会话。流式传输结果并操纵它们可能需要数小时,或者您可能会使用快速的cut / sed / awk脚本集,或者您可以将所有记录加载到单独的集合中并运行map reduce(例如,基于jsessionid聚合。)
此时,您将拥有一个包含代表您数据集的JSON的文本文件。创建一个新集合并导入数据集,慢慢等待。
现在编写一个脚本(mongo采用普通的旧javascript),以特定的速率执行一系列查询(在nodejs或普通的旧javascript,settimeout和v8中使用async)。编写一个脚本,增加并发用户数或减少请求之间的时间。运行该脚本并监控延迟和服务器,当延迟变得不可接受时,您就有了容量。
另一种排列是针对1M,2M,5M,10M行运行类似的加速测试,绘图(数据集大小,每秒请求数,延迟百分位数)。这为您的努力提供了漂亮的3D图表。
答案 1 :(得分:0)
使用JSR223 Sampler和groovy语言执行查询。
退房: