回覆列表
  • 1 # 變餅檔

    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保留訊息。其實就是客戶端離線後在連線上可以收到之前推出的訊息。

  • 中秋節和大豐收的關聯?
  • 孔雀魚是否有領地意識和同類打架?