Defnydd Apache Ignite Zero: Sero Mewn gwirionedd?

Defnydd Apache Ignite Zero: Sero Mewn gwirionedd?

Ni yw adran datblygu technoleg rhwydwaith manwerthu. Un diwrnod, gosododd y rheolwyr y dasg o gyflymu cyfrifiadau ar raddfa fawr trwy ddefnyddio Apache Ignite ar y cyd ag MSSQL, a dangosodd wefan gyda darluniau hardd ac enghreifftiau o god Java. Hoffais y wefan ar unwaith Sero Defnydd, y mae ei ddisgrifiad yn addo gwyrthiau: nid oes rhaid i chi ddefnyddio'ch cod Java neu Scala â llaw ar bob nod yn y grid a'i ail-leoli bob tro y bydd yn newid. Wrth i'r gwaith fynd rhagddo, daeth i'r amlwg bod gan Zero Deployment ddefnyddiau penodol, ac rwyf am rannu'r nodweddion hynny. O dan y toriad mae meddyliau a manylion gweithredu.

1. Datganiad o'r broblem

Mae hanfod y broblem fel a ganlyn. Mae cyfeiriadur o bwyntiau gwerthu SalesPoint a chyfeiriadur cynnyrch Sku (Uned Cadw Stoc). Mae gan y pwynt gwerthu briodoledd “Math o Siop” gyda'r gwerthoedd “bach” a “mawr”. Mae amrywiaeth (rhestr o gynhyrchion y pwynt gwerthu) wedi'i gysylltu â phob pwynt gwerthu (wedi'i lwytho o'r DBMS) a darperir gwybodaeth bod y cynnyrch penodedig o'r dyddiad penodedig
wedi'i eithrio o'r amrywiaeth neu wedi'i ychwanegu at yr amrywiaeth.

Mae'n ofynnol i drefnu storfa rhanedig o bwyntiau gwerthu a storio ynddo wybodaeth am gynhyrchion cysylltiedig am fis ymlaen llaw. Mae cydnawsedd â'r system frwydro yn ei gwneud yn ofynnol i'r nod cleient Ignite lwytho data, cyfrifo cyfanred o'r ffurflen (Math o Siop, Cod Cynnyrch, diwrnod, number_of_sales_points) a'i lanlwytho yn ôl i'r DBMS.

2. Astudio llenyddiaeth

Does gen i ddim profiad eto, felly rydw i'n dechrau dawnsio o'r stôf. Hynny yw, o adolygiad o gyhoeddiadau.

Erthygl 2016 Cyflwyno Apache Ignite: Camau Cyntaf yn cynnwys dolen i ddogfennaeth prosiect Apache Ignite ac ar yr un pryd yn waradwydd am amwysedd y ddogfennaeth hon. Rwy'n ei ail-ddarllen cwpl o weithiau, nid yw eglurder yn dod. Cyfeiriaf at y tiwtorial swyddogol dechrau arniPa
yn addo'n obeithiol “Byddwch ar eich traed mewn jiffy!” Rwy'n darganfod y gosodiadau newidyn amgylchedd, yn gwylio dau fideo Apache Ignite Essentials, nid oeddent yn ddefnyddiol iawn ar gyfer fy nhasg benodol. Rwy'n lansio Ignite yn llwyddiannus o'r llinell orchymyn gyda'r ffeil safonol "example-ignite.xml", gan adeiladu'r cymhwysiad cyntaf Cymhwysiad Cyfrifo defnyddio Maven. Mae'r cymhwysiad yn gweithio ac yn defnyddio Zero Deployment, am harddwch!

Darllenais ymhellach, ac yno mae'r enghraifft ar unwaith yn defnyddio affinityKey (a grëwyd yn gynharach trwy ymholiad SQL), a hyd yn oed yn defnyddio'r BinaryObject dirgel:

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

Darllenais ef ychydig bach: fformat deuaidd - rhywbeth fel adlewyrchiad, cyrchu meysydd gwrthrych yn ôl enw. Yn gallu darllen gwerth maes heb ddad-gyfrifo'r gwrthrych yn gyfan gwbl (arbed cof). Ond pam mae BinaryObject yn cael ei ddefnyddio yn lle Person, gan fod Sero Defnydd? Pam IgniteCache trosglwyddo i IgniteCache ? Nid yw'n glir eto.

Rwy'n ail-wneud y Cais Cyfrifo i weddu i'm hachos. Diffinnir allwedd sylfaenol y cyfeiriadur pwyntiau gwerthu yn MSSQL fel [id] [int] NOT NULL, rwy'n creu storfa trwy gyfatebiaeth

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

Yn y ffurfwedd xml rwy'n nodi bod y storfa wedi'i rannu

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

Mae rhannu fesul pwynt gwerthu yn rhagdybio y bydd y cyfanred gofynnol yn cael ei adeiladu ar bob nod clwstwr ar gyfer y cofnodion salesPointCache sydd ar gael yno, ac ar ôl hynny bydd nod y cleient yn perfformio'r crynodeb terfynol.

Rwy'n darllen y tiwtorial Yn gyntaf Tanio Cymhwysiad Cyfrifo, Rwy'n ei wneud trwy gyfatebiaeth. Ar bob nod clwstwr rwy'n rhedeg IgniteRunnable (), rhywbeth fel hyn:

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

Rwy'n ychwanegu rhesymeg agregu a llwytho i fyny ac yn ei redeg ar set ddata prawf. Mae popeth yn gweithio'n lleol ar y gweinydd datblygu.

Rwy'n lansio dau weinydd prawf CentOs, nodwch y cyfeiriadau IP yn default-config.xml, gweithredu ar bob un

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

Mae'r ddau nod Ignite yn rhedeg ac yn gallu gweld ei gilydd. Rwy'n nodi'r cyfeiriadau gofynnol yng nghyfluniad xml y cymhwysiad cleient, mae'n dechrau, yn ychwanegu trydydd nod i'r topoleg ac ar unwaith mae dau nod eto. Mae'r log yn dangos “ClassNotFoundException: model.SalesPoint” yn y llinell

SalesPoint sp=salesPointCache.get(spId);

Dywed StackOverflow mai'r rheswm am y gwall yw nad oes dosbarth SalesPoint arferol ar weinyddion CentOs. Rydyn ni wedi cyrraedd. Beth am “does dim rhaid i chi ddefnyddio'ch cod Java â llaw ar bob nod” ac yn y blaen? Neu onid yw “eich cod Java” yn ymwneud â SalesPoint?

Mae'n debyg i mi fethu rhywbeth - dwi'n dechrau chwilio eto, darllen a chwilio eto. Ar ôl ychydig, dwi'n cael y teimlad fy mod i wedi darllen popeth ar y pwnc, does dim byd newydd bellach. Tra roeddwn i'n chwilio, des i o hyd i rai sylwadau diddorol.

Valentin Kulichenko, Pensaer Arweiniol yn GridGain Systems, yr ateb ar StackOverflow, Ebrill 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.

Barn awdurdodol arall: Denis Magda, Cyfarwyddwr rheoli cynnyrch, GridGain Systems.

Erthygl ar Habré.... am ficrowasanaethau yn cyfeirio at dair erthygl gan Denis Magda: Microwasanaethau Rhan I, Microwasanaethau Rhan II, Microwasanaethau Rhan III 2016-2017. Yn yr ail erthygl, mae Denis yn awgrymu cychwyn nod clwstwr trwy MaintenanceServiceNodeStartup.jar. Gallwch hefyd ddefnyddio lansiad gyda chyfluniad xml a llinell orchymyn, ond yna mae angen i chi roi dosbarthiadau arfer â llaw ar bob nod clwstwr a ddefnyddir:

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.

Yn wir, dyna ni. Yma mae'n troi allan, pam, mae hyn yn fformat deuaidd dirgel!

3.SingleJar

Cymerodd Denis y lle cyntaf yn fy sgôr bersonol, IMHO y tiwtorial mwyaf defnyddiol sydd ar gael. Yn ei MicrowasanaethauEnghraifft Mae Github yn cynnwys enghraifft hollol barod o sefydlu nodau clwstwr, sy'n llunio heb unrhyw sgwatio ychwanegol.

Rwy'n ei wneud yr un ffordd ac yn cael ffeil jar sengl sy'n lansio "nod data" neu "nod cleient" yn dibynnu ar ddadl y llinell orchymyn. Mae'r cynulliad yn dechrau ac yn gweithio. Mae Zero Deployment wedi'i drechu.

Dangosodd y newid o megabeit o ddata prawf i ddegau o gigabytes o ddata ymladd fod y fformat deuaidd yn bodoli am reswm. Roedd angen optimeiddio defnydd cof ar nodau, a dyma lle daeth BinaryObject yn ddefnyddiol iawn.

4. Casgliadau

Trodd y cerydd cyntaf a gafwyd am amwysedd dogfennaeth prosiect Apache Ignite yn deg; ychydig sydd wedi newid ers 2016. Nid yw'n hawdd i ddechreuwr gydosod prototeip gweithredol yn seiliedig ar wefan a / neu ystorfa.

Yn seiliedig ar ganlyniadau'r gwaith a wnaed, yr argraff oedd bod Zero Deployment yn gweithio, ond dim ond ar lefel y system. Rhywbeth fel hyn: Defnyddir BinaryObject i ddysgu nodau clwstwr o bell i weithio gyda dosbarthiadau arfer; Sero Defnydd - mecanwaith mewnol
Mae Apache Ignite ei hun ac yn dosbarthu gwrthrychau system ledled y clwstwr.

Rwy'n gobeithio y bydd fy mhrofiad yn ddefnyddiol i ddefnyddwyr newydd Apache Ignite.

Ffynhonnell: hab.com

Ychwanegu sylw