
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 , 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 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 , 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 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 , 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 lagi ngluncurake rong server uji coba. CentOs, aku nemtokake alamat IP ing default-config.xml, aku nglakokake ing saben
./bin/ignite.sh config/default-config.xmlLoro-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 kesalahan kasebut disebabake dening server. CentOs Ora ana kelas khusus SalesPoint. Ayo diwiwiti. Kepiye babagan "sampeyan ora perlu masang kode Java kanthi manual ing saben node" lan liya-liyane? Utawa "kode Java sampeyan" dudu barang 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.
, Arsitek Utama ing Sistem GridGain, 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: , Direktur manajemen produk, GridGain Systems.
Artikel babagan Habré referensi telung artikel dening Denis Magda: , , 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 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
