MQTT là gì ?
Một gói tin có thể được gởi ở bất kỳ QoS nào, và các client cũng có thể subscribe với bất kỳ yêu cầu QoS nào. Có nghĩa là client sẽ lựa chọn QoS tối đa mà nó có để nhận tin. Ví dụ, nếu 1 gói dữ liệu được publish với QoS2, và client subscribe với QoS0, thì gói dữ liệu được nhận về client này sẽ được broker gởi với QoS0, và 1 client khác đăng ký cùng kênh này với QoS 2, thì nó sẽ được Broker gởi dữ liệu với QoS2.
Đây 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 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 trong các nhà máy sản xuất và ứng dụng 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
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 cho nên chúng
được thiết kế để có thể hoạt động một cách linh hoạt. 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 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 còn gọi là 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 tức là 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 IoT. MQTT và mang lại nhiều lợi
ích mạnh mẽ cho quy trình sản xuất 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
( goi là 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”.
QoS
Ở đây có 3 tuỳ
chọn QoS ( Qualities of service ) khi “publish” và “subscribe”:
- QoS0 Broker/client sẽ gởi dữ liệu đúng 1 lần, quá
trình gởi được xác nhận bởi chỉ giao thức TCP/IP, giống kiểu đem con bỏ
chợ.
- QoS1 Broker/client sẽ gởi dữ liệu với ít nhất 1 lần
xác nhận từ đầu kia, nghĩa là có thể có nhiều hơn 1 lần xác nhận đã nhận
được dữ liệu.
- QoS2 Broker/client đảm bảm khi gởi dữ liệu thì phía nhận chỉ nhận được đúng 1 lần, quá trình này phải trải qua 4 bước bắt tay.
Một gói tin có thể được gởi ở bất kỳ QoS nào, và các client cũng có thể subscribe với bất kỳ yêu cầu QoS nào. Có nghĩa là client sẽ lựa chọn QoS tối đa mà nó có để nhận tin. Ví dụ, nếu 1 gói dữ liệu được publish với QoS2, và client subscribe với QoS0, thì gói dữ liệu được nhận về client này sẽ được broker gởi với QoS0, và 1 client khác đăng ký cùng kênh này với QoS 2, thì nó sẽ được Broker gởi dữ liệu với QoS2.
Một ví dụ khác, nếu 1
client subscribe với QoS2 và gói dữ liệu gởi vào kênh đó publish với QoS0 thì
client đó sẽ được Broker gởi dữ liệu với QoS0. QoS càng cao thì càng đáng tin
cậy, đồng thời độ trễ và băng thông đòi hỏi cũng cao hơn.