MQTT là gì?
MQTT là một giao thức nhắn tin dựa trên các tiêu chuẩn hoặc một bộ các quy tắc được sử dụng cho việc giao tiếp máy với máy. Cảm biến thông minh, thiết bị đeo trên người và các thiết bị Internet vạn vật (IoT) khác thường phải truyền và nhận dữ liệu qua mạng có tài nguyên và băng thông hạn chế. Các thiết bị IoT này sử dụng MQTT để truyền dữ liệu vì giao thức này dễ triển khai và có thể giao tiếp dữ liệu IoT một cách hiệu quả. MQTT hỗ trợ nhắn tin giữa các thiết bị với đám mây và từ đám mây đến thiết bị.
Tại sao giao thức MQTT lại quan trọng?
Giao thức MQTT đã trở thành một tiêu chuẩn truyền dữ liệu IoT vì giao thức này mang lại những lợi ích sau:
Gọn nhẹ và hiệu quả
Việc triển khai MQTT trên thiết bị IoT yêu cầu lượng tài nguyên tối thiểu nên thậm chí có thể sử dụng được trên các bộ vi điều khiển nhỏ. Ví dụ: một thông điệp kiểm soát MQTT tối thiểu có thể nhỏ đến hai byte dữ liệu. Tiêu đề thông điệp MQTT cũng nhỏ nên bạn có thể tối ưu hóa băng thông mạng.
Quy mô linh hoạt
Việc triển khai MQTT yêu cầu một lượng mã tối thiểu tiêu thụ rất ít năng lượng trong các hoạt động. Giao thức này cũng có các tính năng tích hợp để hỗ trợ giao tiếp với một lượng lớn các thiết bị IoT. Do đó, bạn có thể triển khai giao thức MQTT để kết nối với hàng triệu thiết bị này.
Độ tin cậy
Nhiều thiết bị IoT kết nối qua mạng di động không đáng tin cậy với băng thông thấp và độ trễ cao. MQTT có các tính năng tích hợp giúp giảm thời gian thiết bị IoT cần để kết nối lại với đám mây. MQTT cũng xác định ba mức chất lượng dịch vụ khác nhau để đảm bảo độ tin cậy cho các trường hợp sử dụng IoT - nhiều nhất là một lần (0), ít nhất là một lần (1) và chỉ một lần (2).
Bảo mật
MQTT giúp các nhà phát triển dễ dàng mã hóa thông điệp và xác thực thiết bị và người dùng bằng các giao thức xác thực hiện đại, chẳng hạn như OAuth, TLS1.3, Chứng chỉ do khách hàng quản lý, v.v.
Hỗ trợ tốt
Một số ngôn ngữ như Python có hỗ trợ rộng rãi cho việc triển khai giao thức MQTT. Do đó, các nhà phát triển có thể nhanh chóng triển khai giao thức này mà ít cần phải viết mã trong bất kỳ loại ứng dụng nào.
Lịch sử của giao thức MQTT là gì?
Giao thức MQTT được phát minh vào năm 1999 để sử dụng trong ngành dầu khí. Các kỹ sư cần một giao thức sử dụng băng thông tối thiểu và tốn ít pin nhất để giám sát các đường ống dầu qua vệ tinh. Ban đầu, giao thức này được gọi là Giao thức truyền thông điệp từ xa xếp hàng đợi do Dòng sản phẩm MQ của IBM hỗ trợ giai đoạn đầu. Năm 2010, IBM đã phát hành MQTT 3.1 như một giao thức mở và miễn phí để mọi người triển khai. Sau đó, vào năm 2013, giao thức này được đệ trình lên cơ quan về thông số kỹ thuật của Tổ chức vì sự tiến bộ của các tiêu chuẩn thông tin có cấu trúc (OASIS) để duy trì. Năm 2019, OASIS phát hành MQTT phiên bản 5 được nâng cấp. Giờ đây MQTT không còn là từ viết tắt mà được coi là tên chính thức của giao thức.
Nguyên tắc đằng sau MQTT là gì?
Giao thức MQTT hoạt động trên nguyên tắc của mô hình xuất bản/đăng ký. Trong quá trình giao tiếp mạng truyền thống, máy khách và máy chủ giao tiếp trực tiếp với nhau. Máy khách yêu cầu tài nguyên hoặc dữ liệu từ máy chủ, sau đó máy chủ xử lý và gửi lại một phản hồi. Tuy nhiên, MQTT sử dụng mẫu xuất bản/đăng ký để phân tách bên gửi thông điệp (nơi gửi thông điệp) khỏi bên nhận thông điệp (nơi nhận thông điệp). Thay vào đó, một thành phần thứ ba được gọi là trình truyền tải thông điệp xử lý quá trình giao tiếp giữa nơi gửi thông điệp và nơi nhận thông điệp. Việc của trình truyền tải là lọc tất cả các thông điệp đến từ nơi gửi thông điệp và phân phối các thông điệp đó một cách chính xác đến nơi nhận thông điệp. Trình truyền tải phân tách nơi gửi thông điệp và nơi nhận thông điệp như sau:
Phân tách không gian
Nơi gửi thông điệp và nơi nhận thông điệp không biết về vị trí của nhau trong mạng và không trao đổi các thông tin như địa chỉ IP và số cổng.
Phân tách thời gian
Nơi gửi thông điệp và nơi nhận thông điệp không chạy hoặc có kết nối mạng tại cùng một thời điểm.
Phân tách quá trình đồng bộ
Cả nơi gửi thông điệp và nơi nhận thông điệp có thể gửi hoặc nhận thông điệp mà không làm gián đoạn hoạt động của bên còn lại. Ví dụ: nơi nhận thông điệp không phải đợi nơi gửi thông điệp thực hiện gửi thông điệp.
Các thành phần của MQTT là gì?
MQTT triển khai mô hình xuất bản/đăng ký bằng cách định nghĩa máy chủ và trình truyền tải như nêu ở phía dưới.
Máy khách MQTT
Một máy khách MQTT là bất kỳ thiết bị nào từ một máy chủ đến một bộ vi điều khiển có chạy một thư viện MQTT. Nếu máy khách gửi thông điệp, nó hoạt động như một nơi gửi thông điệp và nếu nhận thông điệp, nó hoạt động như bên nhận. Về cơ bản, bất kỳ thiết bị nào giao tiếp bằng MQTT qua một mạng đều có thể được gọi là một thiết bị khách MQTT.
Trình truyền tải MQTT
Trình truyền tải MQTT là hệ thống backend điều phối thông điệp giữa các máy khách khác nhau. Trách nhiệm của trình truyền tải bao gồm nhận và lọc thông điệp, xác định máy khách đã đăng ký nhận từng thông điệp và gửi thông điệp cho các máy khách đó. Trình trung chuyển cũng chịu trách nhiệm thực hiện các tác vụ khác như:
- Ủy quyền và xác thực máy khách MQTT
- Chuyển thông điệp đến các hệ thống khác để phân tích thêm
- Xử lý các thông điệp bị bỏ lỡ và các phiên trên máy khách
Kết nối MQTT
Máy khách và máy chủ bắt đầu giao tiếp bằng một kết nối MQTT. Máy khách khởi tạo kết nối bằng cách gửi một thông điệp CONNECT (KẾT NỐI) đến trình truyền tải MQTT. Trình truyền tải xác nhận rằng kết nối đã được thiết lập bằng cách trả lời bằng một thông điệp CONNACK. Cả máy khách MQTT và trình truyền tải đều cần đến ngăn xếp TCP/IP để giao tiếp. Các máy khách không bao giờ kết nối với nhau mà chỉ kết nối với trình truyền tải.
MQTT hoạt động như thế nào?
Dưới đây là tổng quan về cách thức hoạt động của MQTT.
- Máy khách MQTT thiết lập kết nối với trình truyền tải MQTT.
- Sau khi được kết nối, máy khách có thể xuất bản thông điệp, đăng ký nhận các thông điệp cụ thể hoặc thực hiện cả hai.
- Khi trình truyền tải MQTT nhận được một thông điệp, trình truyền tải sẽ chuyển thông điệp đó đến những nơi nhận thông điệp quan tâm.
Hãy phân tích các chi tiết để hiểu sâu hơn.
Chủ đề MQTT
Thuật ngữ “chủ đề” đề cập đến các từ khóa trình truyền tải MQTT sử dụng để lọc các thông điệp cho máy khách MQTT. Các chủ đề được tổ chức theo thứ bậc, tương tự như đường dẫn đến tệp hoặc thư mục. Ví dụ: hãy xem xét một hệ thống nhà ở thông minh hoạt động trong một ngôi nhà nhiều tầng có các thiết bị thông minh khác nhau ở mỗi tầng. Trong trường hợp đó, trình truyền tải MQTT có thể tổ chức các chủ đề như:
nhà của chúng ta/tầng trệt/phòng khách/ánh sáng
nhà của chúng ta/tầng 1/phòng bếp/nhiệt độ
Quá trình xuất bản qua MQTT
Máy khách MQTT xuất bản các thông điệp có chứa chủ đề và dữ liệu dưới định dạng byte. Máy khách xác định định dạng dữ liệu như dữ liệu văn bản, dữ liệu nhị phân, tệp XML hoặc JSON. Ví dụ: một cái đèn trong hệ thống nhà ở thông minh có thể xuất bản thông điệp về chủ đề phòng khách/ánh sáng.
Quá trình đăng ký qua MQTT
Máy khách MQTT gửi một thông điệp SUBSCRIBE (ĐĂNG KÝ) đến trình truyền tải MQTT để nhận thông điệp về các chủ đề quan tâm. Thông điệp này chứa một mã định danh duy nhất và một danh sách đăng ký. Ví dụ: ứng dụng nhà ở thông minh trên điện thoại của bạn muốn hiển thị số lượng đèn đang bật trong nhà của bạn. Ứng dụng này sẽ đăng ký chủ đề ánh sáng và gia tăng bộ đếm trên tất cả các thông điệp về trạng thái bật.
MQTT qua WSS là gì?
MQTT qua WebSockets (WSS) là một quá trình triển khai MQTT để nhận dữ liệu trực tiếp vào trình duyệt web. Giao thức MQTT xác định một JavaScript của máy khách để hỗ trợ WSS cho các trình duyệt. Trong trường hợp này, giao thức hoạt động như bình thường nhưng thêm các tiêu đề bổ sung vào các thông điệp MQTT để đồng thời hỗ trợ giao thức WSS. Bạn có thể coi quy trình này như là tải trọng thông điệp MQTT được bao bọc trong phong bì WSS.
MQTT có bảo mật không?
Giao tiếp MQTT sử dụng giao thức SSL để bảo vệ dữ liệu nhạy cảm được truyền bởi các thiết bị IoT. Bạn có thể triển khai danh tính, xác thực và cấp phép giữa máy khách và trình truyền tải bằng chứng chỉ SSL và/hoặc mật khẩu. Trình truyền tải MQTT thường xác thực máy khách bằng cách sử dụng mật khẩu của họ cũng như các mã định danh máy khách duy nhất mà trình truyền tải phân bổ cho từng máy khách. Trong hầu hết các quá trình triển khai, máy khách xác thực máy chủ bằng chứng chỉ hoặc tra cứu DNS. Bạn cũng có thể triển khai các giao thức mã hóa với MQTT.
MQTT có phải là RESTful không?
MQTT không phải là RESTful. Chuyển trang thái đại diện (REST) là một cách tiếp cận theo kiến trúc đối với giao tiếp mạng sử dụng mô hình giao tiếp yêu cầu-phản hồi giữa bên gửi và bên nhận thông điệp. Ngược lại, MQTT sử dụng mô hình giao tiếp xuất bản/đăng ký trong lớp ứng dụng và yêu cầu kết nối TCP thường trực để truyền thông điệp bằng cách đẩy. Tuy nhiên, MQTT phiên bản 5 bổ sung một phương thức yêu cầu/phản hồi mới để hoạt động theo cách tương tự như REST, trong đó nơi gửi thông điệp có thể đính kèm một chủ đề phản hồi đặc biệt mà bên nhận xử lý và tạo phản hồi thích hợp.
AWS có thể hỗ trợ triển khai MQTT bằng cách nào?
AWS IoT Core là một dịch vụ được quản lý toàn phần cho phép bạn kết nối hàng tỷ thiết bị IoT đồng thời định tuyến hàng nghìn tỷ thông điệp tới các dịch vụ AWS. Bạn có thể:
- Kết nối, quản lý và mở rộng quy mô nhóm thiết bị của bạn một cách dễ dàng và đáng tin cậy mà không cần cung cấp hay quản lý máy chủ.
- Chọn giao thức truyền thông mà bạn muốn dùng, bao gồm MQTT, HTTPS, MQTT qua WSS và LoRaWAN.
- Bảo mật kết nối thiết bị và dữ liệu bằng cách xác thực hai chiều và mã hóa đầu cuối.
- Lọc, chuyển đổi và thao tác với dữ liệu thiết bị trong khi truyền, căn cứ vào quy tắc kinh doanh mà bạn xác định.
Bắt đầu với MQTT trên AWS bằng cách tạo tài khoản miễn phí ngay hôm nay!
Các bước tiếp theo để sử dụng MQTT trên AWS
Bắt đầu xây dựng với AWS trên Bảng điều khiển quản lý AWS.