Java Real Time - praca inżynierska.

Java Real Time - praca inżynierska.
infantylny
  • Rejestracja:około 6 lat
  • Ostatnio:6 dni
  • Postów:62
0

Cześć!
W poniedziałek idę do, być może, przyszłego promotora z tematem pracy inżynierskiej. Na początek chciałbym dowiedzieć się czy w ogóle coś takiego jest możliwe i czy warto w to brnąć. Otóż myślałem nad budową symulatora (tutaj wstaw coś technicznego, np. procesów chemicznych w oczyszczalni ścieków) jako aplikacji czasu rzeczywistego o miękkich wymaganiach czasowych, gdzie interfejs użytkownika będzie dostępny z poziomu przeglądarki internetowej. Sam interfejs zbudowałbym korzystając z HTML, CSS, JavaScript. Na pewno potrzebna będzie baza danych. Do symulatora dodałbym mechanizm adaptacji kroku symulacji (redukcja występujących opóźnień symulacji w stosunku do czasu rzeczywistego) aby "udawać" pracę w czasie rzeczywistym w środowisku , które takie nie jest. I tutaj pojawia się główny problem - serwer. Bardzo chciałbym wykorzystać Javę do stworzenia symulatora, jednak dość słabo nadaje się ona do rozwiązań Real Time z uwagi na Garbage Collector, ponieważ ciężko przewidzieć kiedy się uruchomi a w rozwiązaniach Real Time nie możemy pozwolić sobie na nawet krótkie przerwanie programu aby GC mógł sobie posprzątać. Ważną sprawą jest również protokół komunikacyjny, który zapewni komunikację w czasie rzeczywistym, jednak wybór ten zależy również od tego w jaki sposób zostanie zbudowany serwer. Przechodząc do sedna. Słyszał ktoś o rozwiązaniach Real Time w Javie? Jeśli tak to bardzo prosiłbym o jakieś słowa kluczowe lub linki do artykułów i czy można na tym zbudować serwer :).

WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:2 minuty
  • Postów:5139
0

A czy przypadkiem Java nie jest popularna w High-frequency trading?

Zobacz pozostałe 7 komentarzy
Shalom
No nie wszystko da się skalować w nieskończoność ;) Wyobraź sobie że masz n nodów które działają równolegle ale współdzielą jakiś rozproszony cache redisem czy hazelacastem, albo generują jakieś eventy na Kafkę -> gdzieś tam będzie bottleneck. W efekcie np. za dużo requestów może spowodować że kolejki requestów do obsłużenia zaczną puchnąć bo system nie będzie wyrabiać. Możesz mieć też mieć infrastrukturalny problem - może masz jakiś auto-scaling, load skoczył w górę i nowe instancje wstaną ale dopiero za minutę, a aktualne nie wyrabiają ;]
WeiXiao
@Aryman1983: no co ty ;)
Aryman1983
Aryman1983
@WeiXiao: fuck, bo już zbierałem partyzantkę złożoną z somekinda i aventusa :-) no i może z fasadina :-)
WeiXiao
@Aryman1983: biedny @ neves, @ Afish oraz @ Ktos, @ Juhas i @ szydlak @ W2K @ error91 :/
Aryman1983
Aryman1983
@WeiXiao: no zapomniałem :-)
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4
  1. GC to niekoniecznie problem, masz takie rzeczy jak ZGC które teoretycznie nie mają fazy stop-the-world
  2. Java jest stosowana w systemach low-latency, ale mimo wszystko to nie jest real-time. Nie masz "gwarancji" czasowych ani możliwości stosowania jakichś "przerwań". Z tego względu to raczej słaby wybór dla systemów sterowania, szczególnie takich które wymagają circuit breakerów i interlocków. Ale już w systemie z dużą bezwładnością (np. jakieś pompy wodne czy chłodzenie) pewnie spokojnie dałoby się to zrobić, bo to czy coś się wykona 5-10ms później nie robi różnicy
  3. Szukaj raczej pod low-latency i HFT, nie pod real-time

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Wibowit
ZGC (i Shenandoah GC) ma fazy STW, ale typowo na poziomie 1-2 ms. Brak STW jest chyba w Azul C4 - tam każdy wątek z osobna wisi sobie na alokacji, jeżeli GC nie nadąża z odśmiecaniem pamięci. Zaletą braku STW i zamiany go na pauzy podczas alokacji jest to, że wątki które aktualnie nic nie alokują nie będą w ogóle zatrzymywane. Głowy jednak za to nie dam, bo dawno nie czytałem o Azul C4.
Wibowit
Chociaż z drugiej strony, Azul zatrzymuje sobie wątki (niezależnie od siebie), by przeskanować ich stosy, więc jakieś tam minimalne zatrzymywanie tych wątków jest: https://www.artima.com/lejava/articles/azul_pauseless_gc.html The algorithm itself is a truly pauseless algorithm, meaning that at no point during this algorithm do you need to stop all the threads and not let them move. Individual threads may need to be stopped to do some scanning in their stacks or something, but other threads don't have to be stopped at the same time. It is technically a fully pauseless algo
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
2
edytowany 5x, ostatnio: vpiotr
infantylny
  • Rejestracja:około 6 lat
  • Ostatnio:6 dni
  • Postów:62
0

Dzięki wielkie za artykuły i za rady :). Próbował ktoś pisać rozwiązania RealTime w Javie? Czy implementacja kodu jest dużo bardziej złożona niż np. pisząc serwer w C++ i wykorzystując do komunikacji WebSocket? I czy miał ktoś do czynienia ze wspomnianą wyżej JamaicaVM? Nie chciałbym się wkopać z inżynierką w nie wiadomo jak złożony projekt. Niestety wymagania czasowe są raczej konieczne w pracy dyplomowej, przynajmniej osoba u której chciałbym robić pracę dyplomową tego wymaga. Chyba, że ktoś ma jakiś pomysł na projekt wykorzystujący Javę. Dodam że studiuję automatykę i robotykę, ze specjalizacją automatyka i systemy sterowania, więc sterowanie jakimś procesem byłoby tu raczej konieczne, zamiast tworzenia jakiejś fajnej gierki na telefon :).

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
2

Nie wiem czy hasła "web", "Web Socket", "JavaScript", "baza danych" jakoś można legalnie wiązać z hasłem "realtime".
Nie siedzę w tej branży i nie wiem do końca jak taki "symulator realtime" miałby wyglądać.

Może na zasadzie trój-warstwowej, nie wiem:

  • serwer: moduł real-time
  • serwer: pamięć współdzielona
  • serwer: serwer web
  • klient web

Nie wiem czy ten web w ogóle potrzebny. Nie wystarczy REST API?
Raczej byłbym za tym żeby zrobić z setkę benchmarków i statystyk niż żeby się jarać wyglądem czy frejmłorkiej JS który aktualnie jest na topie w tej połowie tygodnia.

infantylny
W zasadzie to chyba masz rację, na studiach i tak wykładowcy najbardziej lubią wykresiki :). Muszę bardziej pomyśleć nad tym co bym chciał zasymulować i w jaki sposób przedstawiać wyniki symulacji i przy okazji poczytam coś więcej o informacjach zawartych w Twoich linkach i wtedy ewentualnie zgłoszę się z problemami. Dzięki za pomoc :).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.