Ohjelmointi

Lyhyt katsaus reaktiivisiin järjestelmiin

Parin viime vuoden aikana reaktiivisista järjestelmistä on puhuttu paljon. Buzzin mukana tulee kokoelma asiaankuuluvia avainsanasalaatteja, kuten reaktiiviset virrat, reaktiiviset laajennukset, reaktiivinen ohjelmointi, toiminnallinen reaktiivinen ohjelmointi jne. Jos olet ollut tekniikkateollisuudessa riittävän kauan, olet nähnyt sanojen suhdanteiden ylä- ja alamäkiä ja lyhenteitä ajoittain. Joten, onko kaikki tämä toinen pian vanhentuva hype?

Olen kuullut ohjelmistoinsinöörien hylkäävän reaktiiviset järjestelmät pelkkänä aliaksena asynkronisille tapahtumapohjaisille järjestelmille, aivan kuten tapa, jolla jotkut hylkäävät mikropalvelut, koska SOA (palvelukeskeinen arkkitehtuuri) vähemmän ESB (yrityspalveluväylä). Vaikka keksittyjä merkityksiä sisältäviä tekniikkasanoja esiintyy usein, näen reaktiivisissa järjestelmissä tarpeeksi erottuvia piirteitä ajattelemaan, että nimi ei ole pelkästään toinen alias.

Mitä ovat reaktiiviset järjestelmät?

Reaktiivinen manifesti kuvaa reaktiivisten järjestelmien olennaiset ominaisuudet: reagoiva, joustava, joustava ja viestiohjattu. Se antaa korkean tason kuvan ja kuulostaa hieman yleiseltä. Erityisesti manifestissa kuvattu reagointikyky, joustavuus ja joustavuus ovat melkein vakiovaatimuksia monille nykymaailman sovelluksille.

Ehkä "sanomavetoinen" on vaatimus, joka erottaa reaktiiviset järjestelmät muista. Konepellin alla reaktiivinen järjestelmä luottaa vuorovaikutukseen asynkronisen sanomanvälityksen kautta, joka muodostaa rajat yksittäisten komponenttien välille. Tällainen vuorovaikutusmalli auttaa tasoittamaan tietä löysälle kytkemiselle sekä ajallisesti että sijaintikohtaisesti samanaikaisuuden ja jakelukyvyn suhteen. Lisäksi se mahdollistaa järjestelmän integroidun varustamisen jollakin estämättömällä mekanismilla tietovirtojen säätämiseksi (lisätietoja tästä alla).

Reaktiiviset virrat

Reaktiivisten järjestelmien rakentamisessa näyttää olevan näkyvä lähestymistapa, jossa tietojenkäsittelyoperaatiot muotoillaan mahdollisuuksien mukaan koostumusvirtoina. Se ei ole osa reaktiivisen manifestin vaatimuksia, mutta se voi olla reaktiivisten järjestelmien luontainen viestiohjattu vuorovaikutusmalli, joka suosii luonnollisesti tällaista virtauskeskeistä mallintamistapaa.

Ilmeisesti syntyi erillisenä aloitteena, reaktiivisia virtoja voidaan pitää tietyntyyppisenä reaktiivisina järjestelminä, jotka keskittyvät virran käsittelyyn ja ilmaisevat koostumusvirrat suunnattuina kaavioina.

Vastapaine

Yksi aiemmin mainituista estämättömistä sääntelymekanismeista on vastapaine. Se voi olla halutuin toiminnallisuus järjestelmille, jotka toteuttavat reaktiivisia virtoja. Se on asynkroninen takaisinkytkentämekanismi, joka toimii virran vastakkaiseen suuntaan kohti ylävirran komponentteja kuormituksen säätämistä varten.

Kun sisäänrakennettu vastapaine säätelee virtauksia ei-estävällä tavalla, järjestelmä pystyy toimimaan suhteellisen vakaammalla muistin hyödyntämisellä. Tällainen toiminnallisuus eliminoi potentiaalisesti tuhoavat pinon ylivuoto-ongelmat (esim. Hitaan datan nielun aiheuttamat), joita yleensä tulisi torjua räätälöityjen tietojen puskurointimekanismilla koko virtausvirran ajan.

Entä reaktiivinen ohjelmointi?

Reaktiivisten järjestelmien rakentamisen ohjelmointiparadigmana reaktiivinen ohjelmointi korostaa asynkronisen ohjelmointilogiikan muotoilua datavirroiksi ja muutosten automaattista etenemistä vastaavien muuttujien arvoihin järjestelmässä. Tällaisessa ohjelmointiparadigmassa käytettävät kielet antaisivat sopivat komposiittitoiminnot toimimaan formuloiduissa virroissa.

Suunnittelulla reaktiivinen ohjelmointi suosii toiminnallista ohjelmointityyliä, joka ilmaisee ja ratkaisee laskennalliset ongelmat komposiittitoimintojen avulla. Termin "toiminnallinen reaktiivinen ohjelmointi" olemassaolo kuitenkin edeltää tätä reaktiivista "liikettä" yli vuosikymmenellä. FRP: llä on huomattavan erilainen painopiste ja se keskittyy toimintojen käyttämiseen käyttäytymisen ilmaisemiseksi jatkuvalla ajanjaksolla yksinkertaisella denotointisemantiikalla. Silti sitä pidetään nyt usein reaktiivisena ohjelmointina, jossa painotetaan nimenomaisesti toiminnallista ohjelmointia.

Jos koodi, jolla on koodi, toimii paremmin, suosittelen lukemaan Andre Staltzin opetusviestin, joka käy läpi JavaScriptin reaktiivisen ohjelmoinnin olemuksen RxJS: n avulla.

ReaktiivinenX

ReactiveX, alias Reactive Extensions, on API-kirjasto, joka mahdollistaa koostumusoperaatioiden käytön asynkronisten tapahtumien virtojen käsittelemiseksi. Tarkkailukuvion perusteella havainnoitavat kohteet ja tarkkailijat (jotka ovat havaittavien tilaajia) muodostavat kirjaston avainkomponentit joukolla komposiittisia operaattoreita suodattamista, muuntamista, yhdistämistä jne. Varten. RxJS ja RxJava ovat kaksi suosituinta toteutusta. ReactiveX JavaScriptissä ja Java vastaavasti.

Akka-näyttelijät

Akka on näyttelijäpohjainen kirjasto, joka on tarkoitettu skaalautuvien samanaikaisten ja hajautettujen sovellusten rakentamiseen JVM: lle (Java Virtual Machine). Sen ytimessä ovat laskennalliset primitiivit, joita kutsutaan toimijoiksi, jotka ylläpitävät tilaa ja käyttäytymistä ja kommunikoivat keskenään asynkronisen viestin välityksen kautta.

Scalassa kirjoitetut Akka-näyttelijät ovat luonteeltaan kevyitä ja löyhästi toisiinsa. Se yhdistettynä Akkan vankkaihin reititys-, sirpaloitumis- ja pub-sub-ominaisuuksiin skaalautuville hajautetuille järjestelmille, kuten IoT, tekevät niistä upean alustan reaktiivisten järjestelmien rakentamiseen.

Akka-virrat

Reaktiivisten virtojen aloitteen edelläkävijä (ja perustajajäsen) on Akka Streams. Se on rakennettu Akka-toimijoiden päälle ja tarjoaa laajan valikoiman sovellusliittymiä virtatopologioiden rakentamiseen ja striimien käsittelemiseen erittäin sommittelevalla tavalla. Äskettäinen blogikirjoitukseni keskittyy Akka-virtojen ympärille ja kuinka sitä voidaan käyttää perustekstin louhintaan.

Ilmeisesti Akka-virrat reaktiivisena aloitteena ovat pyrkineet näinä päivinä. Akka-Stream-pohjaiset ohjaimet, kuten Reactive Rabbit ja ReactiveMongo for RabbitMQ ja MongoDB, ovat alkaneet saada jonkin verran vauhtia teknologiateollisuudessa. Lisäksi Akka HTTP, joka on Spray REST / HTTP -työkalupaketin seuraava sukupolvi, on myös rakennettu suoratoistettavaksi Akka-suoratoistojen taustalla olevana moottorina.

Kaikki virrat suuntautuvat - jollakin tavalla

Kun reaktiivisten järjestelmien aloite hyväksytään jatkuvasti kasvavalla vauhdilla, se on ilmeisesti ylittänyt pelkän hypeyden tason. Se on myös ilmeisesti enemmän kuin asynkronisten tapahtumapohjaisten järjestelmien keksitty sanamerkki. Teknisten ansioiden näkökulmasta en näe mitään syytä, miksi se ei tule näkyvämmäksi. Siitä huolimatta jopa avoimen lähdekoodin teknologia-aloitteet ovat kuin kaupallisia tuotteita - hyvä ajoitus voi nopeasti herättää huomiota alkuvaiheessa ja sopiva markkinointi voi auttaa saamaan jatkuvan vauhdin, joka on tarpeen popularisoimiseksi laajemmalle käyttäjäkunnalle.

Ajoituksellisesti toimiva ohjelmointi on ollut nousussa, joten sanoisin sen olevan hyvä ajoitus, koska ohjelmointityyli on otettu huomioon reaktiivisten järjestelmien rakentamisessa. Markkinoinnin osalta uskon, että aloitteen intuitiivisempi ja paljastavampi nimeäminen myisi paremmin teknologiateollisuudelle. Tuskin voisi ymmärtää mitään merkityksellistä, kun ensimmäistä kertaa kuultiin termi "reaktiiviset järjestelmät". Vaikka termi "reaktiivinen" käsittelee joitain näkökohtia omaksutun muutoksen etenemisestä tällaisissa järjestelmissä, se ei hyppää yleisön keskelle allekirjoitusominaisuutena.

Reaktiivisilla järjestelmillä, reaktiivisilla virroilla ja reaktiivisella ohjelmoinnilla, jotka on suunnattu pääasiassa virtojen ympärille, mielestäni termi "virta" on enemmän paljastava avainsana kuin "reaktiivinen". Kaupankäyttäen yleisyyttä yksinkertaisuudella ja intuitiolla, yhdistäisin reaktiiviset järjestelmät ja reaktiiviset virrat yhtenä aloitteena ja korvasin "reaktiivisen" jollain, joka keskittyy "virran" ympärille.