Làm cách nào để đồng bộ hóa dữ liệu giữa các thiết bị, tránh mất tin nhắn và sao chép?


9

Tôi có một mạng IoT gồm các thiết bị gửi dữ liệu cho nhau, với dữ liệu được lưu trữ trong cơ sở dữ liệu.

Nếu tôi có một thiết bị gửi 10 gói / yêu cầu API theo trình tự, đôi khi chỉ một số ít đến đích của chúng. Ví dụ, các gói 1, 3 và 9 có thể đến đích của chúng, trong khi các gói khác thì không.

Làm cách nào tôi có thể theo dõi các gói này và đảm bảo rằng tất cả đều đến đích mà không bị trùng lặp hoặc rò rỉ? Tôi hy vọng rằng sẽ có hàng ngàn thiết bị trong một kịch bản thực tế, thay vì chỉ một thiết bị bị mất gói.

Câu trả lời:


6

Thông thường, bạn sẽ cần chọn một giao thức có đảm bảo chắc chắn về việc máy khách sẽ nhận được bất kỳ gói / tin nhắn nào, theo thứ tự nào và liệu có được phép sao chép hay không.

Đối với một mạng các thiết bị IoT gửi các tin nhắn cỡ nhỏ đến vừa phải cho nhau, sử dụng MQTT với Chất lượng dịch vụ 2 có vẻ phù hợp với trường hợp sử dụng của bạn. Như đã nêu trong liên kết HiveMQ:

QoS cao nhất là 2, nó đảm bảo rằng mỗi tin nhắn chỉ được nhận một lần bởi đối tác. Đây là chất lượng dịch vụ an toàn nhất và cũng chậm nhất. Bảo đảm được cung cấp bởi hai luồng ở đó và ngược lại giữa người gửi và người nhận.

Lưu ý rằng QoS 2 không bảo vệ thứ tự các tin nhắn và, như đã nêu, ngăn chặn các tin nhắn trùng lặp.

Có một chi phí đáng kể trong việc sử dụng MQTT QoS 2 so với QoS 0 tiêu chuẩn (gần giống với tin nhắn cháy và quên; nếu nó không đến được nhà môi giới, thì tin nhắn sẽ không bị phẫn nộ và nó sẽ biến mất vĩnh viễn ) - QoS 2 yêu cầu 4 tin nhắn ( PUBLISHtừ người gửi, PUBRECtừ nhà môi giới, PUBRELtừ khách hàng, PUBCOMPtừ nhà môi giới), do đó thường sẽ mất nhiều thời gian hơn để xử lý, mất nhiều tài nguyên hơn (do đó truyền phát radio lâu hơn và sử dụng nhiều năng lượng hơn trên bất kỳ điểm cuối bị ràng buộc nào).

Một tin nhắn MQTT QoS 2 sẽ liên tục bị gửi lại từ người gửi cho đến khi nhận được xác nhận từ nhà môi giới, vì vậy cuối cùng tin nhắn của bạn sẽ được thông qua, ngay cả khi kết nối của bạn không hoàn hảo.

Giao thức đăng ký xuất bản dựa trên chủ đề có phù hợp với trường hợp sử dụng hay không là tùy thuộc vào bạn để xác định; bài viết Wikipedia có thể giúp bạn có một ý tưởng.


1
Cảm ơn @ Aurora0001 cho công việc của bạn và trả lời. Bất kỳ cơ chế nào về giao tiếp / không đồng bộ thông điệp dựa trên giao thức HTTP hoặc dựa trên gói IP hoặc có thể nói loại lửa và quên? Giả sử một kịch bản - Hệ thống A gửi tin nhắn đến Hệ thống B. Trong hệ thống A 5 tin nhắn được tạo / chuẩn bị gửi theo thứ tự như - 1,2,3,4,5. Trong hệ thống B nhận được tin nhắn như - 1,4,5. Ở đây, hệ thống B đã bỏ lỡ bản ghi / gói / dữ liệu cho 2 3. Vậy cơ chế nào có thể đồng bộ hóa giữa Hệ thống AB mà không bị thiếu, không có bản ghi trùng lặp sử dụng chuyến đi / băng thông / mạng tối thiểu
user1467280-Satyajit sự thật
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.