EMQ學習 客戶鏈結資源消耗

2021-09-08 20:23:31 字數 1584 閱讀 5718

erlang程序消耗

emq對客戶端鏈結使用鏈結程序(emqtt_client)和session程序(emqtt_session)分開的策略。 當乙個mqtt的客戶端連線到emq的伺服器上的時候,首先會建立乙個負責管理連線的程序(emqtt_client),當驗證客戶端有效後會建立另乙個程序(emqtt_session),負責該客戶端的會話。

在emq中,每乙個clientid只能登入一次,因此後登入的客戶端會將先登入的客戶端踢下線。

主要記憶體消耗(乙個connection大約佔10k記憶體)

資料表當乙個客戶端成功完成了驗證,emq會在mqtt_session中新增乙個表專案,同時會在mqtt_local_session和mqtt_client這兩張ets表中新增表專案。

程序上下文

鏈結程序(emqtt_client)負責接收客戶端發來的資料和接受伺服器內部要傳送給客戶端的資料,並使用編解碼器進行編譯碼,因此鏈結程序的上下文消耗,主要取決接收到的資料報大小和將要傳送的資料報大小和數量。

session程序(emqtt_session)會保持乙個inflight佇列,用來對qos大於0的訊息進行應答等待,缺省會儲存32個訊息在等待應答,如果超過這個量級就會放入等待佇列。因此session程序(emqtt_session)的主要記憶體消耗,取決於多少等待應答的訊息,以及這些需要應答訊息的資料報的大小。

主要cpu消耗

定時器鏈結程序(emqtt_client),缺省會啟動乙個心跳定時器,定期的檢查鏈結是否存活。session程序(emqtt_session)同樣會開啟乙個重新傳送定時器,用來檢查qos大於0的訊息的infligt響應,當客戶端發布qos為2的訊息時還會開啟另外乙個定時器,用來檢測repl資訊的響應,當然session程序(emqtt_session)有可能會在客戶端離線後保持一段時間,因此在這段時間會建立乙個超時退出的定時器。因此session程序(emqtt_session)在某乙個時刻會同時存在三個定時器。

監控session程序(emqtt_session)為了發現鏈結程序的退出,會建立乙個針對鏈結程序的監控。而在客戶端上線成功後後在向mqtt_local_session和mqtt_client這兩張ets表中新增專案的時候,會分別建立兩個監控,用來監控session程序(emqtt_session)和鏈結程序(emqtt_client)的退出。

程序訊息

因為emq使用了鏈結程序(emqtt_client)和session程序(emqtt_session)分開的策略,因此產生程序訊息傳遞是無法避免的。因為session程序(emqtt_session)會負責接收伺服器傳送給客戶端的訊息,並進行預先處理,處理完之後再交付給鏈結進(emqtt_client)程進行傳送。

當使用持久化session的時候,session程序(emqtt_session)的查詢和恢復時也會產生大量的程序訊息。

總結從上面的介紹中,可以看出,在部署乙個emq伺服器前需要考慮,乙個客戶端平均訊息的量級,qos佔比和資料報大小,同時根據有多少客戶端進行cpu頻率和數量的選擇(參考actor模型中的排程部分)。

當運營乙個emq伺服器的時候,如果在訊息量級和客戶端數量沒有明顯變化的情況下,cpu突然飆公升,就要去考慮下是否出現客戶端頻繁上下線的情況。當然這只是乙個簡單的例子,還有很多情況在此就不一一枚舉了

EMQ學習 客戶鏈結資源消耗

erlang程序消耗 emq對客戶端鏈結使用鏈結程序 emqtt client 和session程序 emqtt session 分開的策略。當乙個mqtt的客戶端連線到emq的伺服器上的時候,首先會建立乙個負責管理連線的程序 emqtt client 當驗證客戶端有效後會建立另乙個程序 emqtt...

深度學習資源鏈結 更新中

神經網路入門 caffe快速入門 cnn的反向傳播 caffe原始碼學習筆記 cnn入門基礎 感知域說的很清楚 caffe使用基礎 星空下的巫師 c 版本 caffe cnn visual connet cnn的視覺化 cnn softmax公式推導 cnn人臉檢測 matconvet cs231 ...

軟體學習常用網上資源鏈結

如何從零開始搭建 ci cd 流水線 docker和虛擬機器的區別 docker與vm虛擬機器的區別以及docker的特點 mongodb 教程 welcome to the mongodb docs mongodb教程2 易佰教程 beautiful soup 4.4.0 文件 python 3....