Tapahtumalähtöinen arkkitehtuuri

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 23.9.2021 tarkistetusta versiosta . tarkastukset vaativat 5 muokkausta .

Tapahtumaohjattu  arkkitehtuuri ( EDA ) on ohjelmistoarkkitehtuurimalli , joka mahdollistaa tapahtumien luomisen, määrittelyn, kulutuksen ja reagoinnin .

Tapahtuma voidaan määritellä "suureksi tilanmuutokseksi " [1] . Esimerkiksi kun asiakas ostaa auton, auton tila muuttuu "myydystä" tilasta "myyty". Autokauppiaan järjestelmäarkkitehtuuri voi käsitellä tätä tilanmuutosta tapahtumana, jonka arkkitehtuurin eri sovellukset luovat, julkaisevat, määrittävät ja kuluttavat.

Tätä arkkitehtuurimallia voidaan soveltaa sellaisten sovellusten ja järjestelmien suunnittelussa ja toteutuksessa, jotka viestivät tapahtumista löyhästi kytkettyjen ohjelmistokomponenttien ja palvelujen välillä . Tapahtumaohjattu järjestelmä sisältää tyypillisesti tapahtumalähteitä (tai agentteja) ja tapahtuman kuluttajia (tai nieluja). Singit ovat vastuussa reagoinnista, kun tapahtuma on tapahtunut. Reaktio voi olla kokonaan nielun aiheuttama tai ei. Esimerkiksi nielu voi olla vastuussa vain tapahtuman suodattamisesta, muuntamisesta ja toimittamisesta toiselle komponentille, tai se voi luoda oman reaktion tähän tapahtumaan. Ensimmäinen nielujen luokka voi perustua perinteisiin komponentteihin, kuten viestintäväliohjelmistoon, ja toinen nielujen luokka (joka muodostaa oman vastauksensa toiminnan aikana) saattaa vaatia sopivamman tapahtuman suoritusalustan.

Sovellusten ja järjestelmien luominen tapahtumalähtöiseen arkkitehtuuriin mahdollistaa niiden suunnittelun tavalla, joka edistää parempaa vuorovaikutusta, koska tapahtumapohjaiset järjestelmät ovat rakenteeltaan enemmän ennakoimattomia ja asynkronisia ympäristöjä kohti [2] .

Tapahtumaohjattu arkkitehtuuri vastaa palvelukeskeistä arkkitehtuuria (SOA), koska palvelut voidaan aktivoida saapuvien tapahtumien laukaisemilla triggereillä [2] [3] .

Tämä paradigma on erityisen hyödyllinen silloin, kun nielu ei suorita omaa toimintojensa suorittamista.

Tapahtumalähtöinen palvelukeskeinen arkkitehtuuri kehittää SOA- ja EDA-arkkitehtuuria tarjoamaan syvemmän ja vankemman palvelukerroksen hyödyntämällä aiemmin tuntemattomia syy-seuraussuhteita uuden tapahtumamallin muodostamiseksi. Tämä uusi business intelligence -malli johtaa prosessoinnin automatisoimiseen ja lisää yritykseen aiemmin saavuttamatonta tuottavuutta lisäämällä arvokasta tietoa tunnistettuun toimintamalliin.

Tapahtuman rakenne

Tapahtuma voi koostua kahdesta osasta: tapahtuman otsikosta ja tapahtuman rungosta. Tapahtuman otsikko voi sisältää tietoja, kuten tapahtuman nimen, tapahtuman aikaleiman ja tapahtuman tyypin. Tapahtumarunko kuvaa, mitä todella tapahtui. Tapahtuman runkoa ei pidä sekoittaa malliin tai logiikkaan, jota voidaan soveltaa vastauksena tapahtumiin.

Tapahtuman kulkutasot

Tapahtumalähtöinen arkkitehtuuri koostuu neljästä loogisesta kerroksesta. Se alkaa varsinaisesta soundista, sen teknisestä esittämisestä tapahtuman muodossa ja päättyy ei-tyhjiin reaktioihin tähän tapahtumaan. [neljä]

Tapahtumageneraattori

Ensimmäinen looginen kerros on tapahtumageneraattori, joka rekisteröi tosiasian ja esittää sen tapahtumana. Koska käytännössä kaikki, mikä voidaan havaita, voi olla tosiasia, niin voi tapahtua myös tapahtumageneraattori. Esimerkkinä generaattori voi olla sähköpostiohjelma, verkkokauppajärjestelmä tai jonkinlainen anturi. Eri anturitietojen muuntaminen yhdeksi standardoiduksi dataksi, joka voidaan arvioida, on suuri haaste tämän kerroksen suunnittelussa ja toteutuksessa. [4] Koska tapahtuma on kuitenkin tiukasti deklaratiivinen, kaikkia muunnosoperaatioita voidaan helposti soveltaa, mikä eliminoi korkeatasoisen standardoinnin tarpeen.

Tapahtumakanava

Tapahtumakanava on mekanismi, jonka kautta informaatio välitetään tapahtumageneraattorista tapahtumankäsittelymekanismiin [4] tai nielulle.

Tämä voi olla TCP/IP-yhteys tai minkä tahansa tyyppinen syöttötiedosto (pelkkä teksti, XML-muoto, sähköposti jne.). Useita tapahtumakanavia voi olla auki samanaikaisesti. Tyypillisesti lähes reaaliaikaisen tapahtumakäsittelyn vaatimusten vuoksi tapahtumakanavat luetaan asynkronisesti. Tapahtumat tallennetaan jonoon odottamaan tapahtumamoottorin myöhempää käsittelyä.

Tapahtumankäsittelymekanismi

Tapahtumankäsittelymekanismi on paikka, jossa tapahtuma tunnistetaan ja siihen valitaan sopiva reaktio, joka sitten suoritetaan. Tämä voi myös johtaa useiden väitteiden syntymiseen. Jos esimerkiksi käsittelykoneeseen saapunut tapahtuma ilmoittaa, että "Tuote N on loppumassa", tämä seikka voi aiheuttaa "Tilaa tuote N" ja "Ilmoita henkilökunnalle" -reaktiot. [neljä]

Tapahtumalähtöinen seurantatoimi

Tässä tapahtuman seuraukset. Se voi ilmetä eri tavoilla ja muodoissa; esimerkiksi jollekulle lähetetty viesti tai sovellus, joka näyttää jonkinlaisen varoituksen näytöllä. [4] . Riippuen nielun (tapahtumamoottorin) tarjoamasta automaatiotasosta nämä vaiheet eivät välttämättä ole tarpeellisia.

Tapahtumankäsittelytyylit

On olemassa kolme päätapahtumien käsittelytyyliä: yksinkertainen, kierteitetty ja monimutkainen. Usein näitä kolmea tyyliä käytetään yhdessä suuressa tapahtumalähtöisessä arkkitehtuurissa [4] .

Yksinkertainen tapahtumien käsittely

Yksinkertainen tapahtumakäsittely koskee tapahtumia, jotka liittyvät suoraan tiettyihin mitattavissa oleviin olosuhteiden muutoksiin. Yksinkertaisella tapahtumankäsittelyllä tapahtuu tunnettuja tapahtumia, jotka laukaisevat jälkivaikutuksia. Yksinkertaista tapahtumankäsittelyä käytetään yleisesti työnkulun hallintaan reaaliajassa, mikä vähentää viivettä ja kustannuksia [4] .

Esimerkiksi yksinkertaisia ​​tapahtumia generoi anturi, joka havaitsee rengaspaineen tai ympäristön lämpötilan muutoksen.

Tapahtumavirtaa käsitellään

Tapahtumavirran käsittelyn (ESP) aikana tapahtuu sekä normaaleja että tunnettuja tapahtumia. Säännölliset tapahtumat (komennot, RFID-lähetykset) tarkistetaan ja välitetään tiedon tilaajille. Tapahtumavirran käsittelyä käytetään yleisesti tietovirran hallintaan reaaliajassa ja yritystasolla, mikä mahdollistaa oikea-aikaisen päätöksenteon [4] .

Monimutkaisten tapahtumien käsittely

Monimutkaisen tapahtumakäsittelyn avulla voit tarkastella yksinkertaisten ja tavallisten tapahtumien sarjoja ja päätellä monimutkaisen tapahtuman esiintymistä. Monimutkainen tapahtumakäsittely arvioi tapahtumien keskinäisen vaikutuksen ja ryhtyy sitten toimiin. Tapahtumat (tunnetut tai yleiset) eivät välttämättä seuraa kirjoittamista ja tapahtuvat pitkiä aikoja. Tapahtumakorrelaatio voi olla kausaalinen, ajallinen tai spatiaalinen. Monimutkaisten tapahtumien käsittely edellyttää monimutkaisten tapahtumatulkkien, tapahtumakuvioinnin ja -sovituksen sekä korrelaatiomenetelmien käyttöä. Monimutkaista tapahtumakäsittelyä käytetään yleisesti tunnistamaan poikkeavia käyttäytymismalleja, uhkia ja mahdollisuuksia ja reagoimaan niihin [4] .

Erittäin heikko sidonta ja hyvä jakelu

Tapahtumalähtöinen arkkitehtuuri on äärimmäisen löyhästi kytketty ja jakautunut hyvin. Tämän arkkitehtuurin paras jakelu johtuu siitä, että tapahtuma voi olla mikä tahansa, mikä on olemassa missä tahansa. Arkkitehtuuri on äärimmäisen löyhästi kytketty, koska tapahtuma itse ei tiedä tapahtumisensa seurauksia, eli jos meillä on turvajärjestelmä, joka tallentaa tiedot, kun etuovi avataan, niin ovi itse ei tiedä, että turvajärjestelmä lisää tietoa oven avaamisesta. [neljä]

Toteutukset ja esimerkit

Java Swing

Java Swing -kirjasto perustuu tapahtumalähtöiseen arkkitehtuuriin. Tämä liittyy erityisen hyvin Swingin motivaatioon tarjota käyttöliittymään liittyviä komponentteja ja toimintoja. Käyttöliittymä käyttää nimeämiskäytäntöjä (kuten "ActionListener" ja "ActionEvent") tapahtumien välisten suhteiden järjestämiseen. Luokka, jolle on ilmoitettava jostain tapahtumasta, yksinkertaisesti toteuttaa sopivan kuuntelijan, ohittaa perityt menetelmät ja lisätään tapahtuman herättävään objektiin. Alla on yksinkertaisin esimerkki:

public class FooPanel laajentaa JPanel toteuttaa ActionListener { public FooPanel () { super (); JButton btn = uusi JButton ( "Klikkaa minua!" ); btn . addActionListener ( tämä ); tämä . lisää ( btn ); } @Override public void actionPerformed ( ActionEvent ae ) { Järjestelmä . ulos . println ( "Painiketta on klikattu!" ); } }

Vaihtoehtona on upottaa kuuntelija objektiin nimettömänä luokkana . Alla on esimerkki.

public class FooPanel laajentaa JPanel { public FooPanel () { super (); JButton btn = uusi JButton ( "Klikkaa minua!" ); btn . addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent ae ) { System . out . println ( "Painiketta on klikattu!" ); } }); } }

Sama Java 8 toiminnallinen tyylikoodi, jossa käytetään lambdaa nimettömän luokan sijaan:

public class FooPanel laajentaa JPanel { public FooPanel () { super (); JButton btn = uusi JButton ( "Klikkaa minua!" ); btn . addActionListener ( ae -> System . out . println ( "Painiketta on klikattu!" )); } }

Node.js

Palvelinpuolen JavaScript-alusta hyödyntää laajasti tapahtumageneraattoreita ( EventEmitter ). Monet Noden objektit luovat tapahtumia: net.Server herättää tapahtuman jokaisesta saapuvasta pyynnöstä, fs.readStream herättää tapahtuman, kun tiedosto avataan. Esimerkki työskentelystä EventEmitterin kanssa:

bar.js:

var Foo = vaatia ( "./foo.js" ). Foo , foo = uusi Foo (); foo . addListener ( "kirjoita" , function () { konsoli . loki ( "Bar" ); });

foo.js:

var EventEmitter = vaatia ( "tapahtumat" ). Tapahtumalähettäjä , Foo = funktio () { var foo = tämä ; foo . kirjoittaa = funktio () { konsoli . loki ( "foo" ); foo . emit ( "kirjoita" ); }; setTimeout ( this . write , 3000 ); }; foo . prototyyppi = uusi EventEmitter (); vientiä . foo = foo ;

Katso myös

Linkit

Muistiinpanot

  1. K. Mani Chandy Tapahtumalähtöiset sovellukset: Kustannukset, hyödyt ja suunnittelun lähestymistavat, California Institute of Technology , 2006
  2. 1 2 Jeff Hanson, Tapahtumapohjaiset palvelut SOA:ssa Arkistoitu 2. kesäkuuta 2013 Wayback Machinessa , Javaworld , 31. tammikuuta 2005
  3. Carol Sliwa Tapahtumalähtöinen arkkitehtuuri valmiina laajaan käyttöön Arkistoitu 20. maaliskuuta 2017 Wayback Machinessa , Computerworld , 12. toukokuuta 2003
  4. 1 2 3 4 5 6 7 8 9 10 Brenda M. Michelson, Tapahtumalähtöisen arkkitehtuurin yleiskatsaus, Patricia Seybold Group , 2. helmikuuta 2006

Linkit