MQTT là gì ?
MQTT = Message Queue Telemetry Transport
Đây là một giao thức truyền thông điệp (message) theo mô hình publish/subscribe (publish – theo dõi), sử dụng băng thông thấp, độ tin cậy cao và có khả năng hoạt động trong điều kiện đường truyền không ổn định.
MQTT là một giao thức nhắn tin gọn nhẹ được thiết kế để liên lạc nhẹ giữa các thiết bị và hệ thống máy tính. MQTT được thiết kế ban đầu cho các mạng SCADA, các kịch bản sản xuất và băng thông thấp, MQTT đã trở nên phổ biến gần đây do sự phát triển của Internet-of-Things (IoT).
Kiến trúc mức cao (high-level) của MQTT gồm 2 phần chính là Broker và Clients.
Trong đó, broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối đến từ client. Nhiệm vụ chính của broker là nhận mesage từ publisher, xếp các message theo hàng đợi rồi chuyển chúng tới một địa chỉ cụ thể. Nhiệm vụ phụ của broker là nó có thể đảm nhận thêm một vài tính năng liên quan tới quá trình truyền thông như: bảo mật message, lưu trữ message, logs,…
Client thì được chia thành 2 nhóm là publisher và subscriber . Client là các software components hoạt động tại edge device nên chúng được thiết kế để có thể hoạt động một cách linh hoạt (lightweight). Client chỉ làm ít nhất một trong 2 việc là publish các message lên một topic cụ thể hoặc subscribe một topic nào đó để nhận message từ topic này.
MQTT Broker
MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC OS, Windows, LInux, Androids, iOS…
Các bạn có thể tưởng tượng broker giống như một sạp báo. Publisher là các tòa soạn báo. Tòa soạn in báo và chuyển cho sạp báo. Người đọc báo đến sạp báo, chọn tờ báo mình cần đọc (subscriber ).
Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các ứng dụng M2M (Machine to machine)
Ưu điểm của MQTT là gì?
Giao thức MQTT cho phép hệ thống SCADA của bạn truy cập dữ liệu IIoT. MQTT mang lại nhiều lợi ích mạnh mẽ cho quy trình của bạn:
- Chuyển thông tin hiệu quả hơn
- Tăng khả năng mở rộng
- Giảm đáng kể tiêu thụ băng thông mạng
- Giảm tốc độ cập nhật xuống giây
- Rất phù hợp cho điều khiển và do thám
- Tối đa hóa băng thông có sẵn
- Chi phí cực nhẹ
- Rất an toàn với bảo mật dựa trên sự cho phép
- Được sử dụng bởi ngành công nghiệp dầu khí, Amazon, Facebook và các doanh nghiệp lớn khác
- Tiết kiệm thời gian phát triển
- Giao thức publish/subscribe thu thập nhiều dữ liệu hơn với ít băng thông hơn so với giao thức cũ.
Publish, subscribe
Trong một hệ thống sử dụng giao thức MQTT, nhiều node trạm (gọi là mqtt client – gọi tắt là client) kết nối tới một MQTT server (gọi là broker). Mỗi client sẽ đăng ký một vài kênh (topic), ví dụ như “/client1/channel1”, “/client1/channel2”. Quá trình đăng ký này gọi là “subscribe”, giống như chúng ta đăng ký nhận tin trên một kênh Youtube vậy. 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à kênh đã đăng ký. Khi một client gởi dữ liệu tới kênh đó, gọi là “publish”.
Quality of service (QoS)
Mỗi kết nối tới broker được đánh giá chất lượng bởi thông số chất lượng dịch vụ (QoS) như sau:
Nhiều nhất một lần: Tin nhắn chỉ được gửi một lần. Client và broker không phải thực hiện thêm bước nào để xác nhận việc gửi có thành công hay không Cơ chế gởi và quên (tiếng Anh: fire and forget, tạm dịch: gởi và quên).
- Ít nhất một lần: Tin nhắn được người gửi thử lại nhiều lần cho đến khi nhận được xác nhận là đã gởi được. (tiếng Anh: acknowledged delivery, tạm dịch: Xác nhận đã gởi được)
- Chính xác một lần: Phía gởi và phía nhận thực hiện quá trình bắt tay hai cấp để đảm bảo chỉ nhận được một bản sao của tin nhắn (tiếng Anh: assured delivery, tạm dịch: đảm bảo gởi được).
Trường này không ảnh hưởng đến việc xử lý các quá trình truyền dữ liệu TCP bên dưới; nó chỉ được sử dụng giữa người gửi và người nhận MQTT.
Retain
Retain là một cờ (flag) được gắn cho một message của giao thức MQTT. Retain chỉ nhận giá trị 0 hoặc 1 (tương ứng 2 giá trị logic false hoặc true). Nếu retain = 1, broker sẽ lưu lại message cuối cùng của 1 topic kèm theo mức QoS tương ứng. Khi client bắt đầu subscribe topic có message được lưu lại đó, client ngay lập tức nhận được message.
MQTT Bridge
MQTT Bridge là một tính năng của MQTT Broker cho phép các MQTT Broker có thể kết nối và trao đổi dữ liệu với nhau. Để sử dụng tính năng này, ta cần tối thiểu 2 Broker, trong đó, một Broker bất kỳ sẽ được cấu hình thành Bridge. Khi cấu hình MQTT bridge, ta cần lưu ý tới các thông số sau:
- address: địa chỉ của broker cần kết nối
- bridge_protocol_version: phiên bản của giao thức MQTT đang sử dụng chung cho 2 broker
- topic: phần này định nghĩa 3 thong số: tên topic được trao đổi giữa 2 broker, chiều trao đổi (1 chiều hay 2 chiều) và topic mapping giữa 2 broker
Bảo mật
MQTT được thiết kế một cách nhẹ và linh hoạt nhất có thể. Do đó nó chỉ có 1 lớp bảo mật ở tầng ứng dụng: bảo mật bằng xác thực (xác thực các client được quyền truy cập tới broker).
Tuy vậy, MQTT vãn có thể được cài đặt kết hợp với các giải pháp bảo mật đa tầng khác như kết hợp với VPN ở tầng mạng hoặc SSL/TLS ở tầng transport.
MQTT được thiết kế nhằm phục vụ truyền thông machine-to-machine nhưng thực tế chứng minh nó lại linh hoạt hơn mong đợi. Nó hoàn toàn có thể áp dụng cho các kịch bản truyền thông khác như: machine-to-cloud, cloud-to-machine, app-to-app. Chỉ cần có một broker phù hợp và MQTT client được cài đặt đúng cách, các thiết bị xây dựng trên nhiều nền tảng khác nhau có thể giao tiếp với nhau một cách dễ dàng.
Giao thức MQTT ra đời năm 1999 và tính đến thời điểm hiện tại, MQTT phiên bản 3.1.1 được công nhận chuẩn OASIS.
Ứng dụng của MQTT
Có một số dự án thực hiện MQTT. Ví dụ là:
- Facebook Messenger . Facebook đã sử dụng các khía cạnh của MQTT trong Facebook Messenger để trò chuyện trực tuyến . Tuy nhiên, không rõ MQTT được sử dụng bao nhiêu hoặc để làm gì.
- IECC Scalable , DeltaRail phiên bản mới nhất của hệ thống kiểm soát hiệu IECC của họ ‘s sử dụng MQTT cho thông tin liên lạc trong các phần khác nhau của hệ thống và các thành phần khác của hệ thống báo hiệu. Nó cung cấp khung truyền thông cơ bản cho một hệ thống tuân thủ các tiêu chuẩn CENELEC cho các thông tin liên lạc quan trọng về an toàn.
- Amazon Web Services đã công bố Amazon IoT dựa trên MQTT vào năm 2015. [17] [18]
- Các tổ chức không gian địa lý SensorThings API đặc điểm kỹ thuật tiêu chuẩn có một phần mở rộng MQTT trong tiêu chuẩn như một giao thức thông báo bổ sung ràng buộc. Nó đã được chứng minh trong một thí điểm IoT của Bộ An ninh Nội địa Hoa Kỳ.
- Các dịch vụ của Cơ sở hạ tầng thượng nguồn OpenStack được kết nối bằng một bus tin nhắn hợp nhất MQTT với Mosquitto là broker MQTT.
- Adafruit đưa ra một MQTT miễn phí Cloud Service cho thí nghiệm IOT và người học gọi Adafruit IO trong năm 2015.
- Microsoft Azure IoT Hub sử dụng MQTT 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 có tên MQTT Buddy vào năm 2017. Đây là ứng dụng MQTT dành cho Android và iOS , nhưng không phải là F-Droid , người dùng có sẵn bằng tiếng Anh, tiếng Nga và tiếng Trung Quốc.
- Node-RED hỗ trợ các nút MQTT kể từ phiên bản 0.14, để định cấu hình đúng các kết nối TLS . [26]
- Nền tảng tự động hóa phần mềm nguồn mở Home Assistant được bật MQTT và cung cấp bốn tùy chọn cho các broker MQTT.
Các ứng dụng thực tế
Đã có một số dự án được thực hiện với giao thức MQTT. Ví dụ như:
- OpenHAB, nền tảng nhà thông minh mã nguồm mở hỗ trợ MQTT.
- Thông số kỹ thuật tiêu chuẩn SensorThings API của Open Geospatial Consortium bao gồm một phần mở rộng MQTT trong giao thức tin nhắn. Nó đã được chứng minh ở một đơn vị thí điểm IoT của Bộ An ninh Nội địa Hoa Kỳ.
- XIM, Inc. đã giới thiệu một ứng dụng MQTT client cho Android và iOS, tên là MQTT Buddy.
- Node-RED hỗ trợ MQTT với TLS kể từ phiên bản 0.14.
- Home Assistant, nền tảng nhà thông minh mã nguồn mở, hỗ trợ MQTT và cung cấp bốn tùy chọn cho MQTT broker.
- ejabberd hỗ trợ MQTT kể từ phiên bản 19.02.
- Eclipse Foundation với giao thức Sparkplug tương thích MQTT. Sparkplug được xây dựng dựa trên MQTT, cộng thêm các tính năng cần thiết trong các ứng dụng công nghiệp thời gian thực.
Một số ứng dụng MQTT đã được triển khai hiện nay
- Facebook Messenger: Trò chuyện trực tuyến chính là ứng dụng được sử dụng. Facebook đã sử dụng các khía cạnh của MQTT trong Facebook Messenger.
- Amazon Web Services đã công bố Amazon IoT dựa trên MQTT vào năm 2015.
- Các tổ chức không gian địa lý Sensor Things API. Họ đã công bố đặc điểm kỹ thuật tiêu chuẩn có một phần mở rộng MQTT. Tiêu chuẩn lúc này như một giao thức thông báo bổ sung ràng buộc. Nó đã được chứng minh trong một thí điểm IoT của Bộ An ninh Nội địa Hoa Kỳ.
- Adafruit đưa ra một MQTT miễn phí. Đó chính là Cloud Service cho thí nghiệm IoT. Chúng còn được biết đến với tên gọi Adafruit IO trong năm 2015.
- Microsoft Azure IoT Hub sử dụng MQTT 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 có tên MQTT Buddy vào năm 2017. Đây là ứng dụng MQTT dành cho Android và iOS. Người dùng được sử dụng ngôn ngữ có sẵn bằng tiếng Anh, Nga và Trung Quốc.
- Node-RED hỗ trợ các nút MQTT kể từ phiên bản 0.14. Nhiệm vụ phát minh để định dạng cấu hình đúng các kết nối TLS.