OZ_2018_1-2

30 ORGANIZACIJA ZNANJA 2018, LETN. 23, ZV. 1 - 2 razpoložljive. Tu pa seveda nastopi velik izziv za razvijalce in ponudnike storitev, ki morajo imeti tako ekonomski kot poslovni pozitivni rezultat. Ob tem se zastavlja vprašanje, kako zagotoviti rešitve za zadovoljitev zahtev in potreb uporabnikov ter za podporo različnih naprav in arhitekturnih rešitev, ki so danes v oblaku, pri tem pa jih kljub nenehnemu povpraševanju po storitvah kot dodatnih rešitvah zaradi skalabilnosti ne bo treba dograjevati in popravljati. Kot odgovor oziroma rešitev se ponuja reaktivni pristop. V preteklosti je bil odgovor na asinhrone storitve bolj negativen kot pozitiven in šele leta 2009 smo dobili arhitekturo, ki je to omogočala (WebSockets, Servlets 3.0) (Krajnc, et al., 2016). S tem so se možnosti asinhronega pristopa povečale in nekatere rešitve so bile tudi že izvedene. Ker pristop k reaktivnemu programiranju omogoča takšne tehnološke zahteve, je s tem upravičen. ZNA^ILNOSTI REAKTIVNEGA PROGRAMIRANJA Koncept reaktivnega programiranja opisuje The Reactive Manifesto, ki je bil prvotno objavljen leta 2013 (The Reactive Manifesto (v2.0)) (Bonér, et al., 2014). Po tem manifestu so rešitve tega tipa (torej reaktivne rešitve) tiste, v katerih se kažejo naslednje štiri glavne lastnosti: • odzivnost (angl. responsive ), • odpornost (angl. resilient ), • elastičnost (angl. elastic ) in • sporočilna usmerjenost (angl. mesagge driven ). Slika 1: Povezanost glavnih lastnosti reaktivnih rešitev (Vir: Bonér, et al., 2014) Odzivnost pomeni, da se rešitve na uporabniške zahteve odzivajo dovolj hitro in v vsakem stanju sistema. Rešitve se po navadi odzivajo le, če je sistem v dobrem stanju. Da bo rešitev odzivna, sta nujno potrebni visoka skalabilnost in odpornost. Ponazorimo s primerom: aplikacija postane neodzivna, če podatkovna baza (strežnik) odpove ali je v zagonu in vse povezave do baze postanejo neaktivne. Če rešitev ni odzivna, uporabniki nimajo zaupanja v konsistentno delovanje aplikacije, s tem pa izgubljamo končne uporabnike ter posledično njihove namige in ideje. Odpornost zagotavlja, da so storitve odzivne tudi v primeru odpovedi. Rešitve so načeloma sestavljene iz različnih komponent in referenc ter zunanjih storitev. Rešitev se mora ne glede na to, na kateri komponenti so se težave pojavile, pravilno odzvati. To dosegamo z replikacijo, izolacijo in delegacijo komponent. Elastičnost pomeni, da se rešitve odzivajo tudi, ko je sistem pod velikimi obremenitvami. Reaktivni sistem reagira tako, da poveča ali zmanjša število virov, ki so potrebni za zadovoljevanje uporabniških zahtev. Skalabilnost povečamo s povečevanjem procesorjev (CPU) in pomnilnih enot (RAM), pri čemer gre za vertikalno skaliranje na vozliščih (računalniki, strežniki ipd.), in z dodajanjem oziroma odvzemanjem novih računalnikov ter strežnikov, kar je poznano kot horizontalno skaliranje (Krajnc, et al., 2016). Sistem je v takšnem primeru arhitekturno zelo težko postaviti, saj to zahteva znanja tako o programiranju kot o omrežjih ter tudi znanja o podatkovnih bazah, replikacijah baz in virtualizaciji strežnikov, in to v klasični in/ali oblačni izvedbi. Sporočilnausmerjenost je temelj reaktivnega programiranja. Rešitve uporabljajo asinhrono pošiljanje sporočil.Asinhroni načini komunikacije so prisotni že v dosedanjih rešitvah, vendar le kot parcialni deli rešitve v določeni aplikaciji (npr. pošiljanje sporočil iz vrste, ko je določeno opravilo v delovnem krogu doseglo zaključek). V reaktivnem primeru rešitve pa to, da je vgrajena sporočilna usmerjenost v jedru rešitve, pomeni, da je zasnova rešitve bolj kompeksna in se že od začetka zasnove aplikacije tega zavedamo. REAKTIVNE RE[ITVE IN MIKROSTORITVE Po definiciji je sistem množica elementov in povezav med njimi. Če si rešitev zamislimo kot informacijsko rešitev, potem elemente določajo storitve, povezave pa so klici med njimi oziroma komunikacija med storitvami, ki jih ponujamo uporabnikom. Pri sodobnih rešitvah govorimo o servisno orientiranih rešitvah, pri reaktivnih rešitvah pa o mikrostoritvah ali mikroservisih. Že sama beseda pove, da gre za manjše sklope rešitev, katerih značilnosti so majhnost, enostavnost in opravljanje ene funkcije. S tem se nekako približamo definiciji in značilnostim reaktivnega programiranja, kar pomeni, da morajo mikrostoritve zagotavljati izolacijo, enojno odgovornost, lastništvo podatkov in asinhronost (Krajnc, et al., 2016). Mikrostoritve med seboj po navadi v zadnjem času uporabljajo komunikacijski protokol HTTP+REST+JSON , ki pa sam po sebi ni asinhron (Krajnc, et al., 2016). Izolacija pomeni, da morajo biti mikrostoritve neodvisne od drugih, s tem so šibko sklopljene. Izolacija v tem primeru pomeni, da predvsem lažje obravnavamo odpoved sistema in/ali nadzor, ki se nanaša le na eno komponento. Janko Žigart: REAKTIVNO PROGRAMIRANJE

RkJQdWJsaXNoZXIy MTAxMzI5