Reaktív programozás
A reaktív programozás mostanában egy elég pezsgő irányzat, melynek fejlődését mindenképp érdemes nyomon követni. A reaktív programozás mibenlétéről megoszlanak a vélemények, de amit először érdemes megemlíteni, az a Reaktív Kiáltvány (The Reactive Manifesto).
A kiáltvány szerint a modern alkalmazásokkal kapcsolatban már más, nem funkcionális követelmények merülnek fel, pl. a válaszidő, a rendelkezésre állás, az adatmennyiség, a skálázhatóság és a hibatűrés tekintetében, valamint más környezetekben futnak, ugyanis a felhő és konténerizáció nagyon elterjedt.
Mikor reaktív programozást használunk, az alkalmazást úgy építjük fel, hogy az az adatok aszinkron folyamára reagáljon. Ezen adatfolyamok lehetnek a felhasználótól beérkező események, adatbázisban történő változások, más alkalmazásoktól vagy (pl. IoT) eszközöktől érkező üzenetek.
Ahhoz, hogy a rendszer reszponzív tudjon maradni, meg kell akadályozni, hogy ezen elemek olyan ütemben érkezzenek be, hogy azok elárasszák a feldolgozó komponenst (fogyasztó), ezáltal az túlterhelődjön, belassuljon, esetleg hibázzon. Erre egy mechanizmus a back pressure, az ellenállóképesség az elárasztással szemben. Ennek egyik típusa a non-blocking back pressure, mely úgy oldja meg ezt a védelmet, hogy a feldolgozó komponens kéri el a következő elemeket az elemek forrásától (termelő), ráadásul csak annyit, amennyit biztonságosan fel tud dolgozni, ezáltal akadályozva meg a túlterhelést.
A reaktív programozást tipikusan funkcionális stílusban használjuk (functional reactive programming (FRP)), ahol az alapegység a függvény. Ennek jellemzője, hogy deklaratív, ezáltal könnyebben olvasható, karbantartható és javítható. Apró egységekből, újrafelhasználható operátorokból így komplex megoldásokat lehet elkészíteni.
Ez az elv programozási nyelv független. A legtöbb programozási nyelvhez több reaktív keretrendszer is elérhető, sőt vannak olyan keretrendszerek, melyek a legtöbb programozási nyelven elérhetőek és hasonlóan használhatók (ilyen például a ReactiveX vagy Vert.X). Ezen keretrendszerek Java nyelven is elérhetőek, de vannak további implementációk is, mint a Project Reactor, mely a Spring mögött álló Pivotal megvalósítása.
A reaktív programozás fontosságát az is mutatja, hogy az egyik legelterjedtebb és dinamikusan fejlődő Java keretrendszer, a Spring Framework 5 egyik legnagyobb újdonsága egy reaktív webes keretrendszer, a Spring WebFlux. Jellemzője, hogy aszinkron, nem blokkoló futást és funkcionális programozást tesz lehetővé, valamint a más platformokon bizonyító keretrendszerekhez hasonlóan a kiszolgálás kevés újrafelhasználható szálon történik (event loop workers).
A Project Reactor-ról, Spring WebFlux-ról részletesen szó esik a Haladó Spring keretrendszer eszközök képzésen.
(A szerző, Viczián István a témáról workshopot tartott a III. Országos IT Megmérettetés Díjátadó rendezvényén, melynek a Training360 is kiemelt támogatója volt.)