MQTT vs HTTP trong IoT – Điểm khác biệt và các lưu ý khi chọn
MQTT vs HTTP có điểm khác biệt gì, chúng ta nên chọn loại giao thức truyền thông nào cho dự án IoT của mình? IoTZone sẽ phân tích chi tiết điểm khác biệt của từng loại để bạn đưa ra lựa chọn phù hợp nhất nhé!
Điểm khác biệt chính giữa MQTT vs HTTP
Mặc dù cả MQTT vs HTTP đều cùng hoạt động trên TCP theo mô hình Client – Server, nhưng giữa chúng có nhiều điểm khác biệt nhau bạn cần nắm rõ:
MQTT | HTTP | |
Mục đích | Được phát triển để phục vụ các dự án Internet of Things (IoT) | Được phát triển nhằm mục đích chia sẻ tài liệu trên mạng Internet |
Kiến trúc chính | Chủ đề | Đường link URLs |
Mô hình hoạt động | Publish / Subscribe | Request / Response |
Sự phức tạp | Đơn giản hơn | Phức tạp hơn |
Cách truyền dữ liệu | Hỗ trợ truyền tin nhắn song hướng: từ Server đến Client và ngược lại | Chỉ truyền thông tin từ Client đến SErver |
Giao thức | TCP (Transmission Control Protocol) | Hỗ trợ cả TCP và UDP (User Datagram Protocol) |
Loại nội dung | Bất kỳ nội dung nào được lưu dưới dạng nhị phân | Văn bản (sử dụng mã hóa Base64 cho dữ liệu nhị phân) |
Chế độ nhắn tin | Không đồng bộ, hoạt động theo sự kiện | Đồng bộ |
Kích thước tin nhắn truyền đi | Rất nhỏ vì chúng sử dụng hình thức nhị phân | Kích thước lớn hơn vì chúng dùng hình thức ASCII |
Kích thước tiêu đề | 2 byte | 8 byte |
Khả năng quan sát tình trạng Client | Cho phép biết trạng thái Client qua tin nhắn thông báo | Không xác định được trạng thái của Client |
Số cổng | Làm việc trên 1883 Port | Làm việc trên 80 hoặc 8080 Port |
Tính bảo mật cho dữ liệu | Hỗ trợ bảo mật thông qua SSL/TLS | Không có tính năng bảo mật, nhưng đã có HTTPS hỗ trợ việc đó |
Nếu bạn chưa hiểu rõ về MQTT vs HTTP là gì, bạn có thể tham khảo bài viết sau: MQTT Protocol là gì? Các ứng dụng trong gửi tin nhắn IoT. Vì trong bài này, IoTZone sẽ chỉ tập trung vào phân tích điểm khác biệt chính giữa 2 giao thức MQTT và HTTP.
Khả năng hoạt động của MQTT và HTTP trong IoT
Để so sánh hiệu suất và khả năng hoạt động của từng giao thức trong các dự án IoT, chúng ta sẽ cần đo lường nhiều yếu tố khác nhau. Trước hết, mình sẽ so sánh về chi phí TCP nhé:
Chi phí TCP
Byte MQTT | Byte HTTP | |
Kết nối | 5572 | 2261 |
Ngắt kết nối | 376 (tùy chọn) | 0 |
Xuất bản 1 tin nhắn | 388 | 3285 |
Tổng cho 1 tin nhắn | 6336 | 5546 |
Tổng cho 10 tin nhắn | 9829 | 55460 |
Tổng cho 100 tin nhắn | 44 748 | 554 600 |
Theo như bảng trên, bạn có thể thấy việc thiết lập kết nối cho MQTT lớn hơn HTTP nhiều, do chúng phải trao đổi gói MQTT CONNECT sau khi hoàn tất kết nối TCP. Còn các chi phí chung của HTTP sẽ bao gồm tất cả mọi yêu cầu, nên đó là lý do chi phí xuất bản tin nhắn của HTTP cao hơn.
Còn về chi phí ngắt kết nối của MQTT, chúng có thể bằng 0 khi chúng ta lựa chọn không cần gửi gói DISCONNECT khi đóng kết nối TCP.
Thời gian phản hồi
Dưới đây là thời gian phản hồi của từng giao thức, với đơn vị là milli giây (ms):
Số tin nhắn | MQTT | HTTP |
1 | 113 | 289 |
100 | 47 | 289 |
1000 | 43 | 289 |
Các phép đo trên được tính toán bằng MQTT QoS (Quality of Service).
Ưu nhược điểm của từng giao thức
Để giúp bạn đưa ra lựa chọn phù hợp hơn, mình sẽ đánh giá chi tiết ưu nhược điểm của từng giao thức nhé!
MQTT
MQTT sẽ phức tạp hơn HTTP – Giao thức đơn giản sử dụng các ký tự ASCII dễ đọc và dễ hiểu. Ngoài ra, MQTT cũng khó dùng hơn vì chúng truyền thông tin 2 chiều.
Ngoài ra, chi phí thiết lập kết nối của MQTT cao hơn so với HTTP. Nếu bạn chỉ gửi 1 tin nhắn trong 1 phiên TCP thì chi phí sẽ khá lớn. Tuy nhiên, thông thường trong các dự án IoT thì bạn sẽ cần gửi và nhận nhiều tin nhắn cùng lúc giữa các thiết bị, nên lúc này lợi thế của MQTT sẽ trở nên rõ rệt hơn.
Ưu điểm nổi bật của MQTT là có tính linh hoạt cao. Với mô hình Publish / Subscribe, bạn có thể tạo và chia sẻ nhiều thông tin với nhau dễ dàng. Các bên trung gian cũng có thể liên kết với nhau qua việc ánh xạ các luồng tin nhắn của từng chủ đề. Khi dùng MQTT, bạn có thể giải quyết tình trạng kết nối bị gián đoạn, các thiết bị cũng được cung cấp sẵn bộ đệm khi nó không có đủ khả năng thực hiện việc đó.
HTTP
Ưu điểm chính của HTTP là chúng đã quá phổ biến và quen thuộc với các developer. Nếu bạn là người phát triển Website, thì chắc hẳn bạn đã sử dụng giao thức này. Hiện nay, HTTP có sẵn nhiều thư viện cho Server và Client.
Tuy nhiên, tương lai gần thì MQTT sẽ hỗ trợ thêm nhiều lựa chọn cho người dùng, bao gồm cả phần mềm mã nguồn mở từ HiveMQ. Trên thực tế, nếu bạn xây dựng các ứng dụng IoT thì HTTP không có nhiều tính năng phù hợp như MQTT như Qó, queuing, lưu lại message và push message.
Cách phối hợp MQTT vs HTTP trong các dự án IoT
Nếu bạn xây dựng dự án IoT kết hợp với nền tảng đám mây (Cloud), thì các thiết bị IoT này sẽ giao tiếp qua MQTT vì MQTT cung cấp tính 2 chiều. Tuy nhiên, tại điểm nhận bên kia của Cloud thì chúng ta cần HTTPS để có thể hiển thị dữ liệu lên Dashboard giám sát và phân tích. Tuy nhiên, MQTT có giao diện người dùng được đánh giá cao hơn, chúng hiển thị các dữ liệu và giao dịch thô được đưa vào và đưa ra.
Để mình lấy một ví dụ dễ hiểu cho bạn nhé, về Video Camera. Thiết bị này sẽ được khởi chạy và kết nối với HTTP khi có người truy cập vào xem video. Tuy nhiên, các video sẽ được thiết lập một luồng MQTT để di chuyển dữ liệu, thay vì gửi thông tin riêng lẻ thông qua các tin nhắn của HTTP.
MQTT vs HTTP – Lựa chọn nào cho dự án IoT?
Như mình đã trình bày ở trên, vì MQTT được sinh ra để phục vụ cho IoT nên chúng là lựa chọn lý tưởng. Tuy nhiên, HTTP vẫn có chỗ đứng của nó trong IoT mà MQTT không thay thế được (ít nhất là tại thời điểm đăng bài viết này), đó là kết nối các thiết bị cài đặt ứng dụng HTTP Client với các nhà cung cấp HTTP. Điều này giúp truyền các dữ liệu nhẹ.
Kết luận
MQTT vs HTTP là 2 công nghệ được tạo ra cho 2 mục đích khác nhau, mặc dù mô hình Publish / Subscribe của MQTT có vẻ khá giống với mô hình gửi yêu cầu và phản hồi yêu cầu của HTTP.
MQTT là lựa chọn lý tưởng trong các dự án IoT cần giao tiếp 2 chiều, cho phép truyền dữ liệu một cách ổn định, đáng tin cậy và giảm việc bị quá tải dữ liệu. Tuy nhiên, việc truyền tin nhắn của MQTT sẽ không diễn ra nếu một kết nối nào đó không được bật. Ở điểm này thì HTTP cung cấp lợi thế hơn, vì chúng yêu cầu một tài liệu duy nhất với tất cả các thành phần chỉ trong một lần.
Nói tóm lại, HTTP là lựa chọn lý tưởng để bạn hiển thị thông tin duy nhất 1 lần, còn MQTT thì khá phù hợp khi bạn muốn trao đổi tin nhắn, thông tin dữ liệu thường xuyên hoặc liên tục. Qua bài viết trên, hy vọng bạn đã hiểu rõ hơn về MQTT vs HTTP và đưa ra lựa chọn phù hợp cho mình. Đừng quên truy cập Blog của IoTZone để cập nhật thêm nhiều kiến thức công nghệ nhé!