מה זה MQTT?
MQTT או Message Queuing Telemetry Transport הוא פרוטוקול הודעות קל משקל המיועד לתקשורת יעילה
בין התקנים ברשתות מוגבלות, כגון אלה עם רוחב פס מוגבל, צריכת חשמל נמוכה או חיבורים לא אמינים.
MQTT פותח בסוף שנות ה-90 על ידי ד”ר אנדי סטנפורד-קלארק מ-IBM וארלן ניפר מ-Cirrus Link Solutions.
MQTT עוקב אחר דפוס הודעות פרסום-הרשמה, שבו מכשירים או יישומים יכולים לפעול כמפרסמים, מנויים או שניהם.
בעלי אתרים שולחים הודעות, המכונה “פרסום” הודעה, לברוקר מרכזי, בעוד שמנויים מקבלים הודעות על ידי הרשמה לנושאים
או ערוצים ספציפיים במתווך.
המתווך משמש כמתווך שמקבל הודעות מבעלי אתרים ומפיץ אותן למנויים המעוניינים.
להלן כמה תכונות עיקריות של MQTT:
קל משקל: MQTT תוכנן להיות פשוט ויעיל, מה שהופך אותו מתאים למכשירים מוגבלי משאבים כמו חיישנים,
מערכות משובצות ומכשירים ניידים.
מודל Pub/Sub: מודל הפרסום-מנוי מאפשר תקשורת גמישה וניתנת להרחבה, כאשר מפרסמים ומנויים
אינם צריכים לדעת זה את קיומו של זה.
הוא מאפשר ארכיטקטורת מסרים מנותקת וא-סינכרונית.
איכות השירות (QoS): MQTT מספקת רמות שונות של QoS כדי להבטיח אמינות מסירת הודעות.
ישנן שלוש רמות: QoS 0 (לכל היותר פעם אחת), QoS 1 (לפחות פעם אחת) ו-QoS 2 (פעם אחת בדיוק).
הודעות שמורות: מתווכים של MQTT יכולים לאחסן את ההודעה האחרונה שפורסמה בנושא ספציפי.
כאשר מנוי חדש מצטרף, הוא יכול לקבל את ההודעה האחרונה שנשמרה עבור אותו נושא.
תקורה קטנה: ל-MQTT יש תקורה קטנה של פרוטוקול, מה שהופך אותו ליעיל לתקשורת ברוחב פס נמוך או רשתות לא אמינות.
חיבורים מתמשכים: MQTT תומך בחיבורים מתמשכים, מה שמאפשר למכשירים לשמור על קשר ארוך חיים עם המתווך,
מה שמפחית את התקורה של יצירת קשרים עבור כל הודעה.
MQTT נמצא בשימוש נרחב ביישומי IoT שונים, שבהם הוא מאפשר תקשורת יעילה ואמינה בין מכשירים,
רשתות חיישנים ומערכות עורפיות.
זה הפך לסטנדרט דה פקטו עבור פריסות IoT רבות בשל הפשטות, המדרגיות ודרישות המשאבים הנמוכות שלו.
איך עובד MQTT?
MQTT עובד על בסיס ארכיטקטורת שרת-לקוח ועוקב אחר דפוס הודעות פרסום-הרשמה.
להלן סקירה כללית של אופן הפעולה של MQTT:
חיבור לקוח: לקוחות MQTT, שיכולים להיות מכשירים או יישומים, יוצרים חיבור עם מתווך MQTT.
החיבור יכול להיות מבוסס TCP/IP או על גבי פרוטוקולי תחבורה אחרים, כגון WebSockets.
מפרסם: לקוח הפועל כמפרסם שולח הודעה למתווך בנושא מסוים. ההודעה יכולה להיות כל מטען נתונים שרירותי,
כגון קריאות חיישנים, עדכוני סטטוס או פקודות.
ניתוב מבוסס-נושא: MQTT משתמש בנושאים כדי לסווג הודעות.
הנושאים הינם היררכיים בטבעם, בנויים כסדרה של רמות המופרדות באמצעות קווים לוכסניים (“/”). לדוגמה,
“חיישנים/טמפרטורה/חדר שינה” הוא נושא המייצג נתוני חיישני טמפרטורה בחדר השינה.
מפרסמים בוחרים את הנושא עבור כל הודעה שהם מפרסמים.
מנוי: לקוחות MQTT יכולים להירשם לנושא עניין אחד או יותר.
על ידי הרשמה לנושא, לקוח מביע את התעניינותו בקבלת הודעות המתפרסמות בנושא זה.
מנויים יכולים להיות ספציפיים, כמו הרשמה ל”חיישנים/טמפרטורה/חדר שינה”, או כלליים יותר,
כמו מנוי ל”חיישנים/טמפרטורה/+” (תו כללי) כדי לקבל הודעות מכל חיישני הטמפרטורה.
ניתוב הודעות: כאשר מפרסם שולח הודעה למתווך, המתווך מקבל את ההודעה ובוחן את נושאה.
לאחר מכן, המתווך מפיץ את ההודעה לכל הלקוחות הרשומים שהביעו עניין בנושא המסוים הזה.
איכות השירות (QoS): MQTT מספקת רמות שונות של QoS כדי להבטיח אמינות מסירת הודעות בהתאם לצרכי האפליקציה.
בעלי אתרים מציינים את רמת ה-QoS הרצויה בעת פרסום הודעה, ומנויים יכולים לבקש רמת QoS ספציפית כאשר הם נרשמים לנושא.
אישור ושידור חוזר: בהתאם לרמת ה-QoS, פרוטוקול MQTT מבטיח מסירת הודעות.
לדוגמה, עם QoS level 1 (לפחות פעם אחת), הברוקר מאשר את קבלת ההודעה למפרסם, ובמידת הצורך,
משדר מחדש את ההודעה כדי להבטיח שהיא מגיעה למנוי.
ניתוק: לקוחות MQTT יכולים להתנתק מהמתווך כאשר הם אינם צריכים עוד לתקשר. לקוחות יכולים לבחור ליצור קשרים ארוכים
או קשרים קצרי חיים על סמך הדרישות שלהם.
על ידי ביצוע מודל פרסום-הרשמה זה, MQTT מאפשר תקשורת יעילה, ניתנת להרחבה וא-סינכרונית בין מכשירים ויישומים.
הוא מאפשר העברת הודעות מנותקות וגמישות, כאשר מפרסמים ומנויים אינם צריכים להיות מודעים לקיומו של זה,
מה שהופך אותו לאידיאלי עבור מערכות מבוזרות, רשתות חיישנים ופריסות של האינטרנט של הדברים (IoT).
סוגי MQTT
MQTT מגדיר שלושה סוגים שונים של לקוחות בהתבסס על הפונקציונליות והתפקיד שלהם במערכת ההודעות:
מפרסם: מפרסם הוא לקוח MQTT שיוצר ושולח הודעות למתווך.
בעלי אתרים אחראים לבחירת הנושא המתאים ולפרסום הודעות בנושא זה.
הם יכולים להיות מכשירים, יישומים או שירותים שמייצרים נתונים או אירועים לשיתוף עם לקוחות אחרים.
מנוי: מנוי הוא לקוח MQTT שמקבל הודעות מהמתווך.
מנויים מביעים את התעניינותם בנושאים ספציפיים על ידי הרשמה אליהם.
כאשר מתפרסמת הודעה בנושא מנוי, המתווך מעביר את ההודעה לכל המנויים המעוניינים בכך.
מנויים יכולים להיות מכשירים, אפליקציות או שירותים שצורכים נתונים או אירועים ממערכת MQTT.
ברוקר: הברוקר הוא המרכז המרכזי של מערכת MQTT.
הוא משמש כמתווך בין מפרסמים למנויים.
ברוקרים מקבלים הודעות שפורסמו על ידי מפרסמים ומפיצים אותן למנויים הרלוונטיים על סמך מנויי נושא.
המתווך אחראי על ניהול קשרי לקוחות, טיפול בניתוב הודעות והבטחת מסירה אמינה בהתאם לרמת ה-QoS שנבחרה.
בנוסף לסוגי לקוחות אלה, MQTT מגדירה שלוש רמות שונות של איכות שירות (QoS) כדי להבטיח אמינות מסירת הודעות:
QoS 0 (לכל היותר פעם אחת): ידוע גם בשם “שגר ושכח”, רמת QoS זו מספקת את הערבות הנמוכה ביותר להעברת הודעות.
הודעות נשלחות פעם אחת ללא כל אישור או שידור חוזר.
אין ערובה שההודעה תגיע למנויים, ולא נעשה כל מאמץ לוודא שכן. רמה זו מתאימה לנתונים לא קריטיים שבהם אובדן הודעה מקובל.
QoS 1 (לפחות פעם אחת): רמת QoS זו מבטיחה שהודעות מועברות לפחות פעם אחת למנויים.
מפרסמים מקבלים אישור (PUBACK) מהברוקר עם מסירה מוצלחת.
אם לא מתקבלת אישור, המוציא לאור ישדר מחדש את ההודעה.
רמה זו מציגה אפשרויות כפולות של הודעות עקב שידורים חוזרים.
QoS 2 (פעם אחת בדיוק): רמת QoS זו מספקת את הערבות הגבוהה ביותר להעברת הודעות.
זה מבטיח שכל הודעה תועבר בדיוק פעם אחת למנויים.
מפרסמים והברוקר עוסקים בתהליך לחיצת יד הכולל אישורים ושידורים חוזרים כדי להשיג רמת מהימנות זו.
QoS 2 הוא האמין ביותר אך מציג תקורה נוספת ברשת.
על ידי מתן רמות QoS שונות, MQTT מאפשר ליישומים לבחור את רמת האמינות המתאימה בהתבסס על הדרישות הספציפיות שלהם,
תוך איזון בין ערבויות מסירת הודעות לבין שיקולי תקורה ברשת ושיקולי חביון.
שימושים של MQTT
MQTT נמצא בשימוש נרחב ביישומים ותעשיות שונות בהן נדרשת העברת הודעות יעילה ואמינה,
במיוחד בתרחישים הכוללים רשתות מוגבלות, התקני IoT וחילופי נתונים בזמן אמת.
להלן כמה מקרי שימוש נפוצים עבור MQTT:
האינטרנט של הדברים (IoT): MQTT היא בחירה פופולרית עבור פריסות IoT בשל אופיו קל משקל ותקשורת יעילה.
היא מאפשרת למכשירים ולחיישנים לפרסם נתונים למתווך מרכזי ומאפשרת למכשירים, אפליקציות
או מערכות עורפיות אחרות להירשם ולצרוך נתונים אלה.
התקורה הנמוכה של MQTT והתמיכה ברוחב פס נמוך ורשתות לא אמינות הופכות אותו לאידיאלי
לחיבור וניהול של מספר רב של מכשירי IoT.
רשתות טלמטריה וחיישנים: MQTT משמש לעתים קרובות עבור יישומי טלמטריה, שבהם יש להעביר ולצרוך נתונים בזמן אמת מחיישנים,
מונים או מכשירי ניטור.
הוא מאפשר איסוף, הפצה וניתוח יעיל של נתוני חיישנים בתחומים כמו ניטור סביבתי, אוטומציה תעשייתית, חקלאות וערים חכמות.
אוטומציה ביתית ומבנים חכמים: MQTT מוטמעת במערכות אוטומציה ביתיות ופתרונות בניה חכמה כדי לאפשר תקשורת
בין מכשירים ומערכות בקרה שונות.
זה מאפשר למכשירים שונים, כגון תרמוסטטים, מערכות תאורה, מערכות אבטחה ומכשירי חשמל, לפרסם ולהירשם לנושאים רלוונטיים,
מה שמאפשר אינטגרציה ותיאום חלקים.
בנוסף, מוטמעת גם כחלק ממערכת בקרת מבנים לניהול מגדלי מגורים.
אוטומציה תעשייתית ו-SCADA: פרוטוקול MQTT מוטמעת ביישומי אוטומציה תעשייתית.
בנוסף, הפרוטוקולמוטמע גם במערכות בקרת פיקוח ורכישת נתונים (SCADA).
זה מאפשר תקשורת בזמן אמת בין מכשירים, מערכות בקרה וממשקי אדם-מכונה (HMI) לניטור ובקרה של תהליכים תעשייתיים.
האופי הקל משקל של MQTT והתמיכה בחיבורים לסירוגין הופכים אותו למתאים לניטור ובקרה מרחוק של מערכות תעשייתיות מבוזרות.
אפליקציות מובייל: MQTT משמש בפיתוח אפליקציות מובייל הדורשות תקשורת יעילה עם מערכות עורפיות או חילופי נתונים בזמן אמת.
זה מאפשר למכשירים ניידים להירשם לנושאים רלוונטיים ולקבל עדכונים, התראות או נתונים בזמן אמת מהשרת.
זה שימושי עבור יישומים כמו הודעות מיידיות, שירותים מבוססי מיקום, מעקב בזמן אמת וניטור מרחוק.
יישומי הודעות וצ’אט: MQTT יכול לשמש כפרוטוקול הודעות עבור יישומי צ’אט ופלטפורמות הודעות מיידיות.
הוא מספק מנגנון תקשורת ניתן להרחבה וא-סינכרוני בין לקוחות, המאפשר משלוח הודעות בזמן אמת וסנכרון צ’אט על פני מספר מכשירים.
ניטור מרחוק ומעקב אחר נכסים: MQTT מועסק במערכות ניטור ומעקב אחר נכסים מרחוק.
הוא מאפשר העברת נתוני מיקום בזמן אמת, עדכוני סטטוס והתראות מנכסים כגון כלי רכב, מכולות או ציוד לוגיסטי.
רוחב הפס ודרישות ההספק הנמוכות של MQTT הופכות אותו למתאים לשימוש בהתקני מעקב מוגבלים במשאבים.
אלו הן רק כמה דוגמאות לאופן השימוש ב-MQTT בתחומים שונים.
הפשטות, היעילות והתמיכה שלו ברשתות מוגבלות הופכות אותו לפרוטוקול הודעות רב-תכליתי שניתן להתאים למגוון רחב
של יישומים שבהם נדרשת תקשורת קלת משקל, אמינה וניתנת להרחבה.
שאלות ותשובות בנושא MQTT
ש: האם MQTT הוא תקן פתוח?
ת: כן, MQTT הוא תקן פתוח והפך לזמין לציבור.
מפרט פרוטוקול MQTT נשמר על ידי הוועדה הטכנית של OASIS MQTT, מה שמבטיח שהוא יישאר פרוטוקול
הודעות פתוח וניתן לפעולה הדדית עבור מגוון רחב של יישומים.
ש: אילו שפות תכנות ופלטפורמות תומכות ב-MQTT?
ת: ל-MQTT יש תמיכה נרחבת בשפה ובפלטפורמה.
ישנן ספריות לקוח MQTT זמינות עבור שפות תכנות שונות כגון Python, Java, JavaScript, C/C++ ועוד.
ניתן להשתמש ב-MQTT בפלטפורמות שונות כולל מערכות משובצות, מכשירים ניידים, יישומי שולחן עבודה ושירותים מבוססי ענן.
ספריות לקוח ו-SDK של MQTT זמינות בדרך כלל כדי להקל על שילוב MQTT בסביבות שונות.
ש: האם ניתן להשתמש ב-MQTT במודל תקשורת עמית לעמית (P2P)?
ת: MQTT מיועד בעיקר למודל הודעות פרסום-הרשמה שבו התקשורת מתרחשת באמצעות מתווך מרכזי.
בעוד ש-MQTT עצמה אינה תומכת באופן טבעי בתקשורת P2P, ניתן ליישם תרחישים דמויי P2P באמצעות MQTT
על ידי כך שלקוחות יפרסמו ויירשמו לנושאים זה לזה ישירות.
עם זאת, גישה זו דורשת היגיון נוסף ותיאום בין לקוחות להקמת ערוצי תקשורת ישירים.
ש: האם יש הגבלה מקסימלית על מספר הנושאים ב-MQTT?
ת: MQTT אינו מטיל הגבלה מוגדרת מראש על מספר הנושאים.
מספר הנושאים שניתן להשתמש בהם במערכת MQTT תלוי ביכולות ובמשאבים של ברוקר MQTT
ובתשתית הכוללת התומכת בפריסה.
עם זאת, חשוב לעצב את ההיררכיה והמבנה של הנושא בצורה מדרגית ומאורגנת לניתוב וניהול הודעות יעילים.
ש: האם MQTT יכול להתמודד עם תקשורת בזמן אמת?
ת: MQTT יכול להקל על תקשורת בזמן אמת, אך רמת היכולת בזמן אמת תלויה בגורמים שונים, לרבות זמן השהיה ברשת,
רמת QoS ויכולות העיבוד של המכשירים והמערכות המעורבות.
האופי הקל משקל של MQTT והתמיכה ברוחב פס נמוך הופכים אותו למתאים לתקשורת כמעט בזמן אמת בתרחישים רבים,
אך ייתכן שהוא לא יתאים ליישומים רגישים לזמן במיוחד עם דרישות השהייה קפדניות.
ש: האם MQTT הוא פרוטוקול סטנדרטי?
ת: כן, MQTT הוא פרוטוקול סטנדרטי.
זהו תקן ISO (ISO/IEC PRF 20922) והוא אומץ ונתמך באופן נרחב על ידי קהילה גדולה של מפתחים וארגונים.
מפרט פרוטוקול MQTT זמין לציבור, ומאפשר יכולת פעולה הדדית בין יישומים שונים ומבטיח התנהגות עקבית בכל פריסות MQTT.
ש: האם ניתן להשתמש ב-MQTT עבור יישומי שלט רחוק?
ת: כן, ניתן להשתמש ב-MQTT עבור יישומי שלט רחוק.
על ידי מינוף מודל הפרסום-הרשמה, MQTT מאפשרת למכשירים או ליישומים לפרסם פקודות בקרה לנושאים ספציפיים,
שניתן להירשם אליהם על ידי מכשירים או מערכות האחראיות לביצוע הפקודות הללו.
הדבר מאפשר שליטה מרחוק ותיאום של מכשירים או מערכות שונות בתרחישים כמו אוטומציה ביתית,
בקרה תעשייתית ותשתיות חכמות.