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 :).
A czy przypadkiem Java nie jest popularna w High-frequency trading?
- GC to niekoniecznie problem, masz takie rzeczy jak ZGC które teoretycznie nie mają fazy stop-the-world
- 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
- Szukaj raczej pod low-latency i HFT, nie pod real-time
Link do artykułu:
http://www.aicas.com/papers/jtres_hunt_wceta.pdf
Hasło do googla: RTSJ
Wprowadzenie:
https://www.sysgo.com/solutions/technology-solutions/guest-os/real-time-java/
Książka:
https://www.amazon.com/Real-Time-Specification-Java-James-Gosling/dp/0201703238
Stary artykuł:
https://www.oracle.com/technetwork/articles/javase/index-137216.html
Trochę nowszy:
https://www.oracle.com/technetwork/articles/java/nilsen-realtime-pt2-2264409.html
Gotowiec:
https://www.aicas.com/cms/en/JamaicaVM
Coś mniej okazałego:
http://www.aero-project.org/
Zapomniane rozwiązanie:
http://www.drdobbs.com/jvm/jbed-java-for-real-time-systems/228801031
Na Amazon hasło "real time java" w książkach daje całkiem sensowną listę.
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 :).
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.