Giới thiệu giao thức MQTT

0
1866
Giao thức MQTT

Giao thức MQTT được thiết kế chủ yếu để 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. Mặc dù nó đã tồn tại trong hơn một thập kỷ nhưng chỉ khi có sự ra đời của M2M (máy để truyền thông máy) và Internet of Things (IoT) mới làm cho nó trở thành một giao thức phổ biến.

Những nhà nghiên cứu muốn xây dựng các ý tưởng IoT cần tìm hiểu về giao thức này bởi lẽ nó sẽ nhanh chóng trở thành giao thức được ưu tiên nhất để kết nối các thiết bị với đám mây. Các nền tảng đám mây của các doanh nghiệp như Amazon Web Services, Microsoft Azure và IBM Watson đều giới thiệu IoT PaaS của họ thông qua MQTT.

MQTT (Message Queuing Telemetry Transport) là một giao thức truyền thông điệp (message) theo mô hình publish/subscribe (xuất bản – 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 được tạo ra từ năm 1999 bởi hai kỹ sư – Andy Stanford-Clark (IBM) và Arlen Nipper (Eurotech) khi họ phải phát minh ra một giao thức mới để kết nối các đường ống dẫn dầu trên các mạng vệ tinh không đáng tin cậy.

Năm 2011, IBM và Eurotech đã tặng MQTT cho dự án Eclipse được đề xuất có tên là Paho. Trong năm 2013, nó đã được đệ trình lên OASIS để chuẩn hóa. Phiên bản mới nhất của đặc tả giao thức 3.11 đã trở thành một tiêu chuẩn OASIS.

Tại sao MQTT?

MQTT có các tính năng độc đáo mà bạn khó có thể tìm thấy trong các giao thức khác, như:

  • Đây là một giao thức gọn nhẹ. Vì vậy, thật dễ dàng để thực hiện trong phần mềm và nhanh chóng trong truyền dữ liệu.
  • Nó dựa trên kỹ thuật nhắn tin. Tất nhiên, bạn biết tốc độ gửi tin nhắn / nhắn tin WhatsApp của bạn nhanh như thế nào. Giao thức MQTT làm việc tương tự WhatsApp .
  • Các gói dữ liệu được thu nhỏ. Do đó, được sử dụng trong mạng lưới không ổn định.
  • Sử dụng điện năng thấp. Do đó, nó sẽ tiết kiệm pin của thiết bị được kết nối.
  • Có khả năng thời gian thực! Đây là một trong những tính năng đặc biệt làm cho giao thức này hoàn hảo cho các ứng dụng IoT.

Các thành phần của MQTT

MQTT gồm có các thành phần như sau:

  • Client (Khách hàng): Bất kỳ nhà xuất bản hoặc người đăng ký nào kết nối với nhà môi giới tập trung qua mạng đều được coi là khách hàng. Điều quan trọng cần lưu ý là có các máy chủ và máy khách trong MQTT. Cả nhà xuất bản và người đăng ký đều được gọi là khách hàng vì họ kết nối với dịch vụ tập trung, khách hàng có thể liên tục hoặc tạm thời. Khách hàng liên tục duy trì một phiên với nhà môi giới trong khi khách hàng tạm thời không được nhà môi giới theo dõi. Khách hàng thường kết nối với nhà môi giới thông qua thư viện và SDK. Có hơn một tá thư viện có sẵn cho C, C ++, Go, Java, C #, PHP, Python, Node.js và Arduino.
  • Broker (Nhà môi giới): Người môi giới là phần mềm nhận tất cả các tin nhắn từ các khách hàng xuất bản và gửi chúng đến các khách hàng đăng ký. Nó giữ kết nối với các khách hàng liên tục. Tùy thuộc vào người triển khai để quyết định cách tạo lớp môi giới có thể mở rộng. Một số triển khai thương mại của các nhà môi giới MQTT bao gồm HiveMQ, Xively, AWS IoT và Loop.
  • Topic (Chủ đề): Một chủ đề trong MQTT là điểm cuối mà khách hàng kết nối. Nó hoạt động như nơi phân phối trung tâm để xuất bản và đăng ký tin nhắn. Trong MQTT, một chủ đề là một vị trí nổi tiếng cho nhà xuất bản và người đăng ký. Nó được tạo ra khi chúng ta thiết lập kết nối với nhà môi giới. Chủ đề là các chuỗi phân cấp đơn giản, được mã hóa bằng UTF-8, được phân cách bằng dấu gạch chéo. Người đăng ký có thể chọn đăng ký một chủ đề cụ thể hoặc tất cả các chủ đề phụ thông qua các ký tự đại diện.
  • Message (Thông báo) là dữ liệu mà một thiết bị nhận được khi đăng ký từ một chủ đề hoặc gửi “khi xuất bản” cho một chủ đề.
  • Publish (Xuất bản) là quá trình thiết bị gửi thông điệp của nó tới người môi giới.
  • Subscribe (Đăng ký) nơi thiết bị thực hiện để truy xuất thông báo từ người môi giới.
  • ConnectionMQTT có thể được sử dụng bởi các máy khách dựa trên TCP/IP. Cổng tiêu chuẩn được giới thiệu bởi các công ty môi giới năm 1883, không phải là một cổng an toàn. Những nhà môi giới hỗ trợ TLS / SSL thường sử dụng cổng 8883. Để liên lạc an toàn, khách hàng và nhà môi giới dựa vào chứng chỉ kỹ thuật số. AWS IoT là một trong những triển khai an toàn của MQTT, yêu cầu khách hàng sử dụng chứng chỉ X.509.

Cách MQTT làm việc

Giống như bất kỳ giao thức internet nào khác, MQTT dựa trên các kháng hàng (client) và một máy chủ (server). Tương tự như vậy, máy chủ là người chịu trách nhiệm xử lý các yêu cầu của client về việc nhận hoặc gửi dữ liệu giữa client và server với nhau.

Máy chủ MQTT được gọi là một broker (nhà môi giới) và client chỉ đơn giản là các thiết bị được kết nối.

Do đó:

  • Khi một thiết bị (một client) muốn gửi dữ liệu cho broker, hoạt động này được gọi là “publish“.
  • Khi một thiết bị (một client) muốn nhận dữ liệu từ broker, hoạt động này được gọi là “subscribe”.

Ngoài ra, các client này có thể vừa xuất bản(publish) và vừa đăng ký (subscribe) các chủ đề. Vì vậy, các nhà môi giới ở đây có nhiệm vụ xử lý các hành động xuất bản / đăng ký với các chủ đề mục tiêu.

Ví dụ:

Giả sử có một thiết bị có cảm biến nhiệt độ. Chắc chắn, nó gửi dữ liệu đọc được đến cho broker. Ở phía bên kia, ứng dụng của điện thoại hoặc máy tính để bàn nhận giá trị nhiệt độ này. Khi đó, 2 điều sẽ xảy ra:

  • Thiết bị xác định chủ đề (topic) mà nó muốn xuất bản (publish), ví dụ: “temp”. Sau đó, nó xuất bản thông báo “giá trị nhiệt độ”.
  • Ứng dụng điện thoại / máy tính để bàn đăng ký (subscribe) chủ đề “temp”. Sau đó, nó nhận được thông báo rằng thiết bị đã xuất bản, đó là giá trị nhiệt độ.

Như vậy, vai trò môi giới (broker) ở đây là để lấy thông điệp “giá trị nhiệt độ” và gửi nó đến ứng dụng điện thoại hoặc máy tính để bàn.

Có bao nhiêu thiết bị bạn có thể kết nối với một nhà môi giới

Số lượng thiết bị “client” được kết nối với nhà môi giới phụ thuộc vào nhà cung cấp dịch vụ môi giới.

Trong thực tế, nó có thể đạt được một số lượng lớn các khách hàng vừa xuất bản và đăng ký liên tục.

Nhưng phần tuyệt vời của giao thức này không chỉ là số lượng lớn các thiết bị được kết nối này mà còn thực tế là bất kỳ thiết bị nào cũng có thể nhận được bất kỳ dữ liệu nào của thiết bị khác ở bất kỳ thời điểm nào. Kết quả là, các ứng dụng dựa trên các dữ liệu được chia sẻ nhanh chóng này là vô hạn.

Nhưng một câu hỏi đặt ra ở đây, nếu bạn sử dụng giao thức HTTP để chia sẻ dữ liệu giữa các thiết bị thì sao? 

Tại sao không phải HTTP

HTTP là giao thức chậm hơn, chi phí cao hơn và tiêu thụ điện năng nhiều hơn MQTT. 

  • Chậm hơn: bởi vì nó sử dụng các gói dữ liệu lớn hơn để giao tiếp với máy chủ.
  • Chi phí: HTTP yêu cầu mở và đóng kết nối tại mỗi yêu cầu, trong khi MQTT vẫn online để làm cho kênh luôn luôn mở giữa “server” của nhà môi giới và khách hàng 
  • Tiêu thụ điện năng: vì phải mất nhiều thời gian hơn và nhiều gói dữ liệu hơn, do đó nó sử dụng nhiều năng lượng.

Sử dụng broker nào?

Có nhiều nhà môi giới triển khai giao thức MQTT. Một trong những nhà môi giới phổ biến nhất và thường được sử dụng là mosquitto broker.

Mosquitto là một nhà môi giới thông điệp nguồn mở thực hiện giao thức MQTT. Nó gọn nhẹ và phù hợp để sử dụng trên tất cả các thiết bị từ một bo mạch đơn như Arduino, ESP8266 đến máy tính và máy chủ đầy đủ.

Nhưng thay vì sử dụng Mosquitto trên máy tính cục bộ, bạn sẽ cần phải sử dụng một máy chủ dựa trên đám mây để triển khai nhà môi giới Mosquitto. Điều đó là cần thiết để làm cho các dự án IoT của bạn có thể kiểm soát được trên internet.

Có rất nhiều nhà môi giới Mosquitto dựa trên đám mây, như:

  • ThingMQ
  • ThingStudio
  • MQTT.io
  • Heroku
  • CloudMQTT

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây