Wpis z mikrobloga

Mam do napisania aplikację serwerową do przetwarzania danych która:
1) Bierze dane A
2) Wczytuje z zewnętrznego źródła dodatkowe dane (nazwijmy je B)
3) Na podstawie tych dodatkowych danych B ustala dane C1, C2, C3
4) Na podstawie danych C1, C2, C3 odpytuje zewnętrzne źródło po dane D
5) Składa to wszystko w całość i produkuje "zbundlowaną paczkę danych"

Dobra, to teraz przeszkody:
* Dostęp do zewnętrznych zasobów w punktach (2) i (4) musi być synchroniczny i odbywać się co najwyżej 1 request per 1 sekundę (lub jeszcze wolniej) - występuje jakieś kolejkowanie
* Punkt (3) jest czaschłonny i każdy z danych C1, C2 i C3 są osobnymi danymi wyliczanymi z tego samego źródła
* Chciałbym przewalić jak najwięcej rekordów w jak najkrótszym czasie - częsci które mogą być asynchroniczne punkt (3) - wyliczanie danych - powinny być asynchroniczne
* Chciałbym aby sam proces danych był odporny na brak odpowiedzi z zewnętrznych źródeł czy złą odpowiedź (ponowne wysyłanie requestów do nich)
* Chciałbym mieć metryki jak szybko dane przepływają i co zabiera najwięcej czasu - do optymalizacji kodu.

Zastanawiam się nad użyciem jakieś kolejki (choć nie wiem czy to nie overkill). Dodatkowo nie wiem czy jakaś kolejka jest potrzebna - to jest w sumie problem architekturalny.

#programowanie #nodejs #algorytmy #pomocy
  • 3
@FlyingDutchman: 1. Jak występuje kolejkowanie, to jak wyślesz request to czekasz na odpowiedź, nie rozumiem tego problemu.
2. Zastosuj aktorów, niech mediator pobiera dane z B i rozdzieli zadania na 3 osobne wątki
3. Walidacja danych z requestów( prawdopodobnie wiesz jaką mają mieć strukturę) więc, jeżeli coś z nimi jest nie tak to odpytujesz się jeszcze raz.
4. Logger do mierzenia czasu?