官方的 producer 端为 golang 写的客户端,该测试直接使用 API 接口用 ab 工具发送 http 请求测试,http 连接创建销毁费时
官方测试报告
3主机环境下,对于 100B 的消息达到了每秒百万级
3主机 和 4 主机测试
测试环境
object
describe
nsqlookup
1
message size
0.1 KB
topic count
3
channel count
3
测试报告
nsqd(host)
producer count
consumer count
write mb/s
write kops/s
read mb/s
read kops/s
3
9
9
80.315
842
76.946
807
4
16
16
105.898
1110
100.956
1059
单机测试
producer
consumer
write mb/s
write kops/s
read mb/s
read kops/s
1
4
31.738
166
82.500
433
4
4
36.321
190
135.130
708
测试脚本相关
启动 nsqd/nsqlookupd/nsqadmin
#!/bin/bash
readonly memQueueSize="${MEM_QUEUE_SIZE:-1000000}"
set -e
set -u
echo "# using --mem-queue-size=$memQueueSize"
if [ ! -x ./nsqd ]
then
echo "Please copy executable nsqd here"
exit
fi
if [ ! -x ./nsqlookupd ]
then
echo "Please copy executable nsqlookupd here"
exit
fi
echo "# running nsqlookupd and nsqd"
rm -f *.dat
./nsqlookupd --broadcast-address=127.0.0.1 >/dev/null 2>&1 &
nsqlookupd_pid=$!
./nsqd --mem-queue-size=$memQueueSize --lookupd-tcp-address=127.0.0.1:4160 --broadcast-address=127.0.0.1 >/dev/null 2>&1 &
nsqd_pid=$!
./nsqadmin --lookupd-http-address=127.0.0.1:4161 >/dev/null 2>&1 &
nsqadmin_pid=$!
创建 topic/channel
#!/bin/bash
readonly channelCount="${1:-1}"
echo "# using --channel-count=${channelCount}"
echo "# creating topic/channel"
for i in $(seq 1 ${channelCount})
do
curl --silent -X POST "http://127.0.0.1:4151/topic/create?topic=topic_1" >/dev/null 2>&1
if [ $i -lt 10 ]
then
curl --silent -X POST "http://127.0.0.1:4151/channel/create?topic=topic_1&channel=channel_0${i}" >/dev/null 2>&1
else
curl --silent -X POST "http://127.0.0.1:4151/channel/create?topic=topic_1&channel=channel_${i}" >/dev/null 2>&1
fi
done