MÄs esam mazumtirdzniecÄ«bas tÄ«kla tehnoloÄ£iju attÄ«stÄ«bas nodaļa. KÄdu dienu vadÄ«ba izvirzÄ«ja uzdevumu paÄtrinÄt liela mÄroga aprÄÄ·inus, izmantojot Apache Ignite kopÄ ar MSSQL, un parÄdÄ«ja vietni ar skaistÄm ilustrÄcijÄm un Java koda piemÄriem. Man uzreiz iepatikÄs vietne
1. ProblÄmas izklÄsts
ProblÄmas bÅ«tÄ«ba ir Å”Äda. Ir SalesPoint pÄrdoÅ”anas punktu direktorijs un Sku (noliktavu uzturÄÅ”anas vienÄ«ba) produktu katalogs. TirdzniecÄ«bas vietÄ ir atribÅ«ts āVeikala veidsā ar vÄrtÄ«bÄm āsmallā un ālargeā. Katrai tirdzniecÄ«bas vietai tiek pieslÄgts sortiments (tirdzniecÄ«bas vietas preÄu saraksts) (ielÄdÄts no DBVS) un tiek sniegta informÄcija, ka no norÄdÄ«tÄ datuma norÄdÄ«tÄ prece
izslÄgts no sortimenta vai pievienots sortimentam.
MÄnesi iepriekÅ” ir jÄorganizÄ sadalÄ«ta tirdzniecÄ«bas vietu keÅ”atmiÅa un jÄuzglabÄ tajÄ informÄcija par pievienotajiem produktiem. Lai nodroÅ”inÄtu saderÄ«bu ar kaujas sistÄmu, Ignite klienta mezglam ir jÄielÄdÄ dati, jÄaprÄÄ·ina veidlapas kopsavilkums (veikala veids, produkta kods, diena,_pÄrdoÅ”anas_punktu_skaits) un jÄaugÅ”upielÄdÄ atpakaļ DBVS.
2. Literatūras studijas
Man vÄl nav pieredzes, tÄpÄc sÄku dejot no plÄ«ts. Tas ir, no publikÄciju apskata.
2016. pants
optimistiski sola: "JÅ«s sÄksit darboties vienÄ mirklÄ«!" Es izdomÄju vides mainÄ«go iestatÄ«jumus, skatos divus Apache Ignite Essentials video, bet tie manam konkrÄtajam uzdevumam nebija Ä«paÅ”i noderÄ«gi. Es veiksmÄ«gi palaižu Ignite no komandrindas ar standarta failu āexample-ignite.xmlā, veidojot pirmo lietojumprogrammu.
Es lasÄ«ju tÄlÄk, un piemÄrÄ uzreiz tiek izmantots affinityKey (izveidots iepriekÅ”, izmantojot SQL vaicÄjumu) un pat tiek izmantots noslÄpumains BinaryObject:
IgniteCache<BinaryObject, BinaryObject> people
= ignite.cache("Person").withKeepBinary();
Es to izlasīju
Es pÄrveidoju aprÄÄ·inu lietojumprogrammu, lai tÄ atbilstu manam gadÄ«jumam. TirdzniecÄ«bas vietu direktorija primÄrÄ atslÄga MSSQL ir definÄta kÄ [id] [int] NOT NULL, es izveidoju keÅ”atmiÅu pÄc analoÄ£ijas
IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")
Xml konfigurÄcijÄ es norÄdÄ«ju, ka keÅ”atmiÅa ir sadalÄ«ta
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="spCache"/>
<property name="cacheMode" value="PARTITIONED"/>
</bean>
Sadalot pÄc tirdzniecÄ«bas vietas, tiek pieÅemts, ka katrÄ klastera mezglÄ tiks izveidots nepiecieÅ”amais apkopojums tur pieejamajiem salesPointCache ierakstiem, un pÄc tam klienta mezgls veiks galÄ«go summÄÅ”anu.
Es lasu pamÄcÄ«bu
@Override
public void run() {
SalesPoint sp=salesPointCache.get(spId);
sp.calculateSalesPointCount();
..
}
Es pievienoju apkopoÅ”anas un augÅ”upielÄdes loÄ£iku un palaižu to testa datu kopÄ. Viss darbojas lokÄli izstrÄdes serverÄ«.
Es palaižu divus CentOs testa serverus, norÄdiet IP adreses default-config.xml, izpildu katrÄ
./bin/ignite.sh config/default-config.xml
Abi Ignite mezgli darbojas un var redzÄt viens otru. NorÄdu vajadzÄ«gÄs adreses klienta aplikÄcijas xml konfigurÄcijÄ, palaižas, topoloÄ£ijai pievieno treÅ”o mezglu un uzreiz atkal divi mezgli. ŽurnÄla rindÄ tiek rÄdÄ«ts āClassNotFoundException: model.SalesPointā.
SalesPoint sp=salesPointCache.get(spId);
StackOverflow saka, ka kļūdas iemesls ir tas, ka CentOs serveros nav pielÄgotas SalesPoint klases. Esam ieraduÅ”ies. KÄ bÅ«tu ar ājums nav manuÄli jÄizvieto Java kods katrÄ mezglÄā un tÄ tÄlÄk? Vai arÄ« ājÅ«su Java kodsā nav saistÄ«ts ar SalesPoint?
Laikam kaut ko palaidu garÄm ā atkal sÄku meklÄt, lasÄ«t un vÄlreiz meklÄt. PÄc kÄda laika rodas sajÅ«ta, ka esmu izlasÄ«jis visu par tÄmu, nekÄ jauna vairs nav. KamÄr meklÄju, atradu dažus interesantus komentÄrus.
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.
VÄl viens autoritatÄ«vs viedoklis:
Raksts par 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.
PatieÅ”Äm, tas arÄ« viss. Å eit izrÄdÄs, kÄpÄc, Å”is noslÄpumainais binÄrais formÄts!
3.SingleJar
Deniss ieÅÄma pirmo vietu manÄ personÄ«gajÄ vÄrtÄjumÄ, IMHO ir visnoderÄ«gÄkÄ apmÄcÄ«ba no visÄm pieejamajÄm. ViÅa
Es daru to tÄpat un iegÅ«stu vienu jar failu, kas atkarÄ«bÄ no komandrindas argumenta palaiž ādata nodeā vai āclient nodeā. MontÄža sÄkas un darbojas. Nulles izvietoÅ”ana ir uzvarÄta.
PÄreja no megabaitiem testa datu uz desmitiem gigabaitu kaujas datu parÄdÄ«ja, ka binÄrais formÄts pastÄv kÄda iemesla dÄļ. Bija nepiecieÅ”ams optimizÄt atmiÅas patÄriÅu mezglos, un Å”eit BinaryObject izrÄdÄ«jÄs ļoti noderÄ«gs.
4. SecinÄjumi
Pirmais pÄrmetums par Apache Ignite projekta dokumentÄcijas neskaidrÄ«bu izrÄdÄ«jÄs taisnÄ«gs, kopÅ” 2016. gada ir maz mainÄ«jies. IesÄcÄjam nav viegli izveidot funkcionÄjoÅ”u prototipu, pamatojoties uz vietni un/vai repozitoriju.
Pamatojoties uz paveiktÄ darba rezultÄtiem, radÄs iespaids, ka Zero Deployment darbojas, taÄu tikai sistÄmas lÄ«menÄ«. Kaut kas lÄ«dzÄ«gs Å”im: BinaryObject tiek izmantots, lai mÄcÄ«tu attÄlos klasteru mezglus strÄdÄt ar pielÄgotÄm klasÄm; Nulles izvietoÅ”ana - iekÅ”Äjais mehÄnisms
Apache Ignite pati un izplata sistÄmas objektus visÄ klasterÄ«.
Ceru, ka mana pieredze bÅ«s noderÄ«ga jaunajiem Apache Ignite lietotÄjiem.
Avots: www.habr.com