MQTT یک پروتکل سبک است که از اینترنت اشیاء (IoT) پشتیبانی می کند. در این مقاله به توضیح عملکرد مرکز مرکزی آن که به عنوان کارگزار MQTT شناخته می شود ، پیاده سازی های مختلف آن را مقایسه می کند و موارد استفاده ، ویژگی ها و بهترین شیوه ها را بررسی می کند.
یک کارگزار MQTT یک نهاد واسطه است که مشتریان MQTT را قادر می سازد تا ارتباط برقرار کنند. به طور خاص ، یک کارگزار MQTT پیام های منتشر شده توسط مشتری را دریافت می کند ، پیام ها را بر اساس موضوع فیلتر می کند و آنها را به مشترکان توزیع می کند.
استفاده از کارگزاران MQTT برای فعال کردن مدل ارتباطی انتشار/اشتراک (Pub/Sub) کمک می کند تا MQTT به یک پروتکل بسیار کارآمد و مقیاس پذیر تبدیل شود.
در این مقاله ، کارگزاران MQTT را به طور عمیق مرور خواهیم کرد. برای اطمینان از داشتن یک تصویر کامل ، ما با یک مرور کلی از MQTT شروع خواهیم کرد و سپس به نقش خاصی که کارگزاران در ارتباطات بازی می کنند ، شیرجه می شویم.
MQTT چیست؟
MQTT یک پروتکل ارتباط با منبع باز/زیر ارتباطات است که توسط اندی استنفورد-کلارک و آرلن نیپر ایجاد شده است. این معمولاً بیش از TCP/IP پشته اجرا می شود ، اما پیاده سازی های MQTT وجود دارد که از پروتکل های دیگر (به عنوان مثال بلوتوث) استفاده می کنند. از آنجا که این پروتکل بیش از "صف پیام" و "حمل و نقل تله متری" را کنترل می کند ، اصطلاح MQTT معمولاً به جای اینکه به عنوان مخفف نام طولانی تر تصور شود ، به عنوان نام پروتکل استفاده می شود.
MQTT در استفاده از پهنای باند و منابع سیستم کارآمد است. در نتیجه ، در موارد استفاده از سیستم های تعبیه شده با قدرت کم گرفته تا میکروسرویسهای ابر بومی محبوب است.
مدل Pub/Sub در هسته ارتباط MQTT است. اطلاعات توسط موضوعات سازماندهی می شود. دستگاه های مشتری می توانند برای ارسال پیام به هر مشترک ، داده ها را به یک موضوع منتشر کنند. به همین ترتیب ، مشتریان می توانند هنگام انتشار پیام در موضوعی مشترک شوند.

موارد استفاده MQTT
MQTT در IOT و IIOT محبوب است (اینترنت صنعتی اشیاء) زیرا می تواند ضمن مصرف حداقل پهنای باند در سکوها استفاده شود. دستگاه های IoT معمولاً منابع محدودی دارند. از آنجا که پیاده سازی MQTT نسبت به سایر معماری های ارتباطی سبک تر و کارآمدتر است (به عنوان مثال ، یک API استراحت مبتنی بر HTTP) ، MQTT اغلب یک انتخاب عاقلانه برای IoT است. برخی از رایج ترین موارد استفاده MQTT در IoT و IIOT عبارتند از:
- جمع آوری داده ها از گره های سنسور و انتشار آن به سرور.
- انتشار داده های بحرانی به طور مستقیم از یک گره سنسور به یک دستگاه کاربر.
- پیکربندی دستگاه های IOT و IIOT از راه دور.
- ارسال داده های پیکربندی از یک پلت فرم وب واحد یا برنامه تلفن هوشمند به طور همزمان به همه دستگاه ها (به لطف مباحث MQTT که به WildCards اجازه می دهد).
- فوراً فشار آوردن به روزرسانی های OTA (بیش از هوا) به همه دستگاه های موجود در شبکه.

علاوه بر موارد استفاده IOT و IIOT ، MQTT همچنین راه خود را برای محصولات نرم افزاری سنتی و سیستم های توزیع شده در مقیاس بزرگ پیدا کرده است. مهمتر از همه ، فیس بوک از MQTT برای برنامه پیام رسان خود استفاده می کند. به همین ترتیب ، بسیاری از برنامه های پیام رسانی منبع باز ، مانند APP چت ، از MQTT استفاده می کنند. با ادامه رشد جامعه MQTT ، پروژه های منبع باز و منبع بسته با استفاده از پروتکل منتشر می شود.
کارگزار MQTT
در پروتکل MQTT دو نهاد بزرگ وجود دارد: یک کارگزار و مشتری. کارگزاران MQTT و مشتری MQTT دقیقاً چیست؟آنها چگونه متفاوت هستند؟بیا یک نگاهی بیندازیم.
کارگزار MQTT در مقابل مشتری MQTT

یک کارگزار MQTT یک نهاد نرم افزاری اصلی در معماری MQTT است. این دقیقاً مانند یک کارگزار املاک و مستغلات عمل می کند که ابتدا بررسی های پس زمینه را برای طرفین درگیر انجام می دهد و پس از اطمینان از اجرای قوانین مربوطه ، کارگزار یک معامله را آغاز می کند.
یک کارگزار MQTT همین کار را انجام می دهد اما به جای معاملات پولی ، کارگزاران MQTT معاملات پیام را انجام می دهند. به طور خاص ، در اینجا چگونه کارگزاران MQTT معاملات بین مشتریان MQTT را تسهیل می کنند:
- به دستگاه ها (a. k. a. "دستگاه های مشتری" یا به سادگی "مشتری") اجازه دهید تا یک درخواست اتصال ایجاد کنید
- دستگاه ها را بر اساس اطلاعات اتصال به اشتراک گذاشته شده توسط دستگاه (های) اتصال تأیید کنید
- پس از تأیید اعتبار ، اطمینان حاصل کنید که دستگاه می تواند با استفاده از رمزگذاری Security Layer Security (TLS) به/از سایر دستگاه ها پیام ارسال یا دریافت کند (به عنوان یک گزینه)
- پیام ها را در سرور ذخیره می کند تا در صورت از دست دادن اتصال ناخواسته ، در اتصال مشتری ، در اتصال به مشتری و غیره مجدداً مجدداً مجدداً اعلام شود.
از آنجا که یک کارگزار MQTT به دستگاه ها (مشتری ها) اجازه می دهد تا با روشی جدا شده ارتباط برقرار کنند ، معماری کامل می تواند به راحتی و بدون تأثیرگذاری بر دستگاه های مشتری موجود ، به راحتی مقیاس بندی شود.
از آنجا که کارگزار MQTT یک نهاد مرکزی است و تمام بلند کردن سنگین را انجام می دهد ، دستگاه های مشتری فقط باید با حداقل پهنای باند پردازش حداقل انجام دهند.
حال بیایید نگاهی دقیق تر به نحوه عملکرد آن دستگاه های مشتری بیندازیم. مشتریان می توانند تقریباً هر دستگاه "هوشمند" از جمله تلفن های هوشمند ، برنامه های وب ، گره های سنسور ، محرک یا حتی ساعت های هوشمند باشند. مشتری ها می توانند:
- با نام کاربری و رمز عبور به یک کارگزار متصل شوید
- مشترک شدن در یک موضوع (گوش دادن به پیام های منتشر شده در آن موضوع)
- انتشار به یک موضوع (ارسال پیام (ها) به آن موضوع)
انواع کارگزاران MQTT
به طور کلی ، دو نوع کارگزار وجود دارد:
- کارگزاران مدیریت شده
- کارگزاران خود میزبان
کارگزاران مدیریت شده
کارگزاران مدیریت شده نیازی به تنظیم هر چیزی در سرور خود ندارند تا بتوانید ارتباطات MQTT را فعال کنید. خدمات کارگزار مدیریت شده به شما امکان می دهد از کارگزاران میزبان خود برای سیستم خود استفاده کنید. AWS IoT Core نمونه خوبی از یک کارگزار MQTT مدیریت شده است.
کارگزاران خود میزبان
همانطور که از نام آن پیداست ، کارگزاران MQTT خود میزبان شما را ملزم به نصب کارگزار بر روی VPS یا سرور خود با IP استاتیک می کنند. فرآیند نصب دشوار نیست اما مدیریت ، تأمین و مقیاس کارگزاران نیاز به دانش عمیق از سیستم دارد. چندین اجرای منبع باز از کارگزاران MQTT از جمله Mosquitto و HiveMQ وجود دارد.
لیست کارگزاران محبوب MQTT
بسیاری از کارگزاران MQTT مدیریت شده و خود میزبان زیادی در دسترس هستند. در اینجا مروری بر برخی از محبوب ترین گزینه ها آورده شده است.
| نوع | آدرس و بندر | پشتیبانی WebSocket | پشتیبانی SSL | مقیاس پذیری |
| AWS IoT Core MQTT | اداره می شود | به صورت پویا اختصاص داده شده است | بله ، پورت = 443 | بله ، بندر = 8883 | مقیاس خودی |
| پشه | خود میزبان و مدیریت شده | test. mosquitto.org | بله ، پورت = 8081،8080 | بله ، بندر = 8883،8884 | مقیاس های افقی ساخت پل ها |
| مسکا/آیدس | خود میزبان و مدیریت شده | test. mosca. io | بله ، پورت = 3000 | بله ، بندر = 8883 | به صورت افقی و عمودی |
| HIVEMQ | خود میزبان و مدیریت شده | broker. hivemq.com | بله ، پورت = 8000،443 | بله ، بندر = 8883 | بله ، خوشه سازی کارگزار |
| ورم | خود میزبان و مدیریت شده | خودکشی | بله ، پورت = 9001. 9002 | بله ، بندر = 8883 | هم افقی و هم عمودی |
| هاب لاجورد | اداره می شود | به صورت پویا اختصاص داده شده است | بله ، پورت = 443 | بله ، بندر = 8883 | مقیاس خودی |
| EMQ X | خود ستا | خودکشی | بله ، پورت = 8083 ، 8084 | بله ، بندر = 8883 | خوشه |
| الود | خود میزبان و مدیریت شده | خود اختصاص داده شده و به صورت پویا اختصاص داده شده است | آره | آره | خوشه |
در لیست فوق از محبوب ترین کارگزاران خود میزبان و مدیریت شده MQTT با هر کارگزار که دارای جوانب مثبت و منفی خود هستند ، ذکر شده است. برخی از کارگزاران برای پروژه های در مقیاس کوچک مناسب هستند و برخی دیگر برای برنامه های در مقیاس بزرگ ساخته شده اند. به عنوان مثال ، کارگزاران مانند Veemq و مشابه به طور خاص برای مقیاس پذیری آسان سیستم ساخته شده اند.
انواع پیام MQTT
صرف نظر از نوع کارگزار ، انواع پیام MQTT مشابه هستند. در اینجا ، ما به رایج ترین انواع پیام MQTT نگاهی خواهیم انداخت: پیام ها را به هم وصل کنید ، پیام ها را قطع کنید و پیام ها را منتشر کنیم.
هنگامی که مشتری ارتباط با یک کارگزار را آغاز می کند ، از پیام اتصال استفاده می شود. پیام اتصال داده های زیر را شامل می شود:
ClientId ، Cleansession ، نام کاربری ، رمز عبور ، Lastwilltopic ، Lastwillqos ، Lastwillmessage ، Lastwillretain و Keepalive.
دو متغیر اول ، ClientID و پاکسازی ، برای کلیه درخواست های اتصال لازم است در حالی که تمام متغیرهای دیگر اختیاری هستند. ClientID باید یک شناسه منحصر به فرد برای هر مشتری باشد.
هنگامی که مشتری سعی در قطع یک جلسه TCP/IP دارد ، از یک پیام قطع استفاده می شود. در صورت تنظیم پیام قطع ، یک پیام از پیش تعریف شده قبل از قطع کامل ارسال می شود.
سرانجام ، ما پیام انتشار عمومی داریم. هر مشتری می تواند پیامی را به یک موضوع منتشر کند تا به مشتریان مشترک اطلاع داده شود.
mqtt qos
QoS یا کیفیت خدمات یک توافق از پیش تعریف شده بین ناشر و مشترک یک موضوع است. QoS در MQTT برای تنظیم سطح ضمانت تحویل پیام استفاده می شود. در MQTT 3 سطح QoS وجود دارد:
- QoS 0 (حداکثر یک بار)
- QoS 1 (حداقل یک بار)
- QoS 2 (دقیقاً یک بار)
برخی از کارگزاران از اجرای QoS 2 استفاده می کنند.
qos 0 - حداکثر یک بار

QOS 1 - حداقل یک بار

سطح QOS1 به کارگزار نیاز دارد تا تضمین کند که پیام حداقل یک بار با استفاده از یک بسته تأیید به نام Puback به مشتری ارسال می شود.
QoS 2 - حداکثر یک بار

سطح QoS 2 تضمین می کند که کارگزار پیام منتشر شده را فقط یک بار ارسال می کند. همانطور که در شکل بالا نشان داده شده است ، از تأیید چند سطحی استفاده می کند. PUBREC اولین تصدیق از کارگزار است ، PubRel تصدیق مشتری نشر است که PUBREC دریافت می شود در حالی که PUBCOMP تصدیق دوم و نهایی از کارگزار است. این تأیید چند سطحی باعث می شود QoS 2 کمترین سطح QoS فوق الذکر باشد. به دلیل سربار ، بیشتر خدمات کارگزار مدیریت شده ، از جمله AWS IoT Core MQTT ، SKIP QOS سطح 2.
LWT و نگه دارید در کارگزاران MQTT
زنده بمان
MQTT نگهدارنده حداکثر فاصله زمانی است که توسط مشتری برای باز نگه داشتن اتصال مشتری کارگزار تعریف شده است.
در مشخصات MQTT ، تعریف زیر را از نگه داشتن ALIVE داریم
"نگهدارنده [.] حداکثر فاصله زمانی است که اجازه می دهد بین نقطه ای که مشتری در حال انتقال یک بسته کنترل و نقطه شروع ارسال بعدی است ، از بین برود. این مسئولیت مشتری است که اطمینان حاصل کند کهفاصله بین بسته های کنترل که ارسال می شود از ارزش نگهدارنده فراتر نمی رود. در صورت عدم ارسال هر بسته کنترل دیگر ، مشتری باید یک بسته PingReq را ارسال کند. "
LWT - آخرین اراده و عهد
پیام LWT یک پیام انتشار ساده است که در کارگزار ذخیره شده و توسط مشتری تعریف شده است. اگر مشتری از کارگزار جدا شود ، شاید به دلیل مشکل اتصال ، کارگزار پیام های LWT را به کلیه مشتریانی که در دستگاه قطع کننده مشترک هستند ، منتشر می کند. LWT همچنین امکان استفاده از QoS را که می تواند در LWT بر اساس بحران برنامه تنظیم شود ، امکان پذیر می کند.
امنیت کارگزار MQTT
امنیت کارگزار MQTT به اجرای بستگی دارد. کارگزاران MQTT به طور کلی رمزگذاری TLS را برای برقراری ارتباط ایمن بین مشتری و کارگزاران فراهم می کنند. درگاه های پیش فرض Secure MQTT برای MQTT 8883 و 443 برای MQTT نسبت به WebSockets است.
مقیاس پذیری کارگزار MQTT
مانند امنیت ، مقیاس پذیری کارگزار MQTT به اجرای آن بستگی دارد. کارگزاران MQTT می توانند به صورت عمودی یا افقی مقیاس شوند. به عنوان مثال ، کارگزار Mosquitto گزینه های مقیاس پذیری افقی را ارائه می دهد. مقیاس پذیری افقی برای دستیابی به آن دشوار است زیرا به پیکربندی دستی و دانش عمیق شبکه ها نیاز دارد.
همچنین چندین کارگزار خود میزبان و مدیریت شده وجود دارند که در اطراف گزاره فروش منحصر به فرد (USP) مقیاس پذیری ساخته شده اند. اگر ما کارگزار Veemq را به عنوان نمونه در نظر بگیریم ، هر دو گزینه مقیاس پذیری عمودی و افقی را در حالی که در دسترس بودن بالایی به عنوان یک ویژگی فراهم می کند ، فراهم می کند. Veemq همچنین الگوهای پیکربندی مقیاس پذیری آسان را ارائه می دهد تا اطمینان حاصل شود که سیستم بدون تأثیرگذاری بر مشتری می تواند مقیاس بندی شود.
چالش های کارگزار MQTT و بهترین شیوه ها
چگونه یک کارگزار MQTT را انتخاب کنیم؟
آیا می توانم با یک کارگزار مدیریت شده یا یک راه حل خود میزبان بروم؟
پاسخ این سؤال به طور کلی به مورد استفاده ای که می خواهید پیاده سازی کنید بستگی دارد. اگر به دنبال ایجاد یک نمونه اولیه یا اثبات مفهوم (POC) هستید و نمی خواهید وقت خود را برای مدیریت زیرساخت ها و تأمین ارتباطات بگذرانید ، یک سرویس کارگزار مدیریت شده منطقی است. فقط چند کلیک و شما یک کارگزار آماده برای استفاده دارید.
با این حال ، کارگزاران مدیریت شده نیز اشکال خود را دارند. به عنوان مثال ، شما باید تعداد بسته های داده منتقل شده را پرداخت کنید (مدل قیمت گذاری از ارائه دهنده خدمات به ارائه دهنده خدمات متفاوت است). شما نمی توانید بسیاری از تنظیمات کارگزار را کنترل و پیکربندی کنید و فقط می توانید تنظیمات را که فروشنده اجازه می دهد تنظیم کنید. ارائه دهنده کارگزار مدیریت شده معمولاً درپوش انتقال داده ها و بسته ها/دوم یا بسته ها/دقیقه ها را قرار می دهد که می تواند ارتباط را کند کند.
بنابراین آیا این ایده خوبی است که به جای آن از یک کارگزار خود میزبان استفاده کنیم؟بستگی دارداگر یک کارگزار مدیریت شده را امتحان کرده اید و محدودیت های هزینه یا کنترل مشکلی ایجاد کرده است ، ممکن است یک راه حل خود میزبان انتخاب مناسبی باشد. با یک راه حل خود میزبان ، می توانید سیستم را به تنهایی مقیاس کنید ، همه چیز را همانطور که می خواهید پیکربندی کنید و می توانید قوانین خود را به راحتی در جای خود قرار دهید.
آیا باید از MQTT یا MQTT-SN سنتی استفاده کنم؟
MQTT-SN برای فعال کردن استفاده بسیار کم قدرت ایجاد شده و در مکان های از راه دور قرار می گیرد که در آن شبکه های سنتی مانند 4G-LTE ، NB-IOT و WiFi وجود ندارند. در چنین شرایطی ، دستگاه ها باید:
- از حداقل توان استفاده کنید تا آنها را در طی یک دوره طولانی (معمولاً چندین سال) نگه دارید.
- از یک پروتکل ارتباطی مانند Lora یا Zigbee استفاده کنید که از قدرت بسیار کمی استفاده می کند و می تواند در مسافت های طولانی منتقل شود.
MQTT-SN پیام اتصال را به قسمت های مختلف تقسیم می کند ، دارای نام موضوعات کوتاه ، مباحث از پیش تعریف شده و سایر بهینه سازی ها برای حفظ استفاده از پهنای باند و اندازه پیام تا حد ممکن است.

تصویر فوق یک سیستم معمولی MQTT-SN را نشان می دهد که در آن از یک دروازه MQTT-SN استفاده می شود. یک دروازه MQTT-SN موجودی است که پیام را از شبکه ای مانند Lora یا Zigbee می گیرد ، آن را تجزیه می کند و آن را با استفاده از یک شبکه WiFi یا Cellular به یک کارگزار سنتی MQTT می فرستد.
به طور خلاصه ، اگر گره های سنسور نیاز به قرار دادن در مکان های بسیار دور از راه دور که اتصال سنتی شبکه در دسترس نیست ، قرار می گیرند ، MQTT-SN راهی برای رفتن است.
نحوه تنظیم یک کارگزار MQTT (اجرای)
راه اندازی محلی
نصب و پیکربندی کارگزار MQTT در Raspberry Pi
- Raspberry Pi را به روتر WiFi خود وصل کنید
- ترمینال را در Raspberry Pi اصلی باز کرده و دستورات زیر را اجرا کنید
- sudo nano /etc /hosts
- Rasberrypi را به MainRasberrypi تغییر دهید
- ctrl+o را فشار داده و سپس ctrl+x را وارد کنید
- راه اندازی مجدد
- پس از راه اندازی مجدد Raspberry Pi دستورات زیر را اجرا کنید
- sudo apt ufw را نصب کنید
- sudo ufw فعال کردن
- Sudo Apt نصب پشه های پشه
- sudo systemctl mosquitto را فعال کنید
- ufw sudo اجازه 1883
پس از اتمام ، دو ترمینال را باز کنید و در ترمینال اول دستور اشتراک زیر را وارد کنید:
در حالی که در ترمینال دوم دستور انتشار زیر را اجرا کنید:
"سلام جهان" را در ترمینال اشتراک مشاهده خواهید کرد.
کارگزار MQTT مبتنی بر ابر
نصب و پیکربندی کارگزار MQTT یک VPS
- ترمینال را در نمونه اوبونتو خود باز کنید و دستورات زیر را اجرا کنید
- sudo apt ufw را نصب کنید
- sudo ufw فعال کردن
- Sudo Apt نصب پشه های پشه
- sudo systemctl mosquitto را فعال کنید
- ufw sudo اجازه 1883
- ufw sudo اجازه 8883
اکنون باید یک آدرس IP استاتیک را به عنوان مثال خود وصل کنید. در مورد AWS ، شما باید یک آدرس IP الاستیک را به نمونه EC2 خود وصل کنید. پس از اتمام ، شما باید پورت های 1883 و 8883 را از پلت فرم VPS ارائه دهنده خود باز کنید تا به مشتریان MQTT اجازه دهید تا به کارگزار MQTT اخیراً نصب شده متصل شوند.
پس از اتمام ، ترمینال VPS (یا SSH خود را در VPS خود) باز کنید و دستور اشتراک زیر را وارد کنید
در حالی که در هر دستگاه دیگری هستید می توانید بعد از نصب Mosquitto-Clients Command را منتشر کنید
"سلام جهان" را در ترمینال اشتراک مشاهده خواهید کرد.
اگر نمی خواهید مدل های Mosquitto را در دستگاه مشتری خود نصب کنید ، می توانید از MQTTLENS استفاده کنید.
لنز MQTT یک پسوند کروم است که پیوند آن در زیر آورده شده است.
- نصب و باز کردن آن
- آن را بر اساس جزئیات کارگزار MQTT خود که بر روی VPS خود نصب شده است ، پیکربندی کنید.

سپس به موضوع عطر/A/B منتشر کنید و پیام منتشر شده را در ترمینال VPS خود مشاهده خواهید کرد
نتیجه
به طور خلاصه ، MQTT اکنون یک استاندارد در IoT است. کارگزار MQTT بی شماری و پیاده سازی های مشتری در زبان های مختلف مانند Go ، C ++ ، Python و حتی NodeJS وجود دارد. MQTT دارای جوامع بزرگ و بسیار فعال است و دارای آموزش های بسیار خوب و اسناد فنی است. این باعث می شود یک منحنی یادگیری ساده برای برنامه نویسان و معماران نرم افزار باشد. تعداد معدودی از مفاهیم مربوط به کارگزاران و مشتری های MQTT وجود دارد که می توانند در مدت زمان بسیار کوتاهی آموختند.
پلتفرم معاملاتی فارکس...
ما را در سایت پلتفرم معاملاتی فارکس دنبال می کنید
برچسب :
نویسنده : مرجان محتشم
بازدید : <-PostHit->
تاريخ : پنجشنبه
8 تير
1402 ساعت: 21:15