Tak trochę się żalę, trochę śmieję przez łzy. Trafiłem do nowego projektu, bo jak zwykle coś tam trzeba na kiedyś tam zrobić, bo klient chce, czeka i coś tam a projekt niby w Java. Aplikacja to typowy CRUD. Ile może trwać zadanie typu "obsłuż request, weź dane z bazy, zapakuj w zwrotkę i odeślij"? Zwykle chwila moment. Ale tutaj wchodzi do gry wybitna wręcz architektura tego cuda, na widok której barokowi mistrzowie architektury chlipaliby jak przedszkolaki w kątach zaprojektowanych przez siebie katedr.
Wygląda to tak:
- Jest warstwa w Javie. Nie robi prawie nic, poza tym, że istnieje, sprawdza jakieś tam uprawnienia i podobne pierdoły i oczywiście wystawia endpointy.
- Przyjętego requesta jakoś tam lekko modyfikuje i wywołuje synchronicznie serwis w Pythonie (P1)
- P1 pakuje to co dostał w wiadomość i umieszcza w kolejce
- Wiadomość z kolejki odbiera kolejny serwis z logiką biznesową, wywołuje sobie metodę wskazaną wprost w wiadomości
- Pakuje to co dostanie z monolitycznej bazy danych w kolejną wiadomość i wrzuca na kolejkę.
- Z kolejki wiadomość czekający na nią z utęsknieniem P1, szuka wiszącego requesta i likwiduje asynchroniczność
- Java dostaje response z P1 i nic z nim nie robiąc odsyła do klienta.
Żeby było śmieszniej, to Java (która nie robi nie...) jest napisana w technologii ogłoszonej 15 lat temu jako retired. Z jakiegoś nieznanego mi powodu baza danych jest "własnym silnikiem". No i żeby pozwolić na customizację tego cuda, na jakimś etapie stworzenia dołączono do tego jeszcze DSL'a do customizacji.