Apache Ignite Null Deployments: tÔesti Null?

Apache Ignite Null Deployments: tÔesti Null?

Me oleme jaemĂŒĂŒgi tehnoloogia arenduse osakond. Ükskord pani juhtkond ĂŒlesande kiirendada mahukaid arvutusi, kasutades Apache Ignite'i koos MSSQL-iga, nĂ€idates suurepĂ€raseid illustreerimisi ja Java-koodi nĂ€iteid veebilehel. Veebileht meeldis kohe. Zero Deployment, mille kirjeldus lubab imesid: te ei pea oma Java vĂ”i Scala koodi igal node'il kĂ€sitsi paigaldama ja seda iga kord, kui see muutub, uuesti paigaldama. Töö kĂ€igus selgus, et Zero Deployment'il on kasutamise eripĂ€ra, mille spetsiifikaga soovin jagada. Edasi jĂ€rgnevad mĂ”tted ja rakenduse ĂŒksikasjad.

1. Probleemi mÀÀratlemine

Probleemi olemus on jĂ€rgmine. On olemas mĂŒĂŒgikohtade register SalesPoint ja toodete register Sku (Stock Keeping Unit). MĂŒĂŒgikohal on atribuut „tĂŒĂŒpmĂŒĂŒgikoht” vÀÀrtustega „vĂ€ike” ja „suur”. Iga mĂŒĂŒgikoha juurde on ĂŒhendatud (laaditud andmebaasist) sortiment (toodete nimekiri mĂŒĂŒgikohast) ning esitatakse teave selle kohta, et alates kindlast kuupĂ€evast antud toode
kustutatakse sortimendist vÔi lisatakse sortimenti.

Tuleb korraldada mĂŒĂŒgikohtade partitsioneeritud vahemĂ€lu ja salvestada sinna informatsioon ĂŒhendatud toodete kohta kuu ette. SĂ”jalise sĂŒsteemi ĂŒhilduvus nĂ”uab, et kliendi sĂ”lm Ignite laadib andmed, arvutab agregaat (poetĂŒĂŒp, tootekood, pĂ€ev, mĂŒĂŒgikohtade arv) ja eksportib selle tagasi andmebaasi.

2. Kirjanduse uurimine

Kogemust veel ei ole, seega alustan nullist. St. alustan vĂ€ljaannete ĂŒlevaatest.

2016. aasta artikkel Tutvumine Apache Ignite'iga: esimesed sammud sisaldab viidet Apache Ignite projekti dokumentatsioonile ja samas kriitikat selle ebamugava selguse osas. Lugesin paar korda uuesti, selgus ei tule. Pöördun ametliku Ôpetuse poole getting-started, mis
optimistlikult lubab, et "Sa saad kiiresti kĂ€ima!". Uurin keskkonnamuutujate seadeid, vaatan kahte videot Apache Ignite Essentials, mis olid minu konkreetse ĂŒlesande jaoks mitte eriti kasulikud. KĂ€ivitan Ignite'i edukalt kĂ€surealt standardfailiga "example-ignite.xml", loon esimese rakenduse Compute Application Maveniga. Rakendus töötab ja kasutab Zero Deployment'i, kui ilus!

Lugen edasi, seal on nÀide, mis kasutab kohe affinityKey (varasemalt loodud SQL-pÀringu kaudu) ja kohaldatakse salapÀrast BinaryObjecti:

IgniteCache<BinaryObject, BinaryObject> people 
        = ignite.cache("Person").withKeepBinary(); 

Lugesin veidi: binaarne formaat — midagi nagu refleksioon, juurdepÀÀs objekti vĂ€ljadele nime jĂ€rgi. Saab lugeda vĂ€lja vĂ€lja vÀÀrtust ilma objekti tĂ€ieliku deserialiseerimiseta (mĂ€luefektiivne). Miks kasutada BinaryObject'i, kui on olemas Zero Deployment? Miks IgniteCache<Key, Person> muudetakse IgniteCache<BinaryObject, BinaryObject>? Praegu pole selge.

Kohanen Compute Applicationi oma juhtumiga. MĂŒĂŒgikohtade registri peamine vĂ”ti MSSQL-is on mÀÀratletud kui [id] [int] NOT NULL, loon sarnase cache'i

IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")

Xml-konfiguratsioonis mÀrgin, et cache on jagatud

<bean class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="spCache"/>
    <property name="cacheMode" value="PARTITIONED"/>
</bean>

MĂŒĂŒgikohtade jagamine eeldab, et vajalik agregaat ehitatakse iga klastris oleva sĂ”lme jaoks olemasolevatele salesPointCache kirjadele, pĂ€rast mida kliendisĂ”lm teostab lĂ”ppsummeerimise.

Lugen siin Ôppematerjali Esimene Ignite Compute Application, teen seda tehes. KÀivitame IgniteRunnable() iga klastripeal, umbes nii:

  @Override
  public void run() {
    SalesPoint sp=salesPointCache.get(spId);
    sp.calculateSalesPointCount();
    ..
  }

Lisaan agregatsiooni ja vÀljastamise pÔhiloogika, kÀivitan testkomplektiga. Kohalikul arendusserveril töötab kÔik.

KÀitan kaks testserverit CentOs, mÀÀran IP-aadressid default-config.xml, tÀidan igal serveril

./bin/ignite.sh config/default-config.xml

MĂ”lemad Ignite noodid kĂ€ivitatakse ja nad nĂ€evad teineteist. MÀÀran vajalikud aadressid kliendi rakenduse xml-konfiguratsioonis, see kĂ€ivitub, lisab kolmanda sĂ”lme topoloogiasse ja kohe on neid jĂ€lle kaks. Logis on kirjas „ClassNotFoundException: model.SalesPoint“ real

SalesPoint sp=salesPointCache.get(spId);

StackOverflow ĂŒtleb, et vea pĂ”hjus on see, et CentOsi serverites puudub kasutajate klass SalesPoint. Oleme hĂ€das. Kuidas on siis „you don’t have to manually deploy your Java code on each node“ ja edasi? VĂ”i „your Java code“ ei kehti SalesPointi kohta?

TĂ”enĂ€oliselt olen midagi maha maganud — hakkan jĂ€lle otsima, lugema ja taas otsima. Aja möödudes tekib tunne, et olen teema kohta kĂ”ik lugenud, midagi uut enam ei ole. Otsimise kĂ€igus leidsin mĂ”ned huvitavad tĂ€helepanekud.

Valentin Kulichenko, GridGain Systems'i peaarhitekt, vastuse StackOverflow'is, aprill 2016:

Mudeli klasse ei ole rakendatud, kuid saate kasutada withKeepBinary() lippu
mÀlus ja pÀrida BinaryObjecte. Nii vÀldite deserialiseerimist
serveripoolsel ja ei saa ClassNotFoundException'i.

Veel ĂŒks autoriteetne arvamus: Denis Magda, toote juhtimise direktor, GridGain Systems.

Artikkel Habrus mikroteenustest viitab Denis Magda kolmele artiklile: Mikroteenused I osa, Mikroteenused II osa, Mikroteenused III osa 2016-2017. aastal. Teises artiklis soovitab Denis kÀivitada klastrisÔlme kasutades MaintenanceServiceNodeStartup.jar. Samuti saab kasutada kÀivitamist xml-konfiguratsiooni ja kÀsureaga, kuid siis tuleb iga klastrisse paigaldatava sÔlme jaoks kÀsitsi lisada kasutaja klassid:

Nii ongi. KÀivita (..) sÔlm kasutades MaintenanceServiceNodeStartup faili vÔi edasta
maintenance-service-node-config.xml Apache Ignite'i ignite.sh/bat skriptidele.
Kui eelistate teist, siis veenduge, et ehitate jar faili, mis sisaldab
kÔiki klasse java/app/common ja java/services/maintenance kaustadest.
Jar peab olema lisatud iga sÔlme classpath'i, kuhu teenus
vÔib olla paigaldatud.

TÔepoolest, see on see. Siin see on, nÀib, miks see salapÀrane binaarvorming on!

3. SingleJar

Denis on minu isiklikus edetabelis esikohal, minu arvates kĂ”ige kasulikum Ă”petus kĂ”ikidest saadaval olevatest. Tema MicroServicesExample GitHubis on tĂ€ielik nĂ€ide klastrisĂ”lmede seadistamisest, mis kompileerib ilma igasuguste tĂ€iendavate ĂŒllatusteta.

Teen sarnaselt ning saan ĂŒhe jar-faili, mis kĂ€ivitab 'data node' vĂ”i 'client node' sĂ”ltuvalt kĂ€surea argumendist. Kogumine kĂ€ivitub ja töötab. Zero Deployment on alistatud.

Muutumine megabaidist testandmetest kĂŒmneteks gigabaitide tootmisandmeteks tĂ”estas, et binaarvorming on olemas olulistel pĂ”hjustel. Oli vajalik optimeerida mĂ€lukasutust sĂ”lmedes ning siin osutus BinaryObject vĂ€ga kasulikuks.

4. JĂ€reldused

Esimene kohtunud kriitika Apache Ignite projekti dokumentatsiooni ebaselguse osas osutus Ă”igeks, alates 2016. aastast ei ole palju muutunud. Uuel tulijal on keeruline luua toimivat prototĂŒĂŒpi veebisaidi ja/vĂ”i hoidla alusel.

Töödelt jĂ€reldusena tekkis mul mulje, et Zero Deployment töötab, kuid ainult sĂŒsteemitasemel. Umbes nii: BinaryObjectit kasutatakse, et Ă”petada kaugusĂ”lmedel töötama kasutaja klassidega; Zero Deployment on Apache Ignite'i sisemine mehhanism ja levitab klastris sĂŒsteemi objekte.
Apache Ignite'i enda ja levitab klastris sĂŒsteemseid objekte.

Loodan, et minu kogemus on uutele Apache Ignite kasutajatele kasulik.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster