一、機器準(zhǔn)備
準(zhǔn)備兩臺服務(wù)器,一臺為部署fastbee服務(wù)端應(yīng)用,另一臺為客戶端壓力機。其中:
- Fastbee服務(wù)器(1臺)
- 系統(tǒng):TencentOS Server 2.4 (TK4)
- CPU:4C
- 內(nèi)存:16GB
- 帶寬:15Mbps
- MQTT Broker 服務(wù)端:EMQX 5.7.2
- 壓力機(1臺)
- 系統(tǒng):OpenCloudOS 8 (騰訊云輕量應(yīng)用服務(wù)器)
- CPU:4C
- 內(nèi)存:8GB
- 峰值帶寬:200Mbps
- 壓力機測試工具:emqtt-bench-0.4.18-el7-amd64.tar.gz
二、壓測步驟
- 拉取壓測分支代碼(dev-yace),編譯jar包并運行
- 創(chuàng)建腳本規(guī)則,修改發(fā)布的消息內(nèi)容
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.core.util.NumberUtil;
// 1. 獲取主題和內(nèi)容(必要)
String sysPayload = "";
// 2. 數(shù)據(jù)轉(zhuǎn)換(自己處理)
JSONArray newArray = new JSONArray();
JSONObject newObject = new JSONObject();
newObject.put("id","temperature");
newObject.put("value","18");
newArray.add(newObject);
sysPayload = newArray.toString();
// 3. 返回新的數(shù)據(jù)(必要)
msgContext.setSerialNumber("D1ELV3A5TOJS");
msgContext.setPayload(sysPayload);
- 優(yōu)化系統(tǒng)調(diào)優(yōu)
- 服務(wù)端:
// 修改系統(tǒng)參數(shù),擴大可用端口范圍
sudo sysctl -w net.ipv4.ip_local_port_range="1025 65534"
// 系統(tǒng)全局允許分配的最大文件句柄數(shù)
sudo sysctl -w fs.file-max=2097152
sudo sysctl -w fs.nr_open=2097152
sudo echo 2097152 > /proc/sys/fs/nr_open
// 允許當(dāng)前會話 / 進程打開文件句柄數(shù)
sudo ulimit -n 1048576
// 允許復(fù)用處于 `TIME_WAIT` 狀態(tài)的端口
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
- 壓測機:
// 測試客戶端服務(wù)器在一個接口上,最多只能創(chuàng)建 65000 連接
sysctl -w net.ipv4.ip_local_port_range="500 65535"
echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 100000
- 執(zhí)行壓測命令
// 消息發(fā)布命令
// 20k客戶端連接 3300毫秒發(fā)送一個1字節(jié)數(shù)據(jù) 起始客戶端為1000個(20k連接 6k QPS)
./emqtt_bench pub -t /41/D1ELV3A5TOJS/property/post -h 1.14.207.123 -s 1 -q 0 -c 20000 -I 3300 -n 1000
// 純連接命令
./emqtt_bench conn -h 1.14.207.123 -p 1884 -u sunrain -P sunrain -c 60000 -i 10
三、壓測結(jié)果
場景一:20k客戶端連接 5000毫秒發(fā)送一個1字節(jié)數(shù)據(jù) 4kqps
最終測試結(jié)果如下:
場景二:20k客戶端連接 3300毫秒發(fā)送一個1字節(jié)數(shù)據(jù) 6kqps
最終測試結(jié)果如下:
場景三:20k客戶端連接 3300毫秒發(fā)送一個1字節(jié)數(shù)據(jù) 6kqps
同時增加了10個訂閱端,cpu資源不受限的情況下測試,8c和16c 最終測試結(jié)果如下:
- 8c:
- 16c:
四、壓測總結(jié)
- 單機版本能穩(wěn)定運行的推薦配置為:cpu:8c 內(nèi)存:16G 帶寬:10Mbps, 性能可達:20k客戶端連接 4-6kqps
- 在推薦配置下,20k-30k客戶端的連接能滿足,穩(wěn)定的qps處理能力在:4k-6k,如果系統(tǒng)要求超過這個性能要求可以考慮集群版本
- 推薦替換性能好點的mqtt客戶端:mica-mqtt,paho-mqtt在高并發(fā)下有斷連的風(fēng)險,會丟失數(shù)據(jù)。
- 設(shè)備有高頻的發(fā)布屬性消息的需求時,可以分離訂閱和發(fā)布內(nèi)置mqtt客戶端,減少消息的阻塞,提高連接穩(wěn)定性。