Skjerament ta' Apache Ignite Zero: Tassew Żero?

Skjerament ta' Apache Ignite Zero: Tassew Żero?

Aħna d-dipartiment tal-iżvilupp tat-teknoloġija ta 'netwerk tal-bejgħ bl-imnut. Ġurnata waħda, il-ġestjoni stabbiliet il-kompitu li tħaffef il-kalkoli fuq skala kbira billi tuża Apache Ignite flimkien ma 'MSSQL, u wriet websajt b'illustrazzjonijiet sbieħ u eżempji ta' kodiċi Java. Immedjatament għoġobni s-sit Skjerament Żero, li d-deskrizzjoni tagħha twiegħed mirakli: m'għandekx għalfejn tiskjera manwalment il-kodiċi Java jew Scala tiegħek fuq kull node fil-grilja u terġa' tiskjerah kull darba li tinbidel. Hekk kif ix-xogħol mexa 'l quddiem, irriżulta li Zero Deployment għandu użi speċifiċi, li l-karatteristiċi tagħhom irrid naqsam. Taħt il-qatgħa hemm ħsibijiet u dettalji tal-implimentazzjoni.

1. Dikjarazzjoni tal-problema

L-essenza tal-problema hija kif ġej. Hemm direttorju SalesPoint tal-punti tal-bejgħ u direttorju tal-prodotti Sku (Stock Keeping Unit). Il-punt tal-bejgħ għandu attribut "Tip ta 'maħżen" bil-valuri "żgħar" u "kbar". Assortiment (lista ta’ prodotti tal-punt tal-bejgħ) huwa konness ma’ kull punt tal-bejgħ (mgħobbi mid-DBMS) u tingħata informazzjoni li mid-data speċifikata l-prodott speċifikat
esklużi mill-assortiment jew miżjuda mal-assortiment.

Huwa meħtieġ li torganizza cache maqsuma ta 'punti tal-bejgħ u taħżen fiha informazzjoni dwar prodotti konnessi għal xahar bil-quddiem. Il-kompatibilità mas-sistema tal-ġlied teħtieġ li n-nodu tal-klijent Ignite jgħabbi dejta, jikkalkula aggregat tal-formola (Tip ta 'Store, Kodiċi tal-Prodott, jum, numru_of_punti_bejgħ) u jtella' lura fid-DBMS.

2. Studju tal-letteratura

Għadni m'għandi l-ebda esperjenza, għalhekk qed nibda niżfen mill-fuklar. Jiġifieri minn reviżjoni tal-pubblikazzjonijiet.

Artikolu 2016 L-introduzzjoni ta' Apache Ignite: L-Ewwel Pass fih link għad-dokumentazzjoni tal-proġett Apache Ignite u fl-istess ħin tmaqdar għall-vagità ta’ din id-dokumentazzjoni. Erġajt naqrah ftit drabi, iċ-ċarezza ma tiġix. Nirreferi għat-tutorja uffiċjali tibdaLiema
b'ottimist iwiegħed "Int ser tkun qed taħdem f'ħin qasir!" Qed nifhem is-settings varjabbli tal-ambjent, nara żewġ vidjows tal-Apache Ignite Essentials, iżda ma kinux utli ħafna għall-kompitu speċifiku tiegħi. Inniedi b'suċċess Ignite mil-linja tal-kmand bil-fajl standard "example-ignite.xml", nibni l-ewwel applikazzjoni Ikkalkula Applikazzjoni bl-użu ta' Maven. L-applikazzjoni taħdem u tuża Zero Deployment, x'sbuħija!

Naqra aktar, u hemm l-eżempju immedjatament juża affinityKey (maħluqa qabel permezz ta 'mistoqsija SQL), u saħansitra juża l-BinaryObject misterjuż:

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

Qrajtha kemmxejn: format binarju - xi ħaġa bħal riflessjoni, aċċess għall-oqsma ta 'oġġett bl-isem. Jista 'jaqra l-valur ta' qasam mingħajr deserializing kompletament l-oġġett (iffrankar tal-memorja). Imma għaliex BinaryObject jintuża minflok Person, peress li hemm Zero Deployment? Għaliex IgniteCache trasferit għal IgniteCache ? Għadu mhux ċar.

Qed nagħmel mill-ġdid l-Applikazzjoni tal-Kompjuter biex tkun adattata għall-każ tiegħi. Iċ-ċavetta primarja tad-direttorju tal-punti tal-bejgħ f'MSSQL hija definita bħala [id] [int] MHUX NULL, noħloq cache b'analoġija

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

Fil-konfigurazzjoni xml nindika li l-cache hija maqsuma

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

Il-qsim skont il-punt tal-bejgħ jassumi li l-aggregat meħtieġ se jinbena fuq kull nodu tal-cluster għar-rekords salesPointCache disponibbli hemmhekk, u wara n-nodu tal-klijent iwettaq is-somma finali.

Qed naqra t-tutorja L-Ewwel Applikazzjoni Ignite Compute, Nagħmilha b'analoġija. Fuq kull node tal-cluster niġri IgniteRunnable(), xi ħaġa bħal din:

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

Inżid il-loġika ta 'aggregazzjoni u uploading u nmexxiha fuq sett ta' data tat-test. Kollox jaħdem lokalment fuq is-server tal-iżvilupp.

Inniedi żewġ servers tat-test CentOs, nispeċifika l-indirizzi IP f'default-config.xml, inwettaq fuq kull

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

Iż-żewġ nodi Ignite qed jaħdmu u jistgħu jaraw lil xulxin. Nispeċifika l-indirizzi meħtieġa fil-konfigurazzjoni xml tal-applikazzjoni tal-klijent, jibda, iżid it-tielet nodu mat-topoloġija u immedjatament hemm żewġ nodi mill-ġdid. Ir-reġistru juri “ClassNotFoundException: model.SalesPoint” fil-linja

SalesPoint sp=salesPointCache.get(spId);

StackOverflow jgħid li r-raġuni għall-iżball hija li m'hemm l-ebda klassi Custom SalesPoint fuq is-servers CentOs. Wasalna. Kif dwar "m'għandekx għalfejn tuża manwalment il-kodiċi Java tiegħek fuq kull node" u l-bqija? Jew "il-kodiċi Java tiegħek" mhux dwar SalesPoint?

X’aktarx tlift xi ħaġa – nerġa’ nibda nfittex, nerġa’ naqra u nerġa’ nfittex. Wara ftit, inħoss li qrajt kollox fuq is-suġġett, m'hemm xejn ġdid aktar. Waqt li kont qed infittex, sibt xi kummenti interessanti.

Valentin Kulichenko, Perit Ewlieni fi GridGain Systems, twieġeb fuq StackOverflow, April 2016:

Model classes are not peer deployed, but you can use withKeepBinary() flag
on the cache and query BinaryObjects. This way you will avoid deserialization
on the server side and will not get ClassNotFoundException.

Opinjoni awtorevoli oħra: Denis Magda, Direttur tal-ġestjoni tal-prodott, GridGain Systems.

Artiklu dwar Habré dwar mikroservizzi jirreferi għal tliet artikli minn Denis Magda: Mikroservizzi Parti I, Mikroservizzi Parti II, Mikroservizzi Parti III 2016-2017. Fit-tieni artiklu, Denis jissuġġerixxi li jinbeda node ta 'cluster permezz ta' MaintenanceServiceNodeStartup.jar. Tista 'wkoll tuża tnedija b'konfigurazzjoni xml u linja ta' kmand, iżda mbagħad trid tpoġġi manwalment klassijiet tad-dwana fuq kull node tal-cluster skjerat:

That's it. Start (..)  node using MaintenanceServiceNodeStartup file or pass
maintenance-service-node-config.xml to Apache Ignite's ignite.sh/bat scripts.
If you prefer the latter then make sure to build a jar file that will contain
all the classes from java/app/common and java/services/maintenance directories.
The jar has to be added to the classpath of every node where the service
might be deployed.

Tabilħaqq, dak hu. Hawnhekk jirriżulta, għaliex, dan il-format binarju misterjuż!

3.SingleJar

Denis ħa l-ewwel post fil-klassifikazzjoni personali tiegħi, IMHO l-aktar tutorja utli ta 'kull disponibbli. Fil tiegħu MikroServizziEżempju Github fih eżempju kompletament lest tat-twaqqif ta 'cluster nodes, li jikkompila mingħajr ebda squatting addizzjonali.

Nagħmilha bl-istess mod u nikseb fajl vażett wieħed li jniedi "data node" jew "client node" skont l-argument tal-linja tal-kmand. L-assemblaġġ jibda u jaħdem. Zero Deployment ġie megħlub.

It-tranżizzjoni minn megabytes ta 'dejta tat-test għal għexieren ta' gigabytes ta 'dejta tal-ġlieda uriet li l-format binarju jeżisti għal raġuni. Kien meħtieġ li jiġi ottimizzat il-konsum tal-memorja fuq in-nodi, u dan huwa fejn BinaryObject irriżulta li kien utli ħafna.

4. Konklużjonijiet

L-ewwel tmaqdir li ltaqa’ magħhom dwar il-vagità tad-dokumentazzjoni tal-proġett Apache Ignite irriżulta li kien ġust; ftit li xejn inbidel mill-2016. Mhux faċli għal min jibda jiġbor prototip li jiffunzjona bbażat fuq websajt u/jew repożitorju.

Fuq il-bażi tar-riżultati tax-xogħol li sar, l-impressjoni kienet li Zero Deployment jaħdem, iżda biss fil-livell tas-sistema. Xi ħaġa bħal din: BinaryObject jintuża biex jgħallem nodi ta 'cluster remoti biex jaħdmu ma' klassijiet tad-dwana; Żero Skjerament - mekkaniżmu intern
Apache Ignite innifsu u jqassam l-oġġetti tas-sistema madwar il-cluster.

Nittama li l-esperjenza tiegħi tkun utli għal utenti ġodda ta' Apache Ignite.

Sors: www.habr.com

Żid kumment