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ảo | Có retry | Có duplicate | Chi phí |
|---|---|---|---|---|
| QoS 0 | At most once | ❌ | ❌ | Rất thấp |
| QoS 1 | At least once | ✅ | ⚠️ Có thể | Trung bình |
| QoS 2 | Exactly once | ✅ | ❌ | Cao |
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-case | Loại dữ liệu | QoS nên dùng |
|---|---|---|
| Nhiệt độ realtime | Telemetry | QoS 0 |
| Lịch sử môi trường | Telemetry | QoS 0 |
| Status thiết bị | Status | QoS 1 |
| Cảnh báo vượt ngưỡng | Event | QoS 1 |
| Cửa mở / đóng | Event | QoS 1 |
| Điều khiển relay | Command | QoS 1 |
| Thanh toán / ghi nhận critical | Event | QoS 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


