Apache Ignite Zero Deployment: Really Zero?

Apache Ignite Zero Deployment: Really Zero?

Kita minangka departemen pangembangan teknologi jaringan ritel. Sawijining dina, manajemen nyetel tugas kanggo nyepetake petungan skala gedhe kanthi nggunakake Apache Ignite bebarengan karo MSSQL, lan nuduhake situs web kanthi ilustrasi lan conto kode Jawa sing apik. Aku langsung disenengi situs Zero Deployment, gambaran sing njanjeni mukjijat: sampeyan ora kudu masang kode Jawa utawa Scala kanthi manual ing saben simpul ing kothak lan nyebarake maneh saben owah-owahan. Nalika karya kasebut terus maju, ternyata Zero Deployment duwe panggunaan khusus, fitur sing aku pengin nuduhake. Ing ngisor potongan kasebut ana pikirane lan rincian implementasine.

1. Pratelan masalah

Intine masalah kaya ing ngisor iki. Ana direktori titik sales SalesPoint lan direktori produk Sku (Stock Keeping Unit). Titik penjualan duwe atribut "Tipe toko" kanthi nilai "cilik" lan "gedhe". A macem-macem (dhaptar produk saka titik Advertisement) disambungake menyang saben titik Advertisement (dimuat saka DBMS) lan informasi kasedhiya yen saka tanggal tartamtu produk kasebut
ora kalebu saka macem-macem utawa ditambahake ing macem-macem.

Sampeyan kudu ngatur cache partisi titik adol lan nyimpen informasi babagan produk sing disambungake sajrone wulan sadurunge. Kompatibilitas karo sistem pertempuran mbutuhake simpul klien Ignite kanggo mbukak data, ngetung agregat saka wangun (Tipe toko, kode Product, dina, nomer_of_sales_points) lan upload maneh menyang DBMS.

2. Pasinaon sastra

Aku durung duwe pengalaman, mula aku wiwit nari saka kompor. Sing, saka review saka publikasi.

Pasal 2016 Introducing Apache Ignite: First Steps ngandhut link menyang dokumentasi project Apache Ignite lan ing wektu sing padha reproach kanggo samar dokumentasi iki. Aku maca maneh kaping pindho, kajelasan ora teka. Aku deleng tutorial resmi miwiti, sing
optimistis janji "Sampeyan bakal munggah lan mlaku ing jiffy!" Aku ngerteni setelan variabel lingkungan, nonton loro video Apache Ignite Essentials, nanging ora migunani banget kanggo tugas khususku. Aku sukses mbukak Ignite saka baris printah kanthi file standar "example-ignite.xml", mbangun aplikasi pisanan Aplikasi komputasi nggunakake Maven. Aplikasi kasebut bisa digunakake lan nggunakake Zero Deployment, pancen apik tenan!

Aku maca luwih lanjut, lan ana conto langsung nggunakake affinityKey (digawe sadurungΓ© liwat query SQL), lan malah nggunakake BinaryObject misterius:

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

maca Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ: format binar - kaya bayangan, ngakses kolom obyek kanthi jeneng. Bisa maca Nilai saka lapangan tanpa rampung deserializing obyek (nyimpen memori). Nanging kenapa BinaryObject digunakake tinimbang Person, amarga ana Zero Deployment? Kenapa IgniteCache ditransfer menyang IgniteCache ? Durung jelas.

Aku nggawe maneh Aplikasi Komputasi sing cocog karo kasusku. Kunci utama direktori titik penjualan ing MSSQL ditetepake minangka [id] [int] NOT NULL, aku nggawe cache kanthi analogi

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

Ing xml config aku nuduhake yen cache wis partitioned

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

Pemisahan miturut titik dodolan nganggep manawa agregat sing dibutuhake bakal dibangun ing saben simpul kluster kanggo cathetan salesPointCache sing kasedhiya ing kana, sawise simpul klien bakal nindakake penjumlahan pungkasan.

Aku maca tutorial Aplikasi First Ignite Compute, Aku nindakake kanthi analogi. Ing saben simpul kluster aku mbukak IgniteRunnable (), kaya iki:

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

Aku nambah agregasi lan ngunggah logika lan mbukak ing set data test. Kabeh bisa digunakake sacara lokal ing server pangembangan.

Aku miwiti loro server tes CentOs, nemtokake alamat IP ing default-config.xml, nglakokake saben

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

Loro-lorone simpul Ignite mlaku lan bisa ndeleng saben liyane. Aku nemtokake alamat sing dibutuhake ing konfigurasi xml saka aplikasi klien, diwiwiti, nambah simpul katelu ing topologi lan langsung ana rong kelenjar maneh. Log nuduhake "ClassNotFoundException: model.SalesPoint" ing baris

SalesPoint sp=salesPointCache.get(spId);

StackOverflow ujar manawa alasan kesalahan kasebut yaiku ora ana kelas SalesPoint khusus ing server CentOs. Kita wis teka. Kepiye babagan "sampeyan ora kudu masang kode Jawa kanthi manual ing saben simpul" lan liya-liyane? Utawa "kode Jawa sampeyan" ora babagan SalesPoint?

Aku mbokmenawa ora kejawab soko - Aku miwiti nggoleki maneh, maca lan nggoleki maneh. Sawise sawetara wektu, aku rumangsa wis maca kabeh babagan topik kasebut, ora ana sing anyar maneh. Nalika aku nggoleki, aku nemokake sawetara komentar sing menarik.

Valentin Kulichenko, Arsitek Utama ing Sistem GridGain, njawab ing StackOverflow, April 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.

Pendapat liyane sing wibawa: Denis Magda, Direktur manajemen produk, GridGain Systems.

Artikel babagan HabrΓ© babagan microservices referensi telung artikel dening Denis Magda: Layanan Mikro Bagian I, Layanan Mikro Bagian II, Layanan Mikro Bagian III 2016-2017. Ing artikel kapindho, Denis nyaranake miwiti simpul kluster liwat MaintenanceServiceNodeStartup.jar. Sampeyan uga bisa nggunakake peluncuran kanthi konfigurasi xml lan baris perintah, nanging sampeyan kudu kanthi manual nyetel kelas khusus ing saben simpul kluster sing disebarake:

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.

Pancen, iku. Kene dadi metu, kok, format biner misterius iki!

3. Tunggal

Denis njupuk Panggonan pisanan ing rating pribadi, IMHO tutorial paling migunani kabeh kasedhiya. Ing dheweke MicroServicesConto Github ngemot conto sing siap-siap kanggo nyetel simpul kluster, sing dikompilasi tanpa squatting tambahan.

Aku nindakake kanthi cara sing padha lan entuk file jar siji sing ngluncurake "simpul data" utawa "simpul klien" gumantung saka argumen baris perintah. DΓ©wan diwiwiti lan dianggo. Zero Deployment wis dikalahake.

Transisi saka megabyte data tes menyang puluhan gigabyte data pertempuran nuduhake yen format binar ana kanthi alesan. Perlu kanggo ngoptimalake konsumsi memori ing simpul, lan ing kene BinaryObject dadi migunani banget.

4. Kesimpulan

Reproach pisanan sing ditemokake babagan samar-samar dokumentasi proyek Apache Ignite dadi adil; ora ana owah-owahan wiwit taun 2016. Ora gampang kanggo pamula ngumpulake prototipe sing bisa digunakake adhedhasar situs web lan / utawa repositori.

Adhedhasar asil karya sing ditindakake, kesan kasebut yaiku Zero Deployment bisa digunakake, nanging mung ing tingkat sistem. Kaya iki: BinaryObject digunakake kanggo ngajar simpul kluster remot kanggo nggarap kelas khusus; Zero Deployment - mekanisme internal
Apache Ignite dhewe lan nyebarake obyek sistem ing kluster.

Muga-muga pengalamanku bisa migunani kanggo pangguna Apache Ignite anyar.

Source: www.habr.com

Add a comment