MQTT có thể mở rộng với hơn 1000 khách hàng không?


10


Thiết bị IoT kịch bản (thiết bị hiện tại là IPv4) gửi qua ổ cắm TCP một tải trọng đến máy chủ một lần mỗi ngày. Máy chủ có địa chỉ IP công cộng, thiết bị nằm phía sau bộ định tuyến / NAT. Tôi sẽ sử dụng một mô-đun dựa trên ESP8266 (tức là Olimex)

Mục tiêu
Máy chủ sẽ có thể gửi dữ liệu tới bất kỳ khách hàng nào bất cứ khi nào cần. Tôi không quan tâm đến giao tiếp trực tiếp giữa khách hàng với khách hàng (nghĩa là kết nối với thiết bị từ điện thoại thông minh của tôi) như việc bấm lỗ được cho là phải làm.

Các yêu cầu khác
Các thiết bị IoT có thể tăng lên đến vài nghìn. Kết nối Internet của họ được cung cấp bởi nhiều bộ định tuyến / modem hỗ trợ 4G. Mỗi người sẽ xử lý 10-20 khách hàng.

Giải pháp đề xuất
Theo tôi hiểu một giải pháp phổ biến là MQTT. Các máy khách định kỳ gửi dữ liệu cho nhà môi giới (tức là Mosquitto đang chạy trên máy chủ lưu trữ), đến lượt nó cập nhật ứng dụng web chính chạy trên cùng một máy chủ.

Câu hỏi
Cách tiếp cận MQTT có phù hợp với số lượng thiết bị "lớn" (1000+) hầu hết trong số chúng nằm sau bộ định tuyến 4G không?


Có thể tốt hơn là đặt câu hỏi (1) riêng biệt và chỉ hỏi câu hỏi (2) phù hợp với tiêu đề của bạn trong thân câu hỏi. Bằng cách này, chúng tôi có thể giải quyết từng câu hỏi của bạn một cách chi tiết. Bạn có thể bao gồm bối cảnh của bạn một lần nữa trong câu hỏi mới hoặc liên kết đến câu hỏi này nếu nó giúp.
Aurora0001

1
Câu hỏi thay đổi và thêm cái thứ hai.
Đánh dấu

Từ âm thanh của nó, ngay cả khi bạn gặp phải sự cố tải máy chủ với số lượng kết nối mở cao, hệ thống của bạn sẽ khá tương thích với một loại cấu trúc liên kết cây nơi các máy khách kết nối với các máy chủ trung gian giữ các phiên tương ứng và vượt qua lưu lượng không thường xuyên lên xuống các máy chủ cao hơn trong một đường ống mỗi cái. Bạn thậm chí có thể thực hiện tầng thứ nhất này trong bộ định tuyến 4G của mình.
Chris Stratton

Câu trả lời:


7

1.000 khách hàng có thể dễ dàng được xử lý bởi bất kỳ nhà môi giới MQTT phong nha nào; có một điểm chuẩn từ Scalagent cho thấy một PC có:

  • bộ xử lý Intel Core 2 Duo 3 GHz
  • RAM 4 GB

có thể xử lý 60.000 nhà xuất bản chạy Mosquitto. Con số này vượt xa 1.000 nhà xuất bản cần thiết của bạn, vì vậy ngay cả trên một máy chủ tương đối yếu, bạn vẫn có thể xử lý số lượng yêu cầu.

Một số nhà môi giới khác yêu cầu hiệu suất thậm chí tốt hơn (tất nhiên là có sức mạnh máy chủ lớn hơn), chẳng hạn như HiveMQ , công ty đã tuyên bố xử lý 10 triệu nhà xuất bản.

Các nhà môi giới MQTT thường mong đợi một kết nối liên tục và sẽ hết thời gian khách hàng không gửi phản hồi ping (hoặc hoạt động khác) theo định kỳ. Bạn có thể ngắt kết nối mạng sau khi xuất bản, nhưng, rõ ràng, sau đó bạn sẽ không thể nhận được bất cứ điều gì nếu bạn ngắt kết nối.

MQTT không hỗ trợ khái niệm tin nhắn 'giữ lại' có thể hữu ích. Máy khách web có thể xuất bản một cái gì đó cho một chủ đề với cờ được giữ lại và thông báo này sau đó sẽ được lưu trữ bởi nhà môi giới. Bất cứ khi nào khách hàng của bạn kết nối lại và đăng ký chủ đề, họ sẽ nhận được tin nhắn được giữ lại (ngay cả khi nó được xuất bản vài giờ trước). Tin nhắn được giữ lại được xuất bản mỗi khi khách hàng đăng ký chủ đề đó, do đó có thể giúp bạn nếu bạn có kết nối chắp vá và cần lưu trữ tin nhắn cho đến khi khách hàng kết nối lại.


Tôi chắc chắn đã giải thích nó sai. Chỉ máy chủ (dịch vụ lưu trữ thương mại) mới xử lý hơn 1000 khách hàng. Có nhiều bộ định tuyến 4G ở nhiều nơi khác nhau và mỗi bộ sẽ chỉ xử lý 10-20 khách hàng.
Đánh dấu

Ồ, tôi đã đọc sai - lỗi của tôi, @Mark, tôi cho rằng bạn có nghĩa là tất cả chúng đằng sau một bộ định tuyến 4G. Tôi sẽ chỉnh sửa nó trong trường hợp đó.
Aurora0001

Tôi chưa hiểu đầy đủ về mã cơ bản của MQTT - Tôi sợ về các kết nối 4G: MQTT có yêu cầu kết nối Internet liên tục không? Có khả năng mạng sẽ không ổn định ...
Đánh dấu

Tôi đã chỉnh sửa với một số đề xuất, @Mark; Hãy cho tôi biết nếu điều đó chỉ cho bạn đi đúng hướng.
Aurora0001

1
Vâng, bây giờ rõ ràng hơn. Tôi sẽ thực hiện một số tìm kiếm thêm về chủ đề này và nếu tôi vẫn cần sự giúp đỡ, tôi sẽ hỏi một câu hỏi khác. Cảm ơn rất nhiều.
Đánh dấu

5

Bạn có thể sử dụng các phiên liên tục từ máy khách, ví dụ: cờ sạch được đặt thành false khi kết nối. Trong trường hợp kịch bản đó khi máy khách của bạn ngoại tuyến, bộ đệm sẽ gửi thông báo cho nó vào bộ đệm riêng và gửi nó sau khi thiết bị sẽ kết nối.

Về số lượng - 10K là số tiền tương đối thấp ngay cả đối với một máy chủ. Bạn có thể định cấu hình máy chủ Linux để giữ 500K kết nối hoạt động và nếu nhà môi giới của bạn sẽ dựa trên đám mây, ví dụ như được cung cấp dưới dạng dịch vụ bởi một số nhà cung cấp, thì bạn có thể giữ hàng triệu kết nối hoạt động với nó.

Nhân tiện, tôi nghĩ Mosquitto hoặc bất kỳ cài đặt cục bộ nào khác là sự lựa chọn hoàn hảo để phát triển và thử nghiệm, nhưng khi bạn đi vào sản xuất, bạn cần nhà môi giới SaaS MQTT với tất cả các tính năng như HA, dự phòng, chuyển đổi dự phòng, v.v.


Tôi không nghĩ một nhà môi giới SaaS MQTT luôn là tốt nhất cho sản xuất. Hầu hết các nhà môi giới MQTT chuyên nghiệp (tự lưu trữ) đều hỗ trợ HA, dự phòng và chuyển đổi dự phòng ở quy mô trong khi vẫn duy trì khả năng tương thích MQTT đầy đủ. Một số nhà môi giới SaaS không hỗ trợ tất cả các tính năng MQTT. Nếu bạn kiểm tra một mosquitto địa phương và sau đó đến nhà cung cấp SaaS, rất có thể mọi thứ không hoạt động trong sản xuất như dự định.
Dominik Obermaier

Như thường lệ, có những ưu và nhược điểm của cả hai lựa chọn. Rõ ràng là bất kỳ nhà môi giới SaaS nào cũng yêu cầu đội ngũ giao tiếp hoàn hảo, thử nghiệm dài hạn ở giai đoạn đầu phát triển sản phẩm, đảm bảo thời gian hoạt động rõ ràng và SLA khác nhau. Duy trì môi giới riêng cũng là một cách tốt đẹp, nhưng thế giới đang chuyển sang các dịch vụ. Bạn sẽ nỗ lực và thành thạo nhất với sản phẩm sử dụng nhà môi giới như một phần của nó hoặc bạn sẽ dành thời gian và tiền bạc để trở thành quản trị viên môi giới MQTT siêu kinh nghiệm (và không bao giờ là nhà phát triển của nó!). Chỉ là vấn đề lựa chọn +)
shal
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.