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
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
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
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
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
@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.
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:
Erthygl ar Habré....
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
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