Apache Ignite Zero Deployment: tÔesti Zero?

Apache Ignite Zero Deployment: tÔesti Zero?

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. Zero Deployment, 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 Tutvumine Apache Ignite'iga: esimesed sammud 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 getting-started, 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 Compute Application 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 veidi: 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. Esimene Ignite Compute Application., 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.xml

MĂ”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.

Valentin Kulichenko, GridGain Systems'i peaarhitekt, vastuse 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: Denis Magda, tootehalduse direktor, GridGain Systems.

Artikkel Habr mikroteenuste kohta viitab kolmele artiklile Denis Magda: Mikroteenused Osa I, Mikroteenused Osa II, Mikroteenused Osa III 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. MicroServicesExample 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

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster