Programovanie

Stručný prehľad reaktívnych systémov

O reaktívnych systémoch sa za posledných pár rokov veľa hovorilo. Spolu s hláškami prichádza aj zbierka relevantných šalátov pre kľúčové slová, ako sú reaktívne prúdy, reaktívne rozšírenia, reaktívne programovanie, funkčné reaktívne programovanie atď. Ak ste v technologickom priemysle dosť dlho, videli ste cyklické výkyvy a pády módnych slov a skratky z času na čas. Je to teda všetko ďalší čoskoro očakávaný humbuk?

Počul som, že softvéroví inžinieri odmietali reaktívne systémy ako nič iné ako alias pre asynchrónne systémy založené na udalostiach, podobne ako spôsob, akým niektorí odmietajú mikroslužby ako SOA (architektúra orientovaná na služby), menej ESB (zbernica podnikových služieb). Aj keď sa často objavujú technologické módne slová s novým významom, v reaktívnych systémoch vidím dosť výrazných čŕt, aby som si myslel, že názov nie je iba ďalším aliasom.

Čo sú reaktívne systémy?

Reaktívny manifest popisuje základné charakteristiky reaktívnych systémov: citlivé, pružné, elastické a založené na správach. To dáva obraz na vysokej úrovni a znie trochu všeobecne. Najmä schopnosť reagovať, pružnosť, pružnosť opísaná v manifeste sú v dnešnej dobe takmer štandardnými požiadavkami mnohých aplikácií v reálnom svete.

Možno „na základe správ“ je požiadavka, ktorá skutočne odlišuje reaktívne systémy od ostatných. Reaktívny systém sa pod kapotou spolieha na interakcie prostredníctvom asynchrónneho prenosu správ, ktoré stanovujú hranice medzi jednotlivými komponentmi. Takýto model interakcie pomáha vydláždiť cestu k voľnému spojeniu časovo aj lokálne pre súbežnosť a distribuovateľnosť. Okrem toho umožňuje, aby bol systém integrovaný s niektorými neblokujúcimi mechanizmami na reguláciu tokov údajov (podrobnejšie nižšie).

Reaktívne prúdy

Pri budovaní reaktívnych systémov sa zdá, že existuje výrazný prístup, pri ktorom sú operácie spracovania údajov, kedykoľvek je to vhodné, formulované ako toky zloženého toku. To nie je súčasťou požiadaviek Reaktívneho manifestu, ale môže to byť inherentný model interakcie založený na správach v reaktívnych systémoch, ktorý prirodzene uprednostňuje takýto prístup modelovania zameraný na prúd.

Reaktívne prúdy, ktoré sa zjavne vyvinuli ako samostatná iniciatíva, sa dajú považovať za špecifický typ reaktívnych systémov, ktoré sa sústreďujú okolo spracovania prúdov a vyjadrujú kompozičné prúdy ako riadené grafy.

Protitlak

Jedným z vyššie spomenutých neblokujúcich regulačných mechanizmov je protitlak. Môže to byť najvyhľadávanejšia funkčnosť pre systémy, ktoré implementujú reaktívne toky. Je to asynchrónny mechanizmus spätnej väzby, ktorý pracuje v opačnom smere prúdu smerom k protiprúdovým komponentom na reguláciu záťaže.

Vďaka zabudovanému protitlaku, ktorý reguluje prietoky prúdu neblokujúcim spôsobom, je systém schopný pracovať s relatívne stabilnejším využitím pamäte. Takáto funkčnosť eliminuje potenciálne devastačné problémy s pretečením zásobníka (napr. Spôsobené pomalým poklesom údajov), ktorým by sa zvyčajne muselo čeliť mechanizmom na vytváranie vlastných vyrovnávacích pamätí údajov v celom toku toku.

Čo reaktívne programovanie?

Ako paradigma programovania pre budovanie reaktívnych systémov zdôrazňuje reaktívne programovanie formulovanie logiky asynchrónneho programovania ako dátových tokov a automatické šírenie zmien hodnôt korelovaných premenných v systéme. Jazyky použité pre takúto paradigmu programovania by poskytovali vhodné zložiteľné funkcie na prácu s formulovanými prúdmi.

Podľa návrhu reaktívne programovanie uprednostňuje štýl funkčného programovania, ktorý vyjadruje a rieši výpočtové problémy pomocou skladateľných funkcií. Napriek tomu existencia pojmu funkčné reaktívne programovanie predchádza tomuto reaktívnemu „pohybu“ o viac ako desať rokov. FRP má výrazne odlišné zameranie a sústreďuje sa na používanie funkcií na vyjadrenie správania v nepretržitom čase s jednoduchou denotačnou sémantikou. Napriek tomu sa teraz často považuje za reaktívne programovanie s výslovným dôrazom na funkčné programovanie.

Ak ilustrácia s kódom funguje lepšie, odporúčam prečítať si výukový príspevok Andreho Staltza, ktorý popisuje podstatu reaktívneho programovania v JavaScripte pomocou RxJS.

ReactiveX

ReactiveX, alias Reactive Extensions, je knižnica API, ktorá umožňuje použitie kompozičných operácií na spracovanie prúdov asynchrónnych udalostí. Pozorovateľné objekty a pozorovatelia (ktorí predplatia pozorovateľné objekty), ktoré sa rozširujú od vzoru pozorovateľa, tvoria kľúčové zložky v knižnici so sadou skladateľných operátorov na filtrovanie, transformáciu, agregáciu atď. RxJS a RxJava sú dve z najpopulárnejších implementácií ReactiveX v JavaScripte a Java.

Herci Akka

Akka je hercovská knižnica zameraná na vytváranie škálovateľných súbežných a distribuovaných aplikácií na JVM (Java Virtual Machine). V jadre sú výpočtové primitívy nazývané herci, ktorí udržiavajú stav a správanie a komunikujú medzi sebou prostredníctvom asynchrónneho prenosu správ.

Herci Akka, napísaní v Scale, sú od prírody ľahký a voľne spojený. To spolu s robustnými funkciami smerovania, zdieľania a pub-sub od spoločnosti Akka pre škálovateľné distribuované systémy, ako je IoT, z nich robia skvelú platformu pre budovanie reaktívnych systémov.

Prúdy Akka

Predným účastníkom (a zakladajúcim členom) iniciatívy reaktívnych prúdov je spoločnosť Akka Streams. Je postavený na vrchole aktérov Akky a poskytuje rozsiahlu sadu rozhraní API na vytváranie topológií prúdov a spracovanie prúdov vysoko kompozičným spôsobom. Nedávny blogový príspevok o banských centrách okolo tokov Akka a o tom, ako je možné ho použiť na vykonávanie niektorých základných funkcií ťažby textu.

Zdá sa, že Akka streamuje ako reaktívna iniciatíva, ktorá sa v týchto dňoch snaží. Ovládače založené na prúdoch Akka, ako napríklad Reactive Rabbit a ReactiveMongo for RabbitMQ a MongoDB, začali v technologickom priemysle naberať na obrátkach. Akka HTTP, ktorá je ďalšou generáciou súboru nástrojov Spray REST / HTTP, je navyše skonštruovaná tak, aby umožňovala streamovanie, pričom základným nástrojom sú prúdy Akka.

Všetky prúdy orientované - nejakým spôsobom

S neustále rastúcou hybnou silou pri prijímaní iniciatívy reaktívnych systémov zjavne prekonala fázu číreho humbuku. Je to tiež zjavne viac ako vynovené módne slovo asynchrónnych systémov založených na udalostiach. Z hľadiska technických zásluh nevidím dôvod, prečo sa nestane výraznejším. Napriek tomu sú dokonca aj iniciatívy v oblasti open-source technológií ako komerčné produkty - dobré načasovanie môže v počiatočnom štádiu rýchlo prilákať pozornosť a vhodný marketing môže pomôcť získať aktuálny trend potrebný na popularizáciu v širšej užívateľskej základni.

Čo sa týka časovania, funkčné programovanie je na vzostupe, takže by som povedal, že je to skvelé načasovanie, pretože programovací štýl je priaznivo obsiahnutý v budovaní reaktívnych systémov. Pokiaľ ide o marketing, som presvedčený, že intuitívnejšie a zjavnejšie pomenovanie iniciatívy by sa lepšie predalo technologickému priemyslu. Pri prvom pojme „reaktívne systémy“ by sa dalo ťažko uchopiť niečo zmysluplné. Aj keď pojem „reaktívny“ označuje určitý aspekt prijatého šírenia zmien v takýchto systémoch, nevyskakuje na publikum ako charakteristická vlastnosť.

Vzhľadom na to, že reaktívne systémy, reaktívne prúdy a reaktívne programovanie sú prevažne orientované okolo prúdov, myslím si, že termín „prúd“ je zjavnejším kľúčovým slovom ako „reaktívny“. Pri obchodovaní s univerzálnosťou s jednoduchosťou a intuíciou by som spojil reaktívne systémy a reaktívne prúdy ako jednu iniciatívu a nahradil by som „reaktívne“ niečím, čo sa sústreďuje okolo „prúdu“.

$config[zx-auto] not found$config[zx-overlay] not found