
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. , 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 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 , 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 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 : 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 , 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.xmlMĂ”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.
, GridGain Systems'i peaarhitekt, 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: , toote juhtimise direktor, GridGain Systems.
Artikkel Habrus viitab Denis Magda kolmele artiklile: , , 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 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
