1.目標:測試Mosquitto使用MQTT協議發訊息的相關效能指標,包含傳送速度,併發負載能力,資源佔用,訊息到達率。
2.MQTT協議簡介:
1).建立長連線。客戶端發起請求和服務端建立長連線,建立成功後,服務端會返回ACK(CONNACK)
2).客戶端訂閱:客戶端發起訂閱,訂閱成功後,服務端會返回ACK(SUBACK)
3).發訊息:釋出者會給服務端發訊息,服務端在把訊息給合適的客戶端。
Qos=0(服務質量):客戶端訊息收到後,不會發出ACK給服務端(PUBACK)。
Qos =1:服務端會發ACK給釋出者,客戶端收到訊息後會發ACK給服務端。
4).取消訂閱:客戶端發起取消訂閱,服務端返回ACK(UNSUBACK)
5)Pingreq&Pingresp:客戶端和服務端會保持心跳。
3.存在問題:
1. 如何模擬出40W的使用者
2. 如何長連線,訂閱,發訊息,取消訂閱,Pingreq行為如何實現。
4. python開源庫 Mosquitto.py,解決所有問題
1. 模擬40W使用者
a)可以使用虛擬機器和Mosquitto.py實現,具體為:一般一臺虛擬機器最多是6W+的模擬資料(需要修改控制代碼數,我使用5W),方法是Client_id可以簡單的做出5W個來,然後呼叫Mosquitto裡面的connect方法,建立長連線。準備8臺虛擬機器就可以實現40W客戶端的模擬
2.行為的模擬
a)訂閱:Mosquitto.subscribe / 發訊息:Mosquitto.publish / 取消訂閱:Mosquitto.unsubscribe。 簡單一句話 Mosquitto庫實現所有的行為.
5. 指標:傳送速度,到達率,併發負載,資源佔用。
a. 傳送速度:服務端日誌記錄,分析解決
b. 到達率: 1.客戶端記錄下收到訊息,分析計算。2.計算服務端收到的PUBACK(客戶端收到訊息返回的ACK),進行計算
c. 併發負載:5W 使用者不斷增加,注意觀察服務端的負載情況。
e.資源佔用:其實主要是cpu/mem/頻寬:cpu多核的話需要觀察top命令下的_id欄位, mem可以觀察free -h命令的剩餘mem, 頻寬可以使用mpstat進行觀察
6. 可以遇見問題:
a. 模擬客戶端的虛擬機器需要修改控制代碼數才能支援5W的客戶端模擬數量
b. 要先吃透MQTT協議的流程,吃透了進行測試會非常的方便
c. Clear session,設定為true則不為客戶端保留休息,設定為false保留訊息。其實就是客戶端離線後在連線上可以收到之前推出的訊息。
1.目標:測試Mosquitto使用MQTT協議發訊息的相關效能指標,包含傳送速度,併發負載能力,資源佔用,訊息到達率。
2.MQTT協議簡介:
1).建立長連線。客戶端發起請求和服務端建立長連線,建立成功後,服務端會返回ACK(CONNACK)
2).客戶端訂閱:客戶端發起訂閱,訂閱成功後,服務端會返回ACK(SUBACK)
3).發訊息:釋出者會給服務端發訊息,服務端在把訊息給合適的客戶端。
Qos=0(服務質量):客戶端訊息收到後,不會發出ACK給服務端(PUBACK)。
Qos =1:服務端會發ACK給釋出者,客戶端收到訊息後會發ACK給服務端。
4).取消訂閱:客戶端發起取消訂閱,服務端返回ACK(UNSUBACK)
5)Pingreq&Pingresp:客戶端和服務端會保持心跳。
3.存在問題:
1. 如何模擬出40W的使用者
2. 如何長連線,訂閱,發訊息,取消訂閱,Pingreq行為如何實現。
4. python開源庫 Mosquitto.py,解決所有問題
1. 模擬40W使用者
a)可以使用虛擬機器和Mosquitto.py實現,具體為:一般一臺虛擬機器最多是6W+的模擬資料(需要修改控制代碼數,我使用5W),方法是Client_id可以簡單的做出5W個來,然後呼叫Mosquitto裡面的connect方法,建立長連線。準備8臺虛擬機器就可以實現40W客戶端的模擬
2.行為的模擬
a)訂閱:Mosquitto.subscribe / 發訊息:Mosquitto.publish / 取消訂閱:Mosquitto.unsubscribe。 簡單一句話 Mosquitto庫實現所有的行為.
5. 指標:傳送速度,到達率,併發負載,資源佔用。
a. 傳送速度:服務端日誌記錄,分析解決
b. 到達率: 1.客戶端記錄下收到訊息,分析計算。2.計算服務端收到的PUBACK(客戶端收到訊息返回的ACK),進行計算
c. 併發負載:5W 使用者不斷增加,注意觀察服務端的負載情況。
e.資源佔用:其實主要是cpu/mem/頻寬:cpu多核的話需要觀察top命令下的_id欄位, mem可以觀察free -h命令的剩餘mem, 頻寬可以使用mpstat進行觀察
6. 可以遇見問題:
a. 模擬客戶端的虛擬機器需要修改控制代碼數才能支援5W的客戶端模擬數量
b. 要先吃透MQTT協議的流程,吃透了進行測試會非常的方便
c. Clear session,設定為true則不為客戶端保留休息,設定為false保留訊息。其實就是客戶端離線後在連線上可以收到之前推出的訊息。