

چرا MQTT یکی از بهترین پروتکل های شبکه برای اینترنت اشیا است ؟؟؟
برای دستگاه های اینترنت اشیا (IoT)، اتصال به اینترنت نوعی الزام است. اتصال به اینترنت به دستگاه ها اجازه می دهد تا با یکدیگر و با سرویس های پشتیبان کار کنند. پروتکل شبکه زیربنایی اینترنت TCP/IP است. MQTT (انتقال تله متری صف پیام) که در بالای پشته TCP/IP ساخته شده است، به استاندارد ارتباطات IoT تبدیل شده است. MQTT همچنین می تواند بر روی SSL/TLS که یک پروتکل امن ساخته شده بر روی TCP/IP است، اجرا شود تا اطمینان حاصل شود که تمام ارتباطات داده بین دستگاه ها رمزگذاری شده و ایمن هستند.
MQTT در ابتدا توسط IBM در اواخر دهه 1990 اختراع و توسعه یافت. کاربرد اصلی آن پیوند سنسورهای خطوط لوله نفت با ماهواره ها بود. همانطور که از نام آن پیداست، یک پروتکل پیام رسانی است که از ارتباط ناهمزمان بین طرفین پشتیبانی می کند. یک پروتکل پیام رسانی ناهمزمان فرستنده و گیرنده پیام را هم در فضا و هم در زمان جدا می کند و از این رو در محیط های شبکه غیر قابل اعتماد مقیاس پذیر است.
علی رغم نامش، در واقع هیچ ارتباطی با صف های پیام رسانی ندارد و به جای آن از مدل انتشار و اشتراک استفاده می کند. در اواخر سال 2014، رسماً به یک استاندارد باز OASIS تبدیل شد و در زبان های برنامه نویسی محبوب با استفاده از چندین پیاده سازی منبع باز پشتیبانی می شود.
MQTT چیست و چرا باید از آن استفاده کنم؟
MQTT یک پروتکل شبکه سبک و انعطاف پذیر است که تعادل مناسبی را برای توسعه دهندگان اینترنت اشیا ایجاد می کند:
پروتکل سبک وزن به آن اجازه می دهد تا هم بر روی سخت افزار دستگاه با محدودیت شدید و هم در شبکه های با تاخیر بالا / پهنای باند محدود اجرا شود.
انعطافپذیری آن، پشتیبانی از سناریوهای کاربردی متنوع برای دستگاهها و خدمات اینترنت اشیا را ممکن میسازد.
برای درک اینکه چرا MQTT چنین مناسب برای توسعه دهندگان اینترنت اشیا است، اجازه دهید ابتدا بررسی کنیم که چرا سایر پروتکل های شبکه محبوب در اینترنت اشیا شکست خوردند.
اکثر توسعه دهندگان از قبل با خدمات وب HTTP آشنا هستند. بنابراین، چرا فقط دستگاه های اینترنت اشیا به خدمات وب متصل نمی شوند؟ دستگاه میتواند دادههای خود را به عنوان یک درخواست HTTP ارسال کند و بهروزرسانیهایی را از سیستم به عنوان پاسخ HTTP دریافت کند. این الگوی درخواست و پاسخ دارای محدودیتهای جدی است:
HTTP یک پروتکل همزمان است. مشتری منتظر می ماند تا سرور پاسخ دهد. این یک الزام برای مرورگرهای وب است، اما به قیمت مقیاس پذیری ضعیف است. در دنیای اینترنت اشیا، تعداد زیاد دستگاهها و به احتمال زیاد یک شبکه غیرقابل اعتماد/تأخیر بالا، ارتباطات همزمان را مشکلساز کرده است. یک پروتکل پیام رسانی ناهمزمان برای برنامه های IoT بسیار مناسب تر است. حسگرها میتوانند قرائتها را ارسال کنند و به شبکه اجازه دهند مسیر و زمان بهینه برای تحویل به دستگاهها و خدمات مقصد را مشخص کند.
HTTP یک طرفه است. مشتری باید اتصال را آغاز کند. در یک برنامه IoT، دستگاه ها یا حسگرها معمولا مشتری هستند، به این معنی که آنها نمی توانند به طور غیر فعال دستورات را از شبکه دریافت کنند.
HTTP یک پروتکل 1-1 است. مشتری درخواستی می دهد و سرور پاسخ می دهد. ارسال پیام به همه دستگاه های موجود در شبکه دشوار و پرهزینه است، که یک مورد رایج در برنامه های کاربردی اینترنت اشیا است.
HTTP یک پروتکل سنگین با سربرگ ها و قوانین بسیار است. برای شبکه های محدود مناسب نیست.
به دلایل فوق، اکثر سیستم های مقیاس پذیر با کارایی بالا از یک گذرگاه پیام رسانی ناهمزمان، به جای سرویس های وب، برای تبادل داده های داخلی استفاده می کنند. در واقع محبوب ترین پروتکل پیام رسانی مورد استفاده در سیستم های میان افزاری سازمانی AMQP (پروتکل صف پیام پیشرفته) نام دارد. با این حال، در محیط با عملکرد بالا، قدرت محاسباتی و تأخیر شبکه معمولاً نگران کننده نیستند. AMQP برای قابلیت اطمینان و قابلیت همکاری در برنامه های کاربردی سازمانی طراحی شده است. دارای مجموعه ای از ویژگی های غنی است، اما برای برنامه های IoT با محدودیت منابع مناسب نیست.
علاوه بر AMQP، پروتکل های پیام رسانی محبوب دیگری نیز وجود دارد. به عنوان مثال، XMPP (پروتکل پیام رسانی و حضور توسعه پذیر) یک پروتکل پیام رسانی فوری (IM) همتا به همتا است. ویژگیهایی که از موارد استفاده IM پشتیبانی میکنند، مانند حضور و پیوستهای رسانه، سنگین است. در مقایسه با MQTT، به منابع بسیار بیشتری هم در دستگاه و هم در شبکه نیاز دارد.
بنابراین، چه چیزی MQTT را اینقدر سبک و انعطاف پذیر می کند؟ یکی از ویژگی های کلیدی پروتکل MQTT مدل انتشار و اشتراک آن است. مانند همه پروتکلهای پیامرسان، ناشر و مصرفکننده داده را جدا میکند.
مدل انتشار و اشتراک
پروتکل MQTT دو نوع مدل را در شبکه تعریف می کند: یک واسطه پیام و تعدادی مشتری. کارگزار سروری است که تمام پیامها را از مشتریان دریافت میکند و سپس آن پیامها را به مشتریان مقصد مربوطه هدایت میکند. مشتری هر چیزی است که بتواند با کارگزار برای ارسال و دریافت پیام تعامل داشته باشد. یک مشتری می تواند یک حسگر اینترنت اشیا در این زمینه یا یک برنامه کاربردی در یک مرکز داده باشد که داده های اینترنت اشیا را پردازش می کند.
مشتری به کارگزار متصل می شود. این می تواند در هر پیام “موضوع” در کارگزار مشترک شود. این اتصال می تواند یک اتصال TCP/IP ساده یا یک اتصال TLS رمزگذاری شده برای پیام های حساس باشد.
مشتری با ارسال پیام و موضوع به کارگزار، پیام هایی را تحت یک موضوع منتشر می کند.
سپس کارگزار پیام را به همه مشتریانی که در آن موضوع مشترک هستند، ارسال می کند.
از آنجایی که پیامهای MQTT بر اساس موضوعات سازماندهی میشوند، توسعهدهنده برنامه انعطافپذیری دارد تا مشخص کند که مشتریان خاص فقط میتوانند با پیامهای خاصی تعامل داشته باشند. به عنوان مثال، حسگرها خوانش های خود را تحت عنوان “sensor_data” منتشر می کنند و در موضوع “config_change” مشترک می شوند. برنامههای پردازش داده که دادههای حسگر را در یک پایگاه داده پشتیبان ذخیره میکنند، در موضوع «sensor_data» مشترک میشوند. یک برنامه کنسول مدیریت میتواند دستورات سرپرست سیستم را برای تنظیم تنظیمات حسگرها، مانند حساسیت و فرکانس نمونه، دریافت کند و آن تغییرات را در موضوع “config_change” منتشر کند.
در عین حال، MQTT سبک وزن است. دارای یک هدر ساده برای تعیین نوع پیام، موضوع مبتنی بر متن و سپس یک بار باینری دلخواه است. برنامه می تواند از هر فرمت داده ای برای بار استفاده کند، مانند JSON، XML، باینری رمزگذاری شده، یا Base64، تا زمانی که مشتریان مقصد بتوانند بار را تجزیه کنند.
https://developer.ibm.com/articles/iot-mqtt-why-good-for-iot