MQTT là gì? Giao thức truyền thông điệp theo mô hình cung cấp/ Thuê bao
Thời đại IoT đặt ra yêu cầu phải có giao thức kết nối mới nhằm đảm bảo hỗ trợ đầy đủ các thiết bị vật lý thực tế. Để giải quyết vấn đề này, MQTT ra đời và dần trở nên phổ biến. Trong bài viết dưới đây, hãy cùng Bizfly Cloud tìm hiểu cụ thể MQTT là gì và một số vấn đề liên quan đến giao thức này nhé!
MQTT là gì?
MQTT là một giao thức truyền thông điệp theo mô hình Cung cấp/Thuê bao (Publish/Subscribe). Giao thức này được sử dụng cho các thiết bị IoT với băng thông thấp, khả năng sử dụng được trong mạng lưới không ổn định và độ tin cậy cao. MQTT dựa trên một máy chủ môi giới (Broker) khá ít xử lý và được thiết kế có tính mở, đơn giản, dễ cài đặt và không đặc trưng cho ứng dụng cụ thể nào.
MQTT là lựa chọn phù hợp trong các môi trường như:
- Chi phí mạng viễn thông đắt đỏ/ băng thông thấp, thiếu tin cậy.
- Thiết bị nhúng bị giới hạn về bộ nhớ và tốc độ tài nguyên.
- Các ứng dụng M2M (Machine to Machine) do giao thức MQTT sử dụng băng thông thấp trong môi trường có độ trễ cao.
- Facebook Messenger để truyền thông điệp.
Lịch sử hình thành của MQTT
MQTT được phát triển bởi Andy Stanford - Clark và Arlen Nipper vào cuối năm 1999. Nhiệm vụ của họ là tạo ra một giao thức sao cho sự hao phí băng thông và năng lượng là thấp nhất. Từ đó kết nối đến đường ống dẫn dầu thông qua sự kết nối giữa các vệ tinh.
Đến năm 2011, Eurotech và IBM đã trao lại MQTT cho Paho- một dự án của Eclipse. Năm 2013, MQTT được trình lên Organization for the Advancement of Structured Information Standards (OASIS). MQTT được chuẩn hoá và dần trở thành một trong những giao thức được sử dụng phổ biến nhất hiện nay.
Tính năng nổi bật MQTT
MQTT có một số tính năng, đặc điểm nổi bật như:
- Cung cấp khả năng truyền tin phân tán một chiều, tách biệt với phần ứng dụng nhờ dạng truyền thông điệp theo mô hình Pub/Sub.
- Truyền thông điệp ngay lập tức mà không quan tâm tới nội dung được truyền đi.
- Sử dụng giao thức nền là TCP/IP.
- Tồn tại ba mức độ tin cậy cho việc truyền dữ liệu lần lượt là:
- QoS 0: Ở mức độ này, Broker/Client sẽ gửi dữ liệu đúng một lần, quá trình gửi được xác nhận duy nhất bởi giao thức TCP/IP.
- QoS 1: Broker/Client sẽ gửi dữ liệu với ít nhất một lần xác nhận từ phía bên kia (tức là có thể nhiều hơn một lần xác nhận rằng đã nhận được dữ liệu).
- QoS 2: Broker/Client đảm bảo khi gửi dữ liệu thì phía nhận chỉ nhận được duy nhất một lần và quá trình này phải trải qua đủ 4 bước bắt tay.
- Để giảm tải cho đường truyền, phần bao bọc dữ liệu truyền nhỏ và được giảm tải đến mức tối đa.
Thành phần của MQTT
Thành phần chính của một giao thức MQTT là Client (Publisher/Subscriber), Server (Broker), Sessions, Subscriptions và Topics. Trong đó:
- MQTT Client sẽ subcribe từ một hay nhiều topics với mục đích gửi và nhận thông điệp từ các topic tương ứng.
- MQTT Server: Broker sẽ nhận các thông tin subcribe từ Client hay các thông điệp và dựa vào Subscriptions từ Client để chuyển chúng đến các subscriber tương ứng.
- Topic là một hàng đợi các thông điệp và có sẵn khuôn mẫu dành cho Subscriber hoặc Publisher, cho phép Client trao đổi thông tin với các ngữ nghĩa đã được định nghĩa sẵn. Một ví dụ đơn giản mà bạn có thể thấy rõ về Topic của MQTT là dữ liệu cảm biến nhiệt độ của tòa nhà.
- Session được định nghĩa là một kết nối từ Client tới Server, toàn bộ giao tiếp của Client với Server đều là một phần của Session.
- Subscription là kết nối từ Client tới Topic, Client có thể nhận hoặc gửi thông điệp với Topic đó.
Cách thức hoạt động của MQTT
Trước hết, ta cần hiểu được các tính chất và những đặc điểm riêng trong cơ chế hoạt động của MQTT:
- Về tính chất:
- Space Decoupling là không gian tách biệt
- Time Decoupling là thời gian tách biệt
- Synchronization Decoupling là sự đồng bộ riêng rẽ.
- Về đặc điểm riêng:
- MQTT Subject-based: MQTT sử dụng cơ chế lọc thông điệp dựa vào tiêu đề.
- MQTT Quality of Services-QoS: Đây được gọi là tầng chất lượng dịch vụ, hỗ trợ nhận biết các message có được truyền thành công hay không một cách dễ dàng.
Về cơ chế hoạt động, MQTT hoạt động theo cơ chế Client/ Server nơi mà mỗi cảm biến là một Client và được kết nối tới máy chủ. Nó có thể như một máy chủ môi giới và thông qua giao thức TCP (Transmission Control Protocol). Broker chịu trách nhiệm điều phối toàn bộ thông điệp giữa phía gửi đến đúng phía nhận.
MQTT là một giao thức định hướng bản tin mà trong đó, mỗi bản tin mà một đoạn rời rạc của tín hiệu và broker không thể nhìn thấy. Các bản tin được publish một địa chỉ tương ứng và có thể hiểu như một kênh (topic). Client đăng ký vào một hoặc nhiều kênh để nhận và gửi dữ liệu. Mỗi Client sẽ nhận được dữ liệu khi bất kỳ trạm nào khác gửi dữ liệu vào kênh đã đăng ký (bản tin được gửi tới một kênh nào đó gọi là publish).
Ưu, nhược điểm nổi bật của MQTT
Để hiểu rõ hơn về MQTT, hãy cùng tìm hiểu rõ hơn một số ưu điểm và nhược điểm của MQTT.
1. Ưu điểm
Kiến trúc gọn nhẹ của giao thức MQTT giúp việc truyền dữ liệu trơn tru với băng thông thấp và giảm tải cho CPU và RAM. MQTT có nhiều lợi thế hơn so với các giao thức khác như:
- Triển khai giao thức một cách nhanh chóng và dễ dàng, ngay cả trên các thiết bị có CPU năng lượng thấp và RAM thấp
- MQTT là một giao thức gọn nhẹ, mức tiêu thụ điện năng ít hơn
- Phân phối dữ liệu hiệu quả
- MQTT sử dụng gói có kích thước thấp và do đó có thể được sử dụng cho các ứng dụng băng thông thấp.
- MQTT có thể mở rộng do mô hình Publish/Subscribe
2. Nhược điểm
Không thể phủ nhận rằng giao thức MQTT có rất nhiều ưu điểm hữu ích, đặc biệt là khi kết hợp với các giao thức HTTP. Tuy nhiên, MQTT không phải là giải pháp hoàn hảo bởi có một vài nhược điểm:
- MQTT sử dụng giao thức TCP đòi hỏi nhiều sức mạnh xử lý hơn và nhiều bộ nhớ hơn
- So với CoAP, MQTT có chu kỳ truyền chậm hơn
- Không hỗ trợ các tính năng nâng cao như flow control
- Trong giao thức MQTT, máy khách phải hỗ trợ TCP/IP
- MQTT không thể hỗ trợ phát trực tuyến video
- Không thân thiện với nhà phát triển
- Thiếu mã hoá bảo mật. Thay vào đó, MQTT sử dụng TLS/SSL
- Việc tạo ra một mạng MQTT có thể mở rộng toàn cầu là rất khó khăn.
Ứng dụng thực tế của MQTT là gì?
MQTT là một trong những giao thức được sử dụng phổ biến nhất trong cơ sở hạ tầng IoT và IIoT (Industrial internet of things) như nhà máy xử lý, nhà thông minh, sức khỏe điện tử, v.v. Một số nền tảng hỗ trợ MQTT phổ biến được thiết kế cho IIoT như ThingWorx, IBM Watson IoT Platform, AWS IoT, Fogwing, Braincube. Các nền tảng này cung cấp MQTT extension cho phép kết nối cho cơ sở hạ tầng IoT và IIoT.
Một số ứng dụng thực tế của MQTT như:
- Facebook Messenger
Để giải quyết các vấn đề về thời lượng pin hạn chế và băng thông internet liên quan đến việc sử dụng điện thoại thông minh, Facebook đã triển khai MQTT một cách sáng tạo cho các cuộc trò chuyện (chat) trên Messenger và Instagram hoạt động hiệu quả ngay cả với các điều kiện kết nối internet khác nhau trên toàn thế giới.
Các cuộc trò chuyện được liên kết với một topic MQTT và tất cả các thành viên của một nhóm trò chuyện đều subscribe và publish topic đó. Một “Topic Director” hướng các gói MQTT chat đến các broker khác nhau để chuyển tiếp chúng đến những subscriber (đích) thích hợp.
- Các thiết bị đeo được (Wearables)
Giao thức MQTT thường được sử dụng để kích hoạt các thiết bị IoT đeo được có công suất thấp. Do bản chất gọn nhẹ của giao thức MQTT, nó phù hợp với các thiết bị đeo được do dung lượng bộ nhớ và băng thông hạn chế.
Dữ liệu được publish khi nó được đẩy từ thiết bị đeo đến máy chủ và các thiết bị nhận subscribe dữ liệu được đẩy đến máy chủ. Do kích thước của dữ liệu được gửi qua MQTT theo thiết kế nhỏ, các tin nhắn có thể được gửi nhanh chóng.
- Tự động hóa trong nhà thông minh (Home Automation)
MQTT được sử dụng làm giao thức truyền thông cơ bản trong hầu hết các hệ thống tự động hóa nhà thông minh. Ví dụ, hệ thống nhà thông minh do Mark Zuckerberg tự xây dựng – Jarvis (được mô phỏng theo Jarvis trong Iron Man) cho phép anh ta điều khiển nhà bằng giọng nói hoặc tin nhắn từ iPhone của mình. Thiết bị có thể giao tiếp với MQTT để cho phép nó phản hồi các lệnh bằng cách publish các MQTT message cho một broker - mở ra khả năng tương tác với bất kỳ thiết bị nào hỗ trợ giao thức MQTT.
- Nông nghiệp thông minh
Việc sử dụng công nghệ thông minh trong lĩnh vực nông nghiệp có khả năng tăng năng suất tổng thể và nâng cao hiệu quả của hệ thống canh tác. Bằng cách cung cấp giám sát và báo cáo liên tục về thời tiết và điều kiện đất đai như độ pH của đất, nhiệt độ và độ ẩm của đất, nhiệt độ không khí, độ ẩm và ánh sáng mặt trời sẵn có. Giao thức MQTT và cảm biến IoT cho nông nghiệp cho phép thu thập dữ liệu liền mạch và khả dụng cho các máy chủ đám mây (broker) ngay cả đối với kết nối Internet bị hạn chế.
- Cảm biến từ xa
Các bộ cảm biến được sử dụng trong việc giám sát môi trường từ xa thường là các thiết bị có công suất thấp hoạt động ở những vị trí có kết nối internet kém. MQTT là một giao thức phù hợp để giao tiếp với các thiết bị như vậy vì khả năng hỗ trợ các cảm biến IoT với các nhu cầu truyền dữ liệu có mức độ ưu tiên thấp hơn.
Các ứng dụng mà MQTT mang lại
MQTT đã được ứng dụng trong các dự án thực tế, cụ thể:
- Facebook Messenger cho phép trò chuyện trực tuyến với nhiều khía cạnh được sử dụng.
- Amazon IoT dựa trên MQTT đã được Amazon Web Services công bố vào năm 2015.
- Các tổ chức không gian địa lý Sensor Things API đã công bố đặc điểm kỹ thuật tiêu chuẩn có một phần mở rộng MQTT. Các tiêu chuẩn lúc này như một giao thức thông báo các bổ sung ràng buộc và được chứng minh trong một thí điểm IoT của Bộ An ninh Nội địa Mỹ.
- Cloud Service cho thí nghiệm IoT hay còn được gọi là Adafruit IO, hoàn toàn miễn phí và được Adafruit đưa ra vào năm 2015.
- MQTT được Microsoft Azure IoT Hub sử dụng làm giao thức chính cho các tin nhắn từ xa.
- XIM, Inc ra mắt ứng dụng khách MQTT Buddy vào năm 2017 dành cho Android và iOS. Người dùng có thể tùy chọn ngôn ngữ có sẵn là Anh, Nga, Trung Quốc.
- Node-RED hỗ trợ các nút MQTT từ phiên bản 0.14 với nhiệm vụ phát minh để định dạng cấu hình đúng các kết nối TLS.
Như vậy, bài viết đã giới thiệu cho bạn MQTT là gì, cách thức hoạt động cũng như các ứng dụng của nó trong thực tế. MQTT đã thực sự trở thành giao thức phổ biến kể từ khi M2M ra đời và thời đại IoT phát triển. Nếu bạn đang tìm kiếm một giao thức gọn nhẹ được thiết kế nhằm kết nối các thiết bị bị hạn chế nguồn trên các mạng băng thông thấp, MQTT sẽ là sự lựa chọn hàng đầu dành cho bạn.