IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series MQTT & IoT – Bài 5: QoS 0/1/2 dùng khi nào?

QoS trong MQTT quyết định mức độ đảm bảo dữ liệu được gửi thành công, nhưng chọn QoS cao không có nghĩa là hệ thống tốt hơn. Trong bài này, bạn sẽ hiểu rõ sự khác nhau giữa QoS 0, 1 và 2, cùng bảng quyết định nhanh theo từng use-case IoT để vừa đảm bảo độ tin cậy, vừa tiết kiệm pin và băng thông.

1) QoS là gì? Vì sao người mới rất hay chọn sai?

QoS (Quality of Service) trong MQTT không phải là tốc độ, mà là:

Mức độ đảm bảo tin nhắn có được giao hay không.

Rất nhiều maker mới thường:

  • Mặc định dùng QoS 2 cho mọi thứ (vì “cho chắc”)
  • Hoặc luôn dùng QoS 0 (vì “nhẹ nhất”)

👉 Cả hai đều không đúng.

Chọn QoS sai sẽ dẫn tới:

  • Hao pin nhanh
  • Tăng traffic MQTT
  • Gây duplicate data
  • Làm hệ thống phức tạp không cần thiết

2) Tổng quan nhanh QoS 0 / 1 / 2

QoSĐảm bảoCó retryCó duplicateChi phí
QoS 0At most onceRất thấp
QoS 1At least once⚠️ Có thểTrung bình
QoS 2Exactly onceCao

Ghi nhớ nhanh: QoS càng cao → càng tốn pin & traffic.

3) QoS 0 — Khi nào nên dùng?

Đặc điểm

  • Gửi 1 lần, không chờ ACK
  • Có thể mất gói nếu mạng yếu
  • Nhẹ nhất, tiết kiệm pin nhất

Nên dùng cho

  • Telemetry gửi liên tục
  • Dữ liệu không critical
  • Thiết bị pin yếu

Ví dụ thực tế

  • Nhiệt độ gửi mỗi 10–60s
  • RSSI, độ ẩm, điện áp
  • Biểu đồ realtime

👉 Mất 1–2 gói không ảnh hưởng hệ thống.

4) QoS 1 — Lựa chọn cân bằng (dùng nhiều nhất)

Đặc điểm

  • Broker gửi ACK
  • Nếu không nhận ACK → retry
  • Có thể bị duplicate message

Nên dùng cho

  • Event quan trọng
  • Status thiết bị
  • Alert threshold

Ví dụ thực tế

  • Cảnh báo nhiệt độ vượt ngưỡng
  • Cửa mở / đóng
  • Status online / offline

👉 Backend cần xử lý idempotent (chấp nhận duplicate).

5) QoS 2 — Có thật sự cần thiết?

Đặc điểm

  • Handshake 4 bước
  • Đảm bảo exactly once
  • Rất tốn pin & latency

Chỉ nên dùng khi

  • Dữ liệu cực kỳ quan trọng
  • Không được phép duplicate
  • Tần suất gửi thấp

Ví dụ hiếm gặp

  • Lệnh thanh toán
  • Điều khiển critical (industrial)

⚠️ Không khuyến nghị cho đa số dự án IoT maker.

6) Bảng lựa chọn nhanh theo use-case

Use-caseLoại dữ liệuQoS nên dùng
Nhiệt độ realtimeTelemetryQoS 0
Lịch sử môi trườngTelemetryQoS 0
Status thiết bịStatusQoS 1
Cảnh báo vượt ngưỡngEventQoS 1
Cửa mở / đóngEventQoS 1
Điều khiển relayCommandQoS 1
Thanh toán / ghi nhận criticalEventQoS 2

7) Kết hợp QoS với thiết kế topic (chuẩn bài)

Ví dụ:

.../telemetry  → QoS 0
.../status     → QoS 1
.../event      → QoS 1

👉 Đây là setup phổ biến và hiệu quả nhất cho IoT Cloud.

8) Những sai lầm phổ biến cần tránh

❌ Dùng QoS 2 cho telemetry
❌ Dùng QoS 0 cho cảnh báo
❌ Không xử lý duplicate ở backend
❌ Nghĩ QoS cao = hệ thống tốt hơn

9) Checklist chọn QoS đúng

  • Dữ liệu có mất được không?
  • Có chấp nhận duplicate không?
  • Thiết bị dùng pin hay điện lưới?
  • Tần suất gửi bao nhiêu?

10) Kết luận

Nếu bạn đang làm 90% dự án IoT maker:

QoS 0 cho telemetry, QoS 1 cho status & event là đủ.

QoS 2 chỉ nên dùng khi bạn biết rất rõ vì sao mình cần nó.

Bài tiếp theo trong series

Bài 6: Retained + Last Will = theo dõi online/offline đúng chuẩn