Usambazaji wa Apache Ignite Zero: Kweli Sifuri?

Usambazaji wa Apache Ignite Zero: Kweli Sifuri?

Sisi ni idara ya maendeleo ya teknolojia ya mtandao wa rejareja. Siku moja, usimamizi uliweka kazi ya kuharakisha mahesabu makubwa kwa kutumia Apache Ignite kwa kushirikiana na MSSQL, na ilionyesha tovuti yenye vielelezo vyema na mifano ya msimbo wa Java. Nilipenda tovuti mara moja Usambazaji Sifuri, maelezo ambayo huahidi miujiza: sio lazima utumie Java au nambari yako ya Scala kwa kila nodi kwenye gridi ya taifa na uitumie tena kila inapobadilika. Kazi ilipoendelea, ikawa kwamba Usambazaji wa Zero una matumizi maalum, vipengele ambavyo nataka kushiriki. Chini ya kukata ni mawazo na maelezo ya utekelezaji.

1. Taarifa ya tatizo

Kiini cha kazi ni kama ifuatavyo. Kuna saraka ya mauzo ya SalesPoint na saraka ya bidhaa ya Sku (Stock Keeping Unit). Sehemu ya mauzo ina sifa ya "Aina ya Duka" yenye maadili "ndogo" na "kubwa". Urval (orodha ya bidhaa za mahali pa kuuza) imeunganishwa kwa kila sehemu ya uuzaji (iliyopakiwa kutoka kwa DBMS) na habari hutolewa kwamba kutoka kwa tarehe maalum bidhaa iliyoainishwa.
kutengwa kutoka kwa urval au kuongezwa kwa urval.

Inahitajika kuandaa cache iliyogawanywa ya pointi za mauzo na kuhifadhi ndani yake habari kuhusu bidhaa zilizounganishwa kwa mwezi mmoja mapema. Utangamano na mfumo wa mapigano unahitaji nodi ya mteja ya Ignite ili kupakia data, kukokotoa jumla ya fomu (Aina ya Duka, Msimbo wa Bidhaa, siku, nambari_ya_mauzo_pointi) na kuipakia tena kwenye DBMS.

2. Utafiti wa fasihi

Bado sina uzoefu wowote, kwa hivyo ninaanza kucheza kutoka jiko. Hiyo ni, kutoka kwa ukaguzi wa machapisho.

Kifungu cha 2016 Tunakuletea Apache Ignite: Hatua za Kwanza ina kiunga cha hati za mradi wa Apache Ignite na wakati huo huo lawama kwa kutokuwa wazi kwa hati hizi. Niliisoma tena mara kadhaa, uwazi hauji. Ninarejelea mafunzo rasmi KuanzaAmbayo
kwa matumaini anaahidi "Utasimama na kukimbia harakaharaka!" Ninafikiria mipangilio ya kutofautisha ya mazingira, nikitazama video mbili za Apache Ignite Essentials, lakini hazikuwa muhimu sana kwa kazi yangu maalum. Nimefanikiwa kuzindua Ignite kutoka kwa safu ya amri na faili ya kawaida "example-ignite.xml", nikiunda programu tumizi ya kwanza. Kuhesabu Maombi kwa kutumia Maven. Programu inafanya kazi na hutumia Usambazaji wa Zero, ni uzuri ulioje!

Nilisoma zaidi, na hapo mfano hutumia affinityKey mara moja (iliyoundwa mapema kupitia swala la SQL), na hata hutumia BinaryObject ya kushangaza:

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

Niliisoma kidogo: umbizo la binary - kitu kama kutafakari, kufikia sehemu za kitu kwa jina. Inaweza kusoma thamani ya uwanja bila kuondoa kabisa kitu (kuhifadhi kumbukumbu). Lakini kwa nini BinaryObject inatumiwa badala ya Mtu, kwani kuna Usambazaji wa Sifuri? Kwa nini IgniteCache kuhamishiwa IgniteCache ? Bado haijabainika.

Ninarekebisha Maombi ya Kuhesabu ili kuendana na kesi yangu. Ufunguo wa msingi wa saraka ya alama za mauzo katika MSSQL hufafanuliwa kama [id] [int] SIO NULL, ninaunda kashe kwa mlinganisho.

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

Katika usanidi wa xml ninaonyesha kuwa kashe imegawanywa

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

Kugawanya kwa sehemu ya mauzo kunadhania kuwa jumla inayohitajika itajengwa kwenye kila nodi ya nguzo kwa rekodi za salesPointCache zinazopatikana hapo, baada ya hapo nodi ya mteja itafanya majumuisho ya mwisho.

Ninasoma mafunzo Kwanza Washa Kuhesabu Maombi, nafanya kwa mlinganisho. Kwenye kila nodi ya nguzo ninaendesha IgniteRunnable(), kitu kama hiki:

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

Ninaongeza kujumlisha na kupakia mantiki na kuiendesha kwenye seti ya data ya majaribio. Kila kitu hufanya kazi ndani ya nchi kwenye seva ya ukuzaji.

Ninazindua seva mbili za majaribio za CentO, taja anwani za IP katika chaguo-msingi-config.xml, nitekeleze kwa kila moja.

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

Nodi zote mbili za Ignite zinafanya kazi na zinaweza kuonana. Ninataja anwani zinazohitajika katika usanidi wa xml wa programu ya mteja, inaanza, inaongeza nodi ya tatu kwenye topolojia na mara moja kuna nodi mbili tena. Kumbukumbu inaonyesha "ClassNotFoundException: model.SalesPoint" kwenye mstari

SalesPoint sp=salesPointCache.get(spId);

StackOverflow inasema kwamba sababu ya kosa ni kwamba hakuna darasa maalum la SalesPoint kwenye seva za CentOs. Tumefika. Vipi kuhusu "sio lazima utumie nambari yako ya Java kwa kila nodi" na kadhalika? Au "msimbo wako wa Java" hauhusu SalesPoint?

Labda nilikosa kitu - ninaanza kutafuta tena, kusoma na kutafuta tena. Baada ya muda, ninapata hisia kwamba nimesoma kila kitu kwenye mada, hakuna kitu kipya tena. Nilipokuwa nikitafuta, nilipata maoni ya kuvutia.

Valentin Kulichenko, Mbunifu Kiongozi katika GridGain Systems, jibu kwenye StackOverflow, Aprili 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.

Maoni mengine yenye mamlaka: Denis Magda, Mkurugenzi wa usimamizi wa bidhaa, GridGain Systems.

Makala kuhusu Habre kuhusu microservices inarejelea nakala tatu za Denis Magda: Microservices Sehemu ya I, Microservices Sehemu ya II, Microservices Sehemu ya III 2016-2017. Katika makala ya pili, Denis anapendekeza kuanzisha nodi ya nguzo kupitia MaintenanceServiceNodeStartup.jar. Unaweza pia kutumia uzinduzi na usanidi wa xml na mstari wa amri, lakini basi unahitaji kuweka mwenyewe madarasa maalum kwenye kila nodi ya nguzo iliyotumwa:

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.

Hakika, ndivyo hivyo. Hapa inageuka, kwa nini, muundo huu wa ajabu wa binary!

3.Jari Moja

Denis alichukua nafasi ya kwanza katika ukadiriaji wangu wa kibinafsi, IMHO mafunzo muhimu zaidi ya yote yanayopatikana. Kwake Mfano wa MicroServices Github ina mfano ulio tayari kabisa wa kusanidi nodi za nguzo, ambazo hujumuisha bila kuchuchumaa kwa ziada.

Ninaifanya kwa njia ile ile na kupata faili moja ya jar ambayo inazindua "nodi ya data" au "nodi ya mteja" kulingana na hoja ya safu ya amri. Mkutano huanza na kufanya kazi. Usambazaji Sifuri umeshindwa.

Mpito kutoka kwa megabaiti za data ya majaribio hadi makumi ya gigabaiti za data ya mapigano ilionyesha kuwa umbizo la binary lipo kwa sababu fulani. Ilihitajika kuongeza utumiaji wa kumbukumbu kwenye nodi, na hapa ndipo BinaryObject iligeuka kuwa muhimu sana.

4. Hitimisho

Kashfa ya kwanza iliyopatikana kuhusu kutokuwa wazi kwa hati za mradi wa Apache Ignite iligeuka kuwa ya haki; kidogo imebadilika tangu 2016. Si rahisi kwa anayeanza kukusanya mfano unaofanya kazi kulingana na tovuti na/au hazina.

Kulingana na matokeo ya kazi iliyofanywa, hisia ilikuwa kwamba Usambazaji wa Zero hufanya kazi, lakini tu katika ngazi ya mfumo. Kitu kama hiki: BinaryObject inatumika kufundisha nodi za nguzo za mbali kufanya kazi na madarasa maalum; Usambazaji wa Zero - utaratibu wa ndani
Apache Ignite yenyewe na inasambaza vitu vya mfumo kwenye nguzo nzima.

Natumai uzoefu wangu utakuwa muhimu kwa watumiaji wapya wa Apache Ignite.

Chanzo: mapenzi.com

Kuongeza maoni