iT邦幫忙

0

MQTT 實作

  • 分享至 

  • xImage

這幾天在研究 MQTT 相關的技術,基本的訊息傳輸已經沒有問題,

然後爬了一些文都是指出 MQTT 算是 server 負擔相對輕的解決方案,

不過還是不太清楚一台純粹 broker 的 server 可以大概供多少 subscribe?
或者這麼說好了,是否有前輩有作過類似的服務,
可以大概提供一下多少 RAM CPU 可以給多少 subscribe 這樣?
(不然好像有點大哉問,連個 server 基本配備都沒講。 @@)

還是說如果我遇到瓶頸時,應該是往 CPU 或者 RAM 增加?

先在此感謝解惑 <(_ _)>

pigochu iT邦新手 5 級 ‧ 2021-02-17 08:51:23 檢舉
可以用效能測試工具,發出大量併發直接測就知道了

https://github.com/krylovsk/mqtt-benchmark

其實還要考量你的應用是甚麼, 訂閱者如果是 server ,會不會需要處理複雜的邏輯,例如塞資料進資料庫,如果是,有可能訂閱者那邊的負擔重很多
swallowcc iT邦新手 4 級 ‧ 2021-02-17 12:53:15 檢舉
感謝回應 <(_ _)> 我先來試試看 benchmark
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
tkunlin
iT邦新手 4 級 ‧ 2021-02-18 09:40:32

"可以大概提供一下多少 RAM CPU 可以給多少 subscribe 這樣?" 你問到一個很大很難以回答的問題.

你要考量的有很多面向:

  1. 你的應用是什麼?
  2. 是在LAN 還是在 Internet 上使用?
  3. 整個系統的架構.
  4. .....

這類的資訊在網路上不見得找的到, 原因在於這些資料通常都需要的專業的QA engineer來協助測試, 若是商業軟體, 是不會放到網路上的. 建議你若是公司產品, 找可以協助測試的QA engineer來協助測試.

特別是你遇瓶頸時, 如果你有遇到一個可以搭配 QA engineer, 你才有餘力去處理程式上的邏輯. 把其他事給 QA engineer處理.

swallowcc iT邦新手 4 級 ‧ 2021-02-18 13:36:45 檢舉

不好意思問題提的很爛 ^^"

不過大概理解為什麼找不到類似資訊了,很感謝你的提醒~

我再用其他前輩提供的工具實際去壓測看看

1
yuwen
iT邦新手 4 級 ‧ 2021-02-18 10:37:46

小弟個人也有實作了MQTT,所以可以在此分享一下心得:
1.subscriber的多寡是由你實作的細節來決定的,若是以非同步方式實作,基本上一個MQTT的message的payload是268,435,455 byte,由於broker本身會「短暫的」保存每一份message,因此每一次的C2C的交訊至少需要的最大記憶體約65536+268M+1k+(N * 1K)的空間;在實務上你可以在登入時提供該broker的payload所允許的上限(可以依照你的記憶體去規劃),或是每次publish時檢查message的length,若是超過上限就斷線。
2.CPU佔用不高,我拿樹莓派來實測可以支援十萬個Client,但這實際上是受限於樹莓派的網卡,而不是CPU。
3.subscriber要處理什麼是他的事情,broker頂多負責Qos2的成本。但若是subscriber並不是用非同步的方式來實作而造成Broker發生TimeOut的話也沒辦法。
4.這年代還會有不用非同步執行的MQTT Client嗎?

swallowcc iT邦新手 4 級 ‧ 2021-02-18 13:37:40 檢舉

很感謝你的回覆, 這些資訊對我很有用處

在此再次感謝 <(_ _)>

我要發表回答

立即登入回答