官方的 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