Kratki pregled reaktivnih sustava

U posljednjih nekoliko godina puno se bruji o reaktivnim sustavima. Zajedno s buzom dolazi kolekcija relevantnih salata s ključnim riječima poput reaktivnih struja, reaktivnih ekstenzija, reaktivnog programiranja, funkcionalnog reaktivnog programiranja itd. Ako ste dovoljno dugo u tehnološkoj industriji, vidjeli ste ciklične uspone i padove modnih riječi i kratice s vremena na vrijeme. Pa, je li sve to još jedan hiper koji uskoro treba datirati?

Čula sam softverske inženjere koji reaktivne sustave odbacuju kao ništa drugo do zamjensko ime za asinkrone sustave temeljene na događajima, slično kao što neki odbacuju mikroservise kao SOA (uslužno orijentirana arhitektura), manje ESB (poslovna sabirnica usluga). Iako se često pojavljuju tehnološke modne riječi s izmišljenim značenjem, u reaktivnim sustavima vidim dovoljno prepoznatljivih osobina da pomislim kako naziv nije samo još jedan alias.

Što su reaktivni sustavi?

Manifest reaktivne reakcije opisuje bitne karakteristike reaktivnih sustava: reagirajući, elastični, elastični i vođeni porukama. To daje sliku na visokoj razini i zvuči pomalo generički. Konkretno, odziv, elastičnost i elastičnost opisani u manifestu danas su gotovo standardni zahtjevi mnogih stvarnih aplikacija.

Možda je "vođen porukom" zahtjev koji uistinu razlikuje reaktivne sustave od ostalih. Ispod haube, reaktivni se sustav oslanja na interakcije putem asinkronog prosljeđivanja poruka koje uspostavljaju granice između pojedinih komponenata. Takav model interakcije pomaže utrti put ka labavom spajanju kako vremenskog, tako i lokacijskog, radi istodobnosti i distributivnosti. Uz to, omogućuje sustav da bude integralno opremljen nekim neblokirajućim mehanizmom za regulaciju protoka podataka (više o tome u nastavku).

Reaktivni tokovi

U izgradnji reaktivnih sustava čini se da postoji istaknuti pristup u kojem se postupci obrade podataka, kad god je to primjenjivo, formuliraju kao kompozicijski tokovi tokova. To nije dio zahtjeva u reaktivnom manifestu, ali to bi mogao biti svojstveni model interakcije vođen porukom u reaktivnim sustavima koji prirodno favorizira takav pristup usmjeren na tok.

Očigledno nastali kao zasebna inicijativa, reaktivni se tokovi mogu promatrati kao posebna vrsta reaktivnih sustava koji se usredotočuju na obradu tokova, izražavajući kompozicijske tokove kao usmjerene grafikone.

Protutlak

Jedan od prethodno blokiranih regulatornih mehanizama je povratni pritisak. To je možda najtraženija funkcionalnost za sustave koji implementiraju reaktivne tokove. To je asinkroni mehanizam povratne sprege koji djeluje u suprotnom smjeru struje prema gornjim dijelovima za regulaciju opterećenja.

S ugrađenim povratnim tlakom koji regulira protok protoka na neblokirajući način, sustav može raditi s relativno stabilnijom iskorištenošću memorije. Takva funkcionalnost eliminira potencijalno razarajuće probleme s preljevom steka (npr. Uzrokovane sporim potopanjem podataka) kojima bi se obično trebalo suprotstaviti prilagođenim mehanizmom međuspremnika podataka tijekom protoka toka.

Što je s reaktivnim programiranjem?

Kao programska paradigma za izgradnju reaktivnih sustava, reaktivno programiranje naglašava formuliranje asinkrone programske logike kao tokova podataka i automatsko širenje promjena vrijednosti koreliranih varijabli u sustavu. Jezici koji se koriste za takvu paradigmu programiranja pružili bi prikladne funkcije za sastavljanje koje će raditi na formuliranim strujama.

Dizajn, reaktivno programiranje favorizira funkcionalni stil programiranja koji izražava i rješava računske probleme koristeći funkcije koje se mogu sastaviti. Ipak, postojanje pojma funkcionalno reaktivno programiranje prethodi ovom reaktivnom "pokretu" za više od deset godina. FRP ima znatno drugačiji fokus i usredotočuje se na korištenje funkcija za izražavanje ponašanja tijekom kontinuiranog vremena jednostavnom denotacijom semantike. Ipak, to se danas često gleda kao reaktivno programiranje s izričitim naglaskom na funkcionalnom programiranju.

Ako ilustracija s kodom bolje funkcionira, preporučujem pročitati tutorial Post Andreja Staltza koji korača kroz bit reaktivnog programiranja u JavaScript-u pomoću RxJS-a.

ReactiveX

ReactiveX, aka Reactive Extensions, API je knjižnica koja omogućuje upotrebu kompozicijskih operacija za obradu tokova asinkronih događaja. Proširujući se od uzorka promatrača, promatrači i promatrači (koji su pretplatnici promatračkih mjesta) čine ključne sastojke u knjižnici s nizom sastavnih operatora za filtriranje, transformaciju, agregiranje itd. RxJS i RxJava dvije su od najpopularnijih implementacija ReactiveX u JavaScript i Java.

Akka glumci

Akka je knjižnica zasnovana na glumcima namijenjena izgradnji skalabilnih istodobnih i distribuiranih aplikacija na JVM (Java virtualnom stroju). U njegovoj su srži računski primitivi zvani glumci koji održavaju stanje i ponašanje i međusobno komuniciraju asinkronim prosljeđivanjem poruka.

Napisani u Scali, glumci Akka po svojoj su prirodi lagani i labavo povezani. To ih, zajedno s Akkinim robusnim usmjeravanjem, oštrinom i pub-sub značajkama za skalabilne distribuirane sustave kao što je IoT, čini izvrsnom platformom za izgradnju reaktivnih sustava.

Potoci Akka

Predvodnik (i jedan od osnivača) inicijative reaktivnih tokova je Akka Streams. Izgrađen je na vrhu Akka glumaca i pruža opsežni skup API-ja za izgradnju topologija tokova i obradu tokova na vrlo kompozicijski način. Nedavni post na blogu o rudarskim centrima oko potoka Akka i kako se on može koristiti za obavljanje nekih osnovnih pretraživanja teksta.

Očigledno, Akka potoci kao reaktivna inicijativa nastoje ovih dana. Vozači temeljeni na Akka-Streams-u, poput Reactive Rabbit i ReactiveMongo za RabbitMQ i MongoDB, počeli su dobivati ​​zamah u tehnološkoj industriji. Osim toga, Akka HTTP, koja je sljedeća generacija Spray REST / HTTP alata, također je napravljena tako da se omogućuje stream s akka streamovima kao osnovnim pokretačem.

Svi potoci orijentirani - na neki način

Uz neprestano rastući zamah u usvajanju inicijative za reaktivne sustave, očito je premašio fazu pukog hypea. To je očito i više od ponovno izmišljene modne riječi asinkronih sustava temeljenih na događajima. Iz perspektive tehničkih zasluga, ne vidim razloga zašto to ne bi postalo istaknutije. Unatoč tome, čak su i tehnološke inicijative s otvorenim kodom poput komercijalnih proizvoda - dobar vremenski okvir može brzo privući pažnju u početnoj fazi, a prikladan marketing može pomoći u postizanju trajnog zamaha potrebnog za popularizaciju u široj bazi korisnika.

Vremenski funkcionalno programiranje je u porastu, pa bih rekao da je to izvrsno vrijeme, jer je stil programiranja povoljno prihvaćen u izgradnji reaktivnih sustava. Što se tiče marketinga, vjerujem da bi se intuitivnije i razotkrivajuće imenovanje inicijative bolje prodalo tehnološkoj industriji. Teško bi se moglo dokučiti bilo što značajno kad se prvi put čuje pojam "reaktivni sustav". Iako se izraz "reaktivan" odnosi na neki aspekt prihvaćenog širenja promjena u takvim sustavima, on publici ne iskače kao karakteristična karakteristika.

S reaktivnim sustavima, reaktivnim strujama i reaktivnim programiranjem pretežno orijentiranim oko potoka, mislim da je pojam "tok" više otkrivačka ključna riječ od "reaktivan". Trgujući općenitošću jednostavnošću i intuicijom, kombinirao bih reaktivne sustave i reaktivne tokove kao jednu inicijativu, a "reaktivni" bih zamijenio nečim što se usredotočuje na "tok".