Scenariusz
Urządzenie IoT (obecnie urządzenie IPv4), które wysyła przez gniazdo TCP ładunek do serwera raz dziennie. Serwer ma publiczny adres IP, urządzenie znajduje się za routerem / NAT. Użyję modułu opartego na ESP8266 (tj. Olimex)
Celem serwer powinien być w stanie wysyłać dane do każdego klienta, gdy zajdzie potrzeba. Nie interesuje mnie bezpośrednia komunikacja klient-klient (tj. Połączenie urządzenia z moim smartfonem), tak jak powinno to robić dziurkowanie.
Inne wymagania
Urządzenia IoT mogą wzrosnąć nawet do kilku tysięcy. Ich połączenie internetowe zapewnia wiele routerów / modemów z obsługą 4G. Każdy będzie obsługiwał 10-20 klientów.
Proponowane rozwiązanie
O ile rozumiem, powszechnym rozwiązaniem jest MQTT. Klienci okresowo wysyłają dane do brokera (tj. Mosquitto działającego na serwerze hostingowym), który z kolei aktualizuje główną aplikację internetową działającą na tym samym serwerze.
Pytanie
Czy podejście MQTT jest odpowiednie dla „dużej” liczby urządzeń (1000+), większość z nich za routerem 4G?
Odpowiedzi:
1000 porządnych brokerów MQTT może łatwo obsłużyć 1000 klientów; istnieje Scalagent, który pokazuje, że komputer z:
może obsłużyć 60 000 wydawców korzystających z Mosquitto. Jest to znacznie więcej niż wymagane 1000 wydawców, więc nawet na stosunkowo słabym serwerze powinieneś być w stanie obsłużyć wymaganą liczbę.
Niektórzy inni brokerzy twierdzą nawet o lepszej wydajności (oczywiście przy odpowiednio większej mocy serwera), na przykład HiveMQ , który twierdzi, że obsługuje 10 milionów wydawców.
Brokerzy MQTT zazwyczaj oczekują trwałego połączenia i przekroczą limit czasu klientów, którzy nie wysyłają okresowo odpowiedzi ping (lub innych działań). Możesz odłączyć się od sieci po opublikowaniu, ale oczywiście nie będziesz w stanie niczego otrzymać, jeśli się rozłączysz.
MQTT obsługuje koncepcję „zatrzymanych” wiadomości, które mogą być przydatne. Klient WWW może opublikować coś w temacie z zachowaną flagą, a następnie broker zapisze tę wiadomość. Za każdym razem, gdy klienci ponownie się połączą i zasubskrybują ten temat, otrzymają zachowaną wiadomość (nawet jeśli została opublikowana kilka godzin temu). Zatrzymany komunikat jest publikowany za każdym razem, gdy klient subskrybuje ten temat, więc może ci to pomóc, jeśli masz nieregularne połączenie i potrzebujesz wiadomości, która będzie przechowywana do momentu ponownego połączenia się klienta.
źródło
Możesz używać trwałych sesji od klientów, np. Czysta flaga ustawiona na false podczas łączenia. W takim scenariuszu, gdy klient jest w trybie offline, broker zbuforuje komunikat do własnej pamięci podręcznej i dostarczy go po połączeniu urządzenia.
O ilości - 10 000 to stosunkowo niska kwota nawet dla jednego serwera. Możesz skonfigurować serwer Linux, aby utrzymywał 500 000 aktywnych połączeń, a jeśli twój broker będzie działał w chmurze, np. Zapewniany jako usługa przez jakiegoś dostawcę, możesz utrzymywać z nim nawet miliony aktywnych połączeń.
Nawiasem mówiąc, myślę, że Mosquitto lub jakakolwiek inna instalacja lokalna jest idealnym wyborem do programowania i testowania, ale kiedy wejdziesz do produkcji, potrzebujesz brokera SaaS MQTT ze wszystkimi funkcjami, takimi jak HA, redundancja, przełączanie awaryjne itp.
źródło