Możesz wytłumaczyć o co chodzi ci z tym
data parallelism model
w kontekście mojego pytania? Nie czaję a internet w tym kontekście nie podpowiada.
Data parallelism bardziej pochodzi z AI/ML działki, gdzie mamy model sieci i on tam ma bardzo dużo danych do przetworzenia, żeby nauczyć model jak jeden odpalimy to on tam wykonuje zadanie w jakimś czasie, można kilka na raz uruchomić, a później po każdym wyliczeniu gradientu go akumulować i synchronicznie czy asynchronicznie uaktualniać modele na różnych maszynach, tak żeby miały aktualny model globalny.
Czyli ogólnie mówiąc masz kilka replik tego samego programu uruchomione, jeśli jakiś program nie jest wielordzeniowy tylko używa jednego rdzenia, a masz 8 rdzeni to możesz albo użyć aplikacji, która dobrze wykorzysta całe zasoby jednego urządzenia lub uruchomić kilka i rozłożyć obciążenie czy ilość pracy, a jak masz więcej niż jedno urządzenie czyli jakiś cluster to też są sposoby, żeby różne obliczenia na różnych maszynach wykonać i potem je zescalować, zmergować w jakimś punkcie lub na każdej maszynie zrobić replikę czyli uruchomić ten sam program czy mikrousługę.
W kontekście twojego pytania, ten przykład co dałeś tam gościu odpala hello world w springu, nginx robi za load balancer, to oba aplikacje spring robią to samo, tylko połączenia z ngixem są rozrzucane pomiędzy jeden i drugą aplikację spring równomiernie.
Sam nginx na 2 rdzeniach może utrzymać do 100k requestów na sekundę, a jakieś microserwisy mogą np. dawać radę po 1-10k requestów na sekundę i po ileś użytkowników za nim opóźnienia będą nieakceptowane dla komfortowego korzystania z aplikacji, bo wykonują więcej pracy i możesz zrobić kilka takich instancji żeby zmniejszych ich obciążenie.
Zależy też czy to jest cluster i te kontenery na innych maszynach czy na tej samej, bo możesz nie mieć wystarczajacej ilości rdzeni, żeby było optymalne trzymanie takiej ilości kontenerów.
Taki nodejs to głównie pracuje na jednym rdzeniu, a reszta wykonuje zadania w tle, ale też może mieć zapchany event loop na tyle, że czasem bardziej będzie opłacać się użyć większej ilości replik, ale takie rzeczy dopiero dowiesz się na benchmarkach bo oczami nie wyliczysz czy na tej samej maszynie będzie opłacać się uruchomić więcej czy po prostu jeśli aplikacja dobrze wykorzystuje wszystkie rdzenie to i tak nie ma zasobów w systemie więcej, żeby robić kopie, bo będą musiały się podzieli.
Można też zrobić nginxa jako router, czyli jeśli ktoś bije pod adres www.example.pl/api/
to wtedy rzucasz go do serwera spring:8080
, a jak ktoś zrobi www.example.pl/weather/
to dajesz go do innego mikroserwisu np. spring:8081
, który np. zapewnia dostęp do danych pogodowych czy czegoś innego.
Jak masz model AI co długo przetwarza dane to możesz mieć jakąś queue kafkę, gdzie np. spring wrzuca zadania, te są odbierane przez subskrybujące repliki tego samego modelu, tyle że na innych maszynach i jak skończą to wrzucają na inny topik i spring po przetworzeniu po jakimś czasie może zwrócić informację użytkownikowi o wykonaniu zadania.