
Me oleme jaemĂŒĂŒgitehnoloogia arenduse osakond. Ăhel pĂ€eval andis juhtkond ĂŒlesande kiirendada ulatuslikke arvutusi, kasutades Apache Ignite'i koos MSSQL-iga, ja nĂ€itas veebilehte suurepĂ€raste illustreerimise ja Java koodinĂ€idistega. Veebileht meeldis mulle kohe. , mille kirjeldus lubab imesid: sa ei pea oma Java vĂ”i Scala koodi iga vĂ”rgu sĂ”lme kĂ€sitsi rakendama ja seda uuesti rakendama igal korral, kui see muutub. Töö kĂ€igus selgus, et Zero Deploymentâil on oma kasutusspetsiifika, millega soovin jagada. Alustuseks mĂ”tted ja teostuse ĂŒksikasjad.
1. Probleemi pĂŒstitamine
Probleemi sisu on jĂ€rgmine. On olemas mĂŒĂŒgikohtade register SalesPoint ja kaupade register Sku (Stock Keeping Unit). MĂŒĂŒgikohas on atribuut âtyĂŒpMajaâ vÀÀrtustega âvĂ€ikeâ ja âsuurâ. Iga mĂŒĂŒgikohaga on ĂŒhendatud (laaditakse andmebaasist) kaubavalik (mĂŒĂŒgikoha kaupade loetelu) ja edastatakse teave, et alates mÀÀratud kuupĂ€evast tuleb mÀÀratud kaup
vÀlja jÀtta kaubavalikust vÔi lisada kaubavalikusse.
On vajalik korraldada mĂŒĂŒgikohtade partitsioneeritud vahemĂ€lu ja hoida selles teavet ĂŒhendatud kaupade kohta kuu ette. Ăhilduvus tootmissĂŒsteemiga nĂ”uab klientĂŒhenduse Ignite kirje laadimist, andmete arvutamist agregaatide tĂŒĂŒbi (tyĂŒpMaja, kauba kood, pĂ€ev, mĂŒĂŒgikohtade arv) jĂ€rgi ja selle vĂ€ljastamist tagasi andmebaasi.
2. Kirjanduse uurimine
Kogemus puudub, seega hakkan alt ĂŒles minema. Ehkki alustan publikatsioonide ĂŒlevaate tegemisest.
2016. aasta artikkel sisaldab viidet Apache Ignite projekti dokumentatsioonile ja samas ka kriitikat selle dokumentatsiooni segasuse kohta. Lugesin mitu korda, selgus ei tule. JÀtan tÀhelepanu ametlikule Ôpetusele , mis
optimistlikult lubab, et "Sa saad kiiresti hakkama!". Teen keskkonnamuutujate seadistustega tutvust, vaatan kahte videot Apache Ignite Essentials, mis osutusid minu konkreetse ĂŒlesande jaoks mitte eriti kasulikuks. KĂ€ivitan Ignite'i edukalt kĂ€surealt standardfailiga "example-ignite.xml", kogun esimese rakenduse Maveniga. Rakendus töötab ja kasutab Zero Deployment'i, milline ilu!
Lugesin edasi, seal oli nÀide, mis juba kasutas affinityKey (loodi varem SQL-pÀringu kaudu), ja sealjuures kummaline BinaryObject:
IgniteCache people
= ignite.cache("Person").withKeepBinary(); Lugesin edasi : binaarne formaat â midagi sellist nagu refleksioon, juurdepÀÀs objekti vĂ€ljadele nime jĂ€rgi. Saab lugeda vĂ€lja vĂ€ljade vÀÀrtusi tĂ€ielikku objekti deserialiseerimist tegemata (mĂ€luefektiivsus). Kuid miks kasutatakse Person'i asemel BinaryObject, kui on olemas Zero Deployment? Miks IgniteCache<Key,Person> tĂ”lgitakse IgniteCache<BinaryObject, BinaryObject>? Praegu pole selge.
Muudan Compute Application'i enda juhtumi jaoks. MĂŒĂŒgipunktide registri pĂ”hivĂ”ti MSSQL-is on mÀÀratud kui [id] [int] NOT NULL, loon sarnase caching.
IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")XML-konfiguratsioonis mÀÀran, et cache on jaotatud.
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="spCache"/>
<property name="cacheMode" value="PARTITIONED"/>
</bean>Jaotamine mĂŒĂŒgipunktide jĂ€rgi tĂ€hendab, et vajalik aggregaat koostatakse igas klastris, kus on olemas salesPointCache kirjed, seejĂ€rel tĂ€idab kliendi sĂ”lme lĂ”pliku summeerimise.
Lugesin Ôpetust. , teen sarnaselt. Igal klastrisÔlmel kÀivitan IgniteRunnable(), enam-vÀhem selliselt:
@Override
public void run() {
SalesPoint sp=salesPointCache.get(spId);
sp.calculateSalesPointCount();
..
}Lisaan kogumise ja eksportimise logika, kÀivitan testkomplekti andmetega. Kohalikult arendusserveris töötab kÔik.
KÀitan kaks testserverit CentOs, mÀÀran IP-aadressid default-config.xml-is, tÀidan igas:
.\/bin\/ignite.sh config\/default-config.xmlMĂ”lemad Ignite sĂ”lmed kĂ€ivituvad ja nĂ€evad ĂŒksteist. MÀÀran vajalikud aadressid klientrakenduse XML-konfiguratsioonis, see kĂ€ivitub, lisab kolmanda sĂ”lme topoloogiasse ja kohe on sĂ”lmi taas kaks. Logis on kirjas âClassNotFoundException: model.SalesPointâ reas.
SalesPoint sp=salesPointCache.get(spId);StackOverflow ĂŒtleb, et vea pĂ”hjus on see, et CentOs serverites pole kasutaja klassi SalesPoint. SĂ”ime. Kuidas on vĂ”imalik, et âyou donât have to manually deploy your Java code on each nodeâ ja edasi? VĂ”i âyour Java codeâ â see ei kehti SalesPoint'i kohta?
TĂ”enĂ€oliselt olen midagi unustanud â hakkan taas otsima, lugema ja taas otsima. Aja jooksul tekib tunne, et olen teema kohta kĂ”ik juba lĂ€bi lugenud, midagi uut pole. Otsides leidsin mĂ”ned huvitavad mĂ€rkused.
, GridGain Systems'i peaarhitekt, StackOverflow'is, aprill 2016:
Mudelklassid ei ole omavahel juurutatud, kuid saab kasutada keepBinary() lipu
cache'is ja kĂŒsida BinaryObjects. Sel viisil vĂ€ldid deserialiseerimist
serveripoolel ja ei saa ClassNotFoundException'i.Veel ĂŒks autoriteetne arvamus: , tootehalduse direktor, GridGain Systems.
Artikkel Habr viitab kolmele artiklile Denis Magda: , , 2016-2017. Teises artiklis pakub Denis algatada klastrisÔlme kaudu MaintenanceServiceNodeStartup.jar. VÔib kasutada ka kÀivitamist xml-konfiguratsiooni ja kÀsureaga, kuid siis tuleb igas klastrisÔlmes iseseisvalt paigutada kasutajaklassid:
See ongi kÔik. KÀivita (..) sÔlm, kasutades MaintenanceServiceNodeStartup faili vÔi edasta
maintenance-service-node-config.xml Apache Ignite'i ignite.sh/bat skriptidele.
Kui eelistad viimast, siis veendu, et lood jar-faili, mis sisaldab
kÔiki klasse java/app/common ja java/services/maintenance kataloogidest.
Jar peab olema lisatud iga sÔlme klassiteele, kuhu teenus
vÔib olla paigaldatud.TÔepoolest, see ongi kÔik. NÀe, tundub, et just selleks on olemas see salapÀrane binaarformaat!
3. SingleJar
Denis kaasas minu isiklikus edetabelis esimese koha, minu arvates on see kÔige kasulikum Ôpetus kÔigist saadaolevatest. on GitHubis tÀielikult valmis klastrisÔlmede seadistamise nÀidis, mis kompileerub ilma igasuguste lisategevusteta.
Teen kopeerides ja modifitseerides, saan ĂŒhe jar-faili, mis kĂ€ivitab "data node" vĂ”i "client node" sĂ”ltuvalt kĂ€skluse argumendist. Kogumine kĂ€ivitub ja töötab. Zero Deployment on vĂ”idetud.
Ăleminek megabaidist testandmetest kĂŒmnete gigabaidini tootmisnĂ€itas, et binaarformaadi olemasolu on pĂ”hjendatud. Pidi optimeerima mĂ€lu kasutust sĂ”lmedes ja siin osutus BinaryObject vĂ€ga kasulikuks.
4. JĂ€reldused
Esimene koht, kus projekt Apache Ignite'i dokumentatsiooni ebatĂ€psuse kohta kriitika osutus Ă”igeks, on alates 2016. aastast vĂ€he muutunud. Algajale on keeruline tööle panna toimivat prototĂŒĂŒpi saidi ja/vĂ”i hoidla pĂ”hjal.
Kogu tehtud töö tulemusena tekkis vaade, et Zero Deployment töötab, kuid ainult sĂŒsteemi tasandil. Umbes nii: BinaryObject'i kasutatakse, et Ă”petada kaugklastrisĂ”lmi töötama kasutajaklassidega; Zero Deployment on Apache Ignite'i sisemine mehhanism
ja levitab klastris sĂŒsteemseid objekte.
Loodan, et minu kogemus on uutele Apache Ignite'i kasutajatele kasulik.
Allikas: habr.com
