這幾天在研究 MQTT 相關的技術,基本的訊息傳輸已經沒有問題,
然後爬了一些文都是指出 MQTT 算是 server 負擔相對輕的解決方案,
不過還是不太清楚一台純粹 broker 的 server 可以大概供多少 subscribe?
或者這麼說好了,是否有前輩有作過類似的服務,
可以大概提供一下多少 RAM CPU 可以給多少 subscribe 這樣?
(不然好像有點大哉問,連個 server 基本配備都沒講。 @@)
還是說如果我遇到瓶頸時,應該是往 CPU 或者 RAM 增加?
先在此感謝解惑 <(_ _)>
"可以大概提供一下多少 RAM CPU 可以給多少 subscribe 這樣?" 你問到一個很大很難以回答的問題.
你要考量的有很多面向:
這類的資訊在網路上不見得找的到, 原因在於這些資料通常都需要的專業的QA engineer來協助測試, 若是商業軟體, 是不會放到網路上的. 建議你若是公司產品, 找可以協助測試的QA engineer來協助測試.
特別是你遇瓶頸時, 如果你有遇到一個可以搭配 QA engineer, 你才有餘力去處理程式上的邏輯. 把其他事給 QA engineer處理.
小弟個人也有實作了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嗎?