Apache Ignite Zero Deployment: Zero gyud?

Apache Ignite Zero Deployment: Zero gyud?

Kami ang departamento sa pagpalambo sa teknolohiya sa usa ka retail network. Usa ka adlaw, ang pagdumala nagtakda sa tahas sa pagpadali sa dinagkong mga kalkulasyon pinaagi sa paggamit sa Apache Ignite inubanan sa MSSQL, ug nagpakita sa usa ka website nga adunay nindot nga mga ilustrasyon ug mga pananglitan sa Java code. Ganahan dayon ko sa site Zero Deployment, ang paghulagway diin nagsaad og mga milagro: dili nimo kinahanglan nga mano-mano nga i-deploy ang imong Java o Scala code sa matag node sa grid ug i-deploy kini pag-usab sa matag higayon nga kini mausab. Sa pag-uswag sa trabaho, nahimo nga ang Zero Deployment adunay piho nga gamit, ang mga bahin nga gusto nako ipaambit. Ubos sa pagputol mao ang mga hunahuna ug mga detalye sa pagpatuman.

1. Pamahayag sa problema

Ang esensya sa problema mao ang mosunod. Adunay usa ka SalesPoint sales point directory ug usa ka Sku (Stock Keeping Unit) nga direktoryo sa produkto. Ang punto sa pagbaligya adunay hiyas nga "Typ sa tindahan" nga adunay mga kantidad nga "gamay" ug "dako". Usa ka assortment (listahan sa mga produkto sa punto sa pagbaligya) konektado sa matag punto sa pagbaligya (gikarga gikan sa DBMS) ug ang impormasyon gihatag nga gikan sa espesipikong petsa ang espesipikong produkto
wala iapil sa assortment o gidugang sa assortment.

Gikinahanglan ang pag-organisar sa usa ka partitioned cache sa mga punto sa pagbaligya ug pagtipig niini nga impormasyon bahin sa konektado nga mga produkto sulod sa usa ka bulan nga abante. Ang pagkaangay sa sistema sa kombat nanginahanglan sa Ignite client node nga magkarga sa datos, kuwentahon ang usa ka aggregate sa porma (Typ sa tindahan, Product code, adlaw, numero_of_sales_points) ug i-upload kini balik sa DBMS.

2. Pagtuon sa literatura

Wala pa akoy kasinatian, mao nga nagsugod ako sa pagsayaw gikan sa stove. Kana mao, gikan sa usa ka pagrepaso sa mga publikasyon.

Artikulo 2016 Pagpaila sa Apache Ignite: Unang mga Lakang Naglangkob sa usa ka link sa dokumentasyon sa Apache Ignite nga proyekto ug sa samang higayon usa ka pagbiaybiay alang sa pagkawalay klaro sa kini nga dokumentasyon. Gibasa nako kini pag-usab sa pipila ka mga higayon, ang katin-awan dili moabut. Gihisgotan nako ang opisyal nga panudlo pagsugod, nga
malaumon nga nagsaad nga "Mobangon ka ug modagan sa kadali!" Gihunahuna nako ang mga setting sa variable sa palibot, nagtan-aw sa duha ka mga video sa Apache Ignite Essentials, apan dili kaayo kini mapuslanon alang sa akong piho nga buluhaton. Malampuson nakong gilunsad ang Ignite gikan sa command line nga adunay standard nga file nga "example-ignite.xml", pagtukod sa unang aplikasyon Aplikasyon sa Compute gamit ang Maven. Ang aplikasyon nagtrabaho ug naggamit sa Zero Deployment, pagkanindot!

Nagbasa pa ako, ug didto ang pananglitan naggamit dayon sa affinityKey (gibuhat sa sayo pa pinaagi sa usa ka pangutana sa SQL), ug bisan gigamit ang misteryosong BinaryObject:

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

Gibasa nako kini gamay nga: binary format - usa ka butang sama sa pagpamalandong, pag-access sa mga natad sa usa ka butang pinaagi sa ngalan. Makabasa sa bili sa usa ka field nga dili hingpit nga deserialize ang butang (saving memory). Apan nganong gigamit ang BinaryObject imbes nga Persona, tungod kay adunay Zero Deployment? Ngano nga IgniteCache gibalhin sa IgniteCache ? Dili pa klaro.

Gibag-o nako ang Compute Application aron mahiangay sa akong kaso. Ang panguna nga yawe sa direktoryo sa mga punto sa pagbaligya sa MSSQL gihubit nga [id] [int] DILI NULL, naghimo ako usa ka cache pinaagi sa pagtandi

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

Sa xml config akong gipakita nga ang cache gibahin

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

Ang pagbahin sa punto sa pagbaligya nagtuo nga ang gikinahanglan nga aggregate matukod sa matag cluster node alang sa mga rekord sa salesPointCache nga anaa didto, ug human niini ang client node mohimo sa katapusang summasyon.

Nagbasa ko sa tutorial Una nga Ignite Compute Application, gibuhat ko kini pinaagi sa pagtandi. Sa matag cluster node akong gipadagan ang IgniteRunnable(), sama niini:

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

Gidugang nako ang aggregation ug pag-upload sa lohika ug gipadagan kini sa usa ka set sa datos sa pagsulay. Ang tanan nagtrabaho sa lokal sa development server.

Naglunsad ako og duha ka CentOs test servers, ipiho ang mga IP address sa default-config.xml, ipatuman ang matag usa

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

Ang duha ka Ignite node nagdagan ug makita ang usag usa. Gipunting nako ang gikinahanglan nga mga adres sa xml config sa aplikasyon sa kliyente, nagsugod kini, nagdugang usa ka ikatulo nga node sa topology ug diha-diha dayon adunay duha ka node pag-usab. Ang log nagpakita sa "ClassNotFoundException: model.SalesPoint" sa linya

SalesPoint sp=salesPointCache.get(spId);

Ang StackOverflow nag-ingon nga ang hinungdan sa sayup mao nga wala’y naandan nga klase sa SalesPoint sa mga server sa CentOs. Naabot na mi. Unsa man ang bahin sa "dili nimo kinahanglan nga mano-mano nga i-deploy ang imong Java code sa matag node" ug uban pa? O ang "imong Java code" dili bahin sa SalesPoint?

Tingali nasipyat ko sa usa ka butang - nagsugod ko sa pagpangita pag-usab, pagbasa ug pagpangita pag-usab. Pagkataudtaod, nabati nako nga nabasa nako ang tanan sa hilisgutan, wala nay bag-o. Samtang nangita ko, nakit-an nako ang pipila ka makapaikag nga mga komento.

Valentin Kulichenko, Nanguna nga Arkitekto sa GridGain Systems, tubag sa StackOverflow, Abril 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.

Laing awtoritatibo nga opinyon: Denis Magda, Direktor sa pagdumala sa produkto, GridGain Systems.

Artikulo sa HabrΓ© mahitungod sa microservices Naghisgot sa tulo ka artikulo ni Denis Magda: Microservices Bahin I, Mga Microservice Bahin II, Mga Microservice Bahin III 2016-2017. Sa ikaduhang artikulo, gisugyot ni Denis ang pagsugod ug cluster node pinaagi sa MaintenanceServiceNodeStartup.jar. Mahimo usab nimo gamiton ang paglansad sa xml configuration ug command line, apan kinahanglan nimo nga mano-mano nga ibutang ang custom nga mga klase sa matag deployed cluster node:

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.

Sa pagkatinuod, mao kana. Dinhi kini nahimo, ngano, kining misteryosong binary nga pormat!

3.SingleJar

Si Denis ang nag-una sa akong personal nga rating, IMHO ang labing mapuslanon nga panudlo sa tanan nga magamit. Sa iyang MicroServicesExample Ang Github adunay usa ka hingpit nga andam nga panig-ingnan sa pag-set up sa mga cluster node, nga nag-compile nga wala’y dugang nga pag-squatting.

Gibuhat nako kini sa parehas nga paagi ug nakakuha usa ka file sa banga nga naglansad sa "data node" o "client node" depende sa argumento sa command line. Ang asembliya magsugod ug molihok. Ang Zero Deployment napildi.

Ang transisyon gikan sa megabytes sa test data ngadto sa napulo ka gigabytes sa combat data nagpakita nga ang binary format anaa alang sa usa ka rason. Kinahanglan nga ma-optimize ang pagkonsumo sa memorya sa mga node, ug dinhi ang BinaryObject nahimong mapuslanon kaayo.

4. Mga konklusyon

Ang una nga pagbiaybiay nga nasugatan bahin sa pagkadili klaro sa dokumentasyon sa proyekto sa Apache Ignite nahimo nga patas; gamay ra ang nabag-o sukad sa 2016. Dili sayon ​​alang sa usa ka bag-ohan ang pag-assemble sa usa ka naglihok nga prototype base sa usa ka website ug/o repository.

Pinasukad sa mga resulta sa trabaho nga nahimo, ang impresyon mao nga ang Zero Deployment nagtrabaho, apan sa lebel lamang sa sistema. Usa ka butang nga sama niini: Ang BinaryObject gigamit sa pagtudlo sa hilit nga mga cluster node sa pagtrabaho uban sa custom nga mga klase; Zero Deployment - internal nga mekanismo
Ang Apache Ignite mismo ug nag-apod-apod sa mga butang sa sistema sa tibuok cluster.

Nanghinaut ko nga ang akong kasinatian mahimong mapuslanon sa mga bag-ong tiggamit sa Apache Ignite.

Source: www.habr.com

Idugang sa usa ka comment