strzelanie do 2 tys endpointów

0

Hej,

potrzebuję uderzać do ok 2000 endpointów. Każdy z nich zwraca te same dane, ok 30 wartości pewnych parametrów. Większość wartości parametrów chciałbym uzyskiwać co 30 max 60 sekund. Kilka z nich co 1sek. Taki kolektor danych z moich urządzeń.

  1. Zastanawiam się czy job ( @Schedule ) lub kilka jobów ( w zależności od interwału ) + @Async metoda uderzająca na poszczególne końcówki "odpowiednio" to dobry pomysł? Odpowiednio, mam na myśli jakiś thread pool - tutaj jeszcze dokładnie nie wiem co i jak ?

  2. Użycie Prometeusza (https://prometheus.io/), skonfigurowanie pliku konfiguracyjnego yml na 2000 endpointów i puszczenie bestii w ruch. Tutaj jednak chciałbym dane pchać dalej do np. postgresa.

proszę o Wasze przemyślenia w tym tasku, sugestie, etc...

0

Jak potrzebujesz te dane ciągle to może lepiej użyć jakiegoś socketa/websocketa zamiast RESTa?

0

nie wiem jeszcze czy będę miał taką możliwość. Urządzenia są podpięte pod moduły internetowe ( jakieś, nie wiem na ten moment konkretów ).

4

Przetestuj. Zrób joba walnij reaktywnym web clientem w te 2000 endpointów i zobacz co się położy.
Jeżeli ty tworzesz urządzenia to pytanie czy lepiej nie byłoby odwrócić logiki aby to urządzenia wysyłały dane do serwera jak coś sie np zmieni.

0
Schadoow napisał(a):

Jeżeli ty tworzesz urządzenia to pytanie czy lepiej nie byłoby odwrócić logiki aby to urządzenia wysyłały dane do serwera jak coś sie np zmieni.

Dokładnie tak, odpytywanie 2000 endopitów to będzie jakaś maskra - potrzebujesz 2000 wątków, bo jak ci jeden endpoit przytnie ta całość siądzie.
Dużo tez zależy jakie to dane. Co z nimi chcesz zrobić. Czy możesz je agregować, czy chcesz trzymać w wersji surowej.

0

Może najprościej jak się da - task scheduler. Lecisz sobie paczkami (np. 100 endpointow, których czas na odpytanie minął) i wykonujesz dla każdej paczki zrownoleglone requesty, wyniki zapisujesz, przesuwasz daty kolejnego odpytania lub tworzysz nowe taski. Alternatywnie zamiast paczek większa liczba workerów. W obu podejściach potrzebujesz zrobić sobie pulę wątków.

Do tego potrzebny mechanizm obsługi błędów (np. retry, cb) i jakieś limitowanie, żeby nie zabić tych urządzeń.

0

ja nie tworzę tych urządzeń.
dane potrzebuję surowo wrzucić do bazy z oznaczeniem skąd one pochodzą ( id urządzenia ) oraz opatrzyć je timestampem.
Będę rozmawiał z gościem co tworzy te urządzenia, jednak wiem, że on coś kręci nosem na takie podejście.

0

a nie da sie zrobić jakiegoś agregatu, typu ze jedno urządzenie na danym obszarze to master ;) i odpytuje pozostałe i wysyła całość

0

dyskusja otwarta, jednak na ten moment najprawdopodobniej twórca tych urządzeń i sterownika, emitera, dorobi jakiś rest

0

Niekoniecznie potrzeba 2000 wątków, można mniej wątków i wtedy na jeden wątek przypada:

x = liczba endopointów / liczba wątków

Jeżeli jakiś endpoint przymuli to nie zablokuje wszystkiego tylko max x-1

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0