MQTT (Message Queuing Telemetry Transport) เป็นโปรโทคอลที่ถูกออกแบบมาให้มีขนาดเล็กสำหรับการสื่อสารแบบ M2M ( Machine to Machine ) โดยถือกำเนิดจากวิศวกรจาก IBM และ Eurotech ในปี 1999 เพื่อนำไปใช้ในระบบ SCADA (Supervisory Control and Data Acquisition) สำหรับเชื่อมต่อท่อส่งน้ำมันบนเครือข่ายที่ไม่มีความเสถียรอย่างอินเตอร์เน็ตดาวเทียม ก่อนที่จะถูกบริจาคกลายเป็น Open Standard ในปี 2014 โดย OASIS
MQTT เป็นสถาปัตยกรรมแบบ Client/Server ซึ่งมี topology แบบ hub-and-spoke ค่ะ sensor ปลายทางจะทำหน้าที่เป็น client ซึ่งทำการสร้างเชื่อมต่อแบบ TCP ไปยัง Server ที่มีชื่อเรียกอีกชื่อว่า Broker ซึ่งมีหน้าที่เป็นเสมือนท่อส่งข้อมูลในการรับส่ง ‘Message’ ระหว่าง Client ที่เป็นได้ทั้ง Publisher และ Subscriber นั่นเอง
Client – หมายถึง Publisher หรือ Subscriber ที่เชื่อมต่อแบบรวมศูนย์ไปยัง Broker ซึ่งสามารถเชื่อมต่อได้ทั้งแบบpersistent ที่ทำการสร้าง session ค้างไว้เปิดตลอดเวลาเพื่อติดต่อกับ Broker ซึ่งตรงกันข้ามกับ client ที่เชื่อมต่อแบบ transient ซึ่ง Broker ไม่สามารถติดตามสถานะได้
Broker – เป็น software ที่ทำหน้ารับข้อความทั้งหมดที่ได้จาก Publisher แล้วจึงส่งต่อไปให้ Subscriber ตามแต่ Topic ที่ client ได้ทำการ subscribe ไว้
Topic – เป็นเหมือน address หรือ endpoint บน Broker ที่ client ทำการเชื่อมต่อเพื่อรับส่งข้อความระหว่างกันนั่นเองค่ะ
MQTT เป็นเหมือนสเปคของซอฟท์แวร์ที่มี API ไม่กี่ตัวในการเชื่อมต่อ client เข้าด้วยกัน จึงไม่สามารถใช้เป็นตัวกลางในการจัดเก็บและกระจายข้อมูล ( Store-and-Forward ) เหมือนเช่นในระบบ MoM (Message Oriented Middleware) ที่ทำหน้าที่ในการจัดการคิวในการกระจายข้อมูลในระบบที่ต้องการความน่าเชื่อถือและมีข้อความจำนวนมาก ดังนั้นจึงมีการนำ MQTT ไปประยุกต์ใช้ร่วมกับ MoM เช่น RabbitMQ หรือ Redis เพื่อให้สามารถใช้งานได้อย่างมีประสิทธิภาพในเชิงพาณิชย์ค่ะ
ข้อดีคือ MQTT คือเหมาะกับการนำไปใช้กับระบบคลาวด์ที่ให้บริการแบบรวมศูนย์เพราะถูกออกแบบให้เหมาะกับการกระจายข้อมูลแบบ many-to-many ตัวอย่างแอปพลิเคชันที่นำ MQTT ไปใช้อย่างแพร่หลายคงจะหนีไม่พ้น IoT Platform ที่มีอยู่ในท้องตลาดมากมาย แต่ก่อนหน้านี้ IoT Platform จะผุดขึ้นมาเป็นดอกเห็ด MQTT ก็ได้พิสูจน์ตัวเองโดยการถูกนำไปใช้กับ Facebook Messenger ด้วยเหตุนี้เองจึงทำให้เป็นตัวเลือกยอดนิยมในการให้บริการโซลูชันด้าน IoT บนคลาวด์ อีกทั้งยังเป็นมิตรกับ Network Engineer มากด้วยเนื่องจาก device สามารถทำการสร้าง session แลกเปลี่ยนข้อมูลกันได้โดยไม่ต้องทำการตั้งค่า NAT ให้วุ่นวาย อีกทั้งนักพัฒนาสามารถนำไปใช้กับร่วมกับ TLS/SSL เพื่อเพิ่มความปลอดภัยในการรับส่งข้อมูลได้ด้วยค่ะ
แม้ MQTT
จะถูกออกแบบมาให้มีขนาดเล็ก แต่ก็ยังมีข้อเสียสำหรับอุปกรณ์ที่มีทรัพยากรจำกัดเนื่องจาก client
ทุกตัวต้องรองรับ TCP
และทำการสร้างการเชื่อมต่อกับ broker
ไว้ตลอดเวลา ซึ่งอาจเกิดปัญหาได้หากอยู่ในเครือข่ายที่ไม่เสถียร (
เน็ตหลุดบ่อยเป็นต้น)