Programiranje

Kratek pregled reaktivnih sistemov

V zadnjih nekaj letih se je veliko govorilo o reaktivnih sistemih. Skupaj z brenčanjem prihaja zbirka ustreznih solat s ključnimi besedami, kot so reaktivni tokovi, reaktivne razširitve, reaktivno programiranje, funkcionalno reaktivno programiranje itd. Če ste že dovolj dolgo v tehnološki industriji, ste videli ciklične vzpone in padce modnih besed in kratice od časa do časa. Torej, je vse to še en kmalu zastarel hype?

Slišal sem, da so programski inženirji reaktivne sisteme zavrnili kot nič drugega kot vzdevek za asinhrone sisteme, ki temeljijo na dogodkih, podobno kot nekateri zavrnejo mikrostoritve kot SOA (storitveno usmerjena arhitektura) in manj ESB (poslovno servisno vodilo). Medtem ko se pogosto pojavljajo tehnološke modne besede z novo izumljenim pomenom, v reaktivnih sistemih vidim dovolj značilnih lastnosti, da mislim, da ime ni le drug vzdevek.

Kaj so reaktivni sistemi?

V reaktivnem manifestu so opisane bistvene značilnosti reaktivnih sistemov: odziven, prožen, elastičen in usmerjen v sporočila. To daje sliko na visoki ravni in zveni nekoliko splošno. Zlasti odzivnost, odpornost in elastičnost, opisani v manifestu, so danes skoraj običajne zahteve številnih resničnih aplikacij.

Morda je "s sporočilom usmerjena zahteva" tista, ki resnično razlikuje reaktivne sisteme od drugih. Pod pokrovom se reaktivni sistem zanaša na interakcije prek asinhronega prenosa sporočil, ki vzpostavlja meje med posameznimi komponentami. Takšen model interakcije pomaga utirati pot do ohlapnega povezovanja tako časovno kot lokacijsko za sočasnost oziroma razširljivost. Poleg tega omogoča, da je sistem v celoti opremljen z nekaterim neblokirajočim mehanizmom za regulacijo podatkovnih tokov (več o tem spodaj).

Reaktivni tokovi

Zdi se, da je pri gradnji reaktivnih sistemov viden pristop, pri katerem so postopki obdelave podatkov, kadar je to primerno, oblikovani kot tokovi kompozicijskih tokov. To ni del zahtev v reaktivnem manifestu, lahko pa je vgrajeni model sporočilnega interakcijskega modela v reaktivnih sistemih, ki je naravno naklonjen takšnemu pristopnemu modeliranju, usmerjenemu v tok.

Na reaktivne tokove, ki so se očitno pojavili kot ločena pobuda, lahko gledamo kot na posebno vrsto reaktivnih sistemov, ki se osredotočajo na obdelavo tokov in izražanje kompozicijskih tokov kot usmerjenih grafov.

Protitlak

Eden od prej blokiranih regulativnih mehanizmov je povratni pritisk. Morda je to najbolj iskana funkcionalnost sistemov, ki izvajajo reaktivne tokove. To je asinhroni povratni mehanizem, ki deluje v nasprotni smeri toka proti gorvodnim komponentam za regulacijo obremenitve.

Z vgrajenim povratnim tlakom, ki uravnava pretok toka na neblokirajoč način, lahko sistem deluje s sorazmerno bolj stabilnimi izkoristki pomnilnika. Takšna funkcionalnost odpravlja potencialno uničujoče težave s prelivanjem skladov (npr. Zaradi počasnega ponora podatkov), ki bi jih bilo običajno treba preprečiti z mehanizmom medpomnjenja podatkov za izdelavo po meri v celotnih tokovih toka.

Kaj pa reaktivno programiranje?

Kot programska paradigma za gradnjo reaktivnih sistemov reaktivno programiranje poudarja oblikovanje asinhrone programske logike kot podatkovnih tokov in samodejno širjenje sprememb vrednosti koreliranih spremenljivk v sistemu. Jeziki, ki se uporabljajo za takšno programsko paradigmo, bi zagotovili ustrezne sestavljive funkcije za delovanje na oblikovanih tokovih.

Reaktivno programiranje je po svoji zasnovi naklonjeno funkcionalnemu programskemu slogu, ki izraža in rešuje računske težave z uporabo sestavljivih funkcij. Kljub temu obstoj izraza funkcionalno reaktivno programiranje pred tem reaktivnim "gibanjem" presega več kot desetletje. FRP ima zelo drugačen fokus in se osredotoča na uporabo funkcij za izražanje vedenja v neprekinjenem času s preprosto denotacijsko semantiko. Vendar se zdaj to pogosto obravnava kot reaktivno programiranje z izrecnim poudarkom na funkcionalnem programiranju.

Če ilustracija s kodo deluje bolje, priporočam, da preberete tutorski prispevek Andreja Staltza, ki opisuje bistvo reaktivnega programiranja v JavaScriptu z uporabo RxJS.

ReactiveX

ReactiveX, aka Reactive Extensions, je knjižnica API, ki omogoča uporabo kompozicijskih operacij za obdelavo tokov asinhronih dogodkov. Razširjeni od vzorca opazovalca so opazovalci in opazovalci (ki so naročniki opazovanih elementov) ključne sestavine knjižnice z naborom sestavljivih operaterjev za filtriranje, pretvorbo, združevanje itd. RxJS in RxJava sta dve najbolj priljubljeni izvedbi ReactiveX v JavaScript in Java.

Akka igralci

Akka je knjižnica, ki temelji na igralcih in je namenjena gradnji razširljivih sočasnih in distribuiranih aplikacij na JVM (Java Virtual Machine). V njenem jedru so računski primitivi, imenovani akterji, ki vzdržujejo stanje in vedenje ter med seboj komunicirajo z asinhronim prenosom sporočil.

Akka igralci, napisani v Scali, so po naravi lahki in ohlapno povezani. To je skupaj z zmogljivimi funkcijami usmerjanja, ostrenja in pub-sub programa Akka za razširljive porazdeljene sisteme, kot je IoT, odlična platforma za gradnjo reaktivnih sistemov.

Potoki Akka

Vodja (in ustanovni član) pobude za reaktivne tokove je Akka Streams. Zgrajen je na vrhu akterjev Akka in ponuja obsežen nabor API-jev za izdelavo topologij tokov in obdelavo tokov na zelo kompozicijski način. Nedavna objava v blogu o rudniških središčih okoli potokov Akka in o tem, kako jo lahko uporabimo za osnovno rudarjenje besedila.

Očitno si v današnjem času prizadeva Akka stream kot reaktivna pobuda. Gonilniki, ki temeljijo na Akka-Streams, kot sta Reactive Rabbit in ReactiveMongo za RabbitMQ in MongoDB, so začeli dobivati ​​nekaj zagona v tehnološki industriji. Poleg tega je Akka HTTP, ki je naslednja generacija nabora orodij Spray REST / HTTP, prav tako zgrajena tako, da jo omogoča tok z akka tokovi kot osnovnim mehanizmom.

Vsi tokovi usmerjeni - na nek način

Z nenehno naraščajočim zagonom pri sprejemanju pobude za reaktivne sisteme je očitno presegel stopnjo zgolj hype. Očitno gre tudi za več kot le znova izumljeno besedo asinhronih sistemov, ki temeljijo na dogodkih. S stališča tehničnih zaslug ne vidim razloga, zakaj ne bi postal bolj viden. Kljub temu pa so celo odprtokodne tehnološke pobude podobne komercialnim izdelkom - dober čas lahko hitro pritegne pozornost v začetni fazi, primerno trženje pa lahko pripomore k stalnemu zagonu, ki je potreben za popularizacijo širše uporabniške baze.

Časovno funkcionalno programiranje je v porastu, zato bi rekel, da je to časovno ugodno, saj je slog programiranja ugodno sprejet pri gradnji reaktivnih sistemov. Kar zadeva trženje, menim, da bi se bolj intuitivno in razkrito poimenovanje pobude bolje prodajalo tehnološki industriji. Ko bi prvič slišali izraz "reaktivni sistemi", bi težko razumeli kaj pomembnega. Čeprav izraz "reaktiven" obravnava nekatere vidike razširjenega širjenja sprememb v takšnih sistemih, občinstva ne naleti na značilnost.

Z reaktivnimi sistemi, reaktivnimi tokovi in ​​reaktivnim programiranjem, ki so pretežno usmerjeni okoli tokov, mislim, da je izraz "tok" bolj razkrivajoča ključna beseda kot "reaktivni". Trgovanje splošnosti s preprostostjo in intuicijo bi združil reaktivne sisteme in reaktivne tokove kot eno samo pobudo in "reaktivni" nadomestil z nečim, kar se osredotoča na "tok".

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