Apache Ignite Zero Deployment: Leres Zero?

Apache Ignite Zero Deployment: Leres Zero?

Kami mangrupikeun departemén pamekaran téknologi tina jaringan ritel. Dina hiji poé, manajemén netepkeun tugas nyepetkeun itungan skala badag ku ngagunakeun Apache Ignite ditéang jeung MSSQL, sarta némbongkeun hiji ramatloka kalawan ilustrasi geulis tur conto kode Java. Kuring langsung resep situs Nol Panyebaran, katerangan anu ngajangjikeun mujijat: anjeun henteu kedah sacara manual nyebarkeun kode Java atanapi Scala anjeun dina unggal titik dina grid sareng nyebarkeun deui unggal waktosna robih. Nalika karyana maju, tétéla yén Zero Deployment gaduh kagunaan khusus, fitur anu kuring hoyong bagikeun. Di handap cut aya pikiran jeung rinci palaksanaan.

1. Rumusan masalah

Hakekat tugas ieu di handap. Aya diréktori titik penjualan SalesPoint sareng diréktori produk Sku (Stock Keeping Unit). Titik jual ngagaduhan atribut "Tipe toko" kalayan nilai "leutik" sareng "ageung". Sajumlah (daptar produk tina titik jual) disambungkeun ka unggal titik jual (dimuat tina DBMS) sareng inpormasi disayogikeun yén ti tanggal anu ditangtukeun produk anu ditangtukeun.
dikaluarkeun tina rupa-rupa atawa ditambahkeun kana rupa-rupa.

Diperlukeun pikeun ngatur cache partisi tina titik penjualan sareng nyimpen di jerona inpormasi ngeunaan produk anu dihubungkeun salami sabulan sateuacanna. Kasaluyuan sareng sistem tempur merlukeun titik klien Ignite pikeun ngamuat data, ngitung agrégat tina formulir (tipe Toko, Kode Produk, dinten, jumlah_sales_points) sarta unggah deui ka DBMS.

2. Ulikan sastra

Abdi henteu acan gaduh pangalaman, janten kuring mimiti nari tina kompor. Nyaéta, tina tinjauan publikasi.

Pasal 2016 Ngenalkeun Apache Ignite: Léngkah munggaran ngandung tumbu ka dokuméntasi tina proyék Apache Ignite sarta sakaligus mangrupa reproach pikeun vagueness tina dokuméntasi ieu. Kuring maca deui sababaraha kali, kajelasan henteu sumping. Kuring ngarujuk kana tutorial resmi ngamimitianyen
optimis ngajangjikeun "Anjeun bakal bangkit sareng ngajalankeun sakedap!" Kuring nuju milarian setélan variabel lingkungan, ningali dua pidéo Apache Ignite Essentials, aranjeunna henteu kapaké pikeun tugas khusus kuring. Kuring suksés ngaluncurkeun Ignite tina garis paréntah kalayan file standar "example-ignite.xml", ngawangun aplikasi munggaran Aplikasi Komputasi ngagunakeun Maven. Aplikasi dianggo sareng nganggo Zero Deployment, kaéndahan!

Kuring maca salajengna, sarta aya conto langsung ngagunakeun affinityKey (dijieun saméméhna ngaliwatan query SQL), komo ngagunakeun BinaryObject misterius:

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

Kuring maca eta saeutik saeutik: format binér - hal kawas cerminan, ngakses widang hiji obyék ku ngaran. Bisa maca nilai widang tanpa lengkep deserializing objék (nyimpen memori). Tapi naha BinaryObject dianggo tibatan Jalma, sabab aya Zero Deployment? Naha IgniteCache ditarjamahkeun kana IgniteCache? Tacan écés.

Kuring nyieun ulang Aplikasi Komputasi pikeun nyocogkeun kasus kuring. Konci primér diréktori titik diobral di MSSQL dihartikeun salaku [id] [int] NOT NULL, Kuring nyieun cache ku analogi

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

Dina xml config I nunjukkeun yén cache ieu partitioned

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

Ngabagi dumasar titik jual nganggap yén agrégat anu diperyogikeun bakal diwangun dina unggal titik klaster pikeun rékaman salesPointCache anu aya di dinya, saatos éta titik klien bakal ngalaksanakeun penjumlahan akhir.

Kuring maca tutorial Mimitian Ignite Compute Aplikasi, Kuring ngalakukeun eta ku analogi. Dina unggal titik kluster kuring ngajalankeun IgniteRunnable (), sapertos kieu:

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

Kuring nambahkeun aggregation sarta unggah logika tur ngajalankeun eta dina set data test. Sagalana jalan lokal dina server ngembangkeun.

Kuring ngajalankeun dua server test CentOs, tangtukeun alamat IP di default-config.xml, ngajalankeun on unggal.

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

Kadua titik Ignite ngajalankeun sareng tiasa ningali masing-masing. Kuring nangtukeun alamat diperlukeun dina xml config tina aplikasi klien, dimimitian, nambahkeun titik katilu ka topology jeung langsung aya dua titik deui. Log nembongkeun "ClassNotFoundException: model.SalesPoint" dina garis

SalesPoint sp=salesPointCache.get(spId);

StackOverflow nyebatkeun yén alesan pikeun kasalahan éta henteu aya kelas SalesPoint khusus dina server CentOs. Kami geus anjog. Kumaha upami "anjeun teu kedah sacara manual nyebarkeun kode Java anjeun dina unggal titik" sareng salajengna dina téks? Atanapi "kode Java anjeun" sanés ngeunaan SalesPoint?

Kuring sigana sono - kuring ngamimitian milarian deui, maca sareng milarian deui. Saatos sababaraha waktos, kuring ngarasa yén kuring parantos maca sadayana ngeunaan topik éta, teu aya anu énggal deui. Nalika kuring milarian, kuring mendakan sababaraha koméntar anu pikaresepeun.

Valentin Kulichenko, Arsiték Lead di GridGain Systems, jawaban dina 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.

Pamadegan otoritatif séjén: Denis Magda, Diréktur manajemén produk, GridGain Systems.

Artikel ngeunaan Habré ngeunaan microservices rujukan tilu artikel ku Denis Magda: Microservices Bagian I, Microservices Bagian II, Microservices Bagian III 2016-2017. Dina artikel kadua, Denis nyarankeun ngamimitian titik klaster via MaintenanceServiceNodeStartup.jar. Anjeun ogé tiasa nganggo peluncuran sareng konfigurasi xml sareng garis paréntah, tapi anjeun kedah sacara manual nempatkeun kelas khusus dina unggal titik kluster anu disebarkeun:

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.

Mémang, éta. Di dieu tétéla, naha, format binér misterius ieu!

3. TunggalJar

Denis lumangsung kahiji dina rating pribadi kuring, IMHO tutorial pang gunana sadaya sadia. Dina dirina MicroServicesConto Github ngandung conto lengkep siap-dijieun nyetel titik klaster, nu compiles tanpa squatting tambahan.

Kuring ngalakukeun cara anu sami sareng kéngingkeun file jar tunggal anu ngaluncurkeun "titik data" atanapi "titik klien" gumantung kana argumen garis paréntah. Majelis dimimitian sareng jalan. Nol deployment geus dielehkeun.

Transisi tina megabytes data uji ka puluhan gigabytes data tempur nunjukkeun yén format binér aya alesan. Ieu diperlukeun pikeun ngaoptimalkeun konsumsi memori dina titik, sarta ieu tempat BinaryObject tétéla pohara kapaké.

4. Kacindekan

Reproach munggaran anu dipendakan ngeunaan samar tina dokuméntasi proyék Apache Ignite tétéla adil; sakedik parantos robih ti saprak 2016. Teu gampang pikeun pamula pikeun ngumpul prototipe anu fungsina dumasar kana situs wéb sareng / atanapi gudang.

Dumasar kana hasil pagawéan anu dilakukeun, kesan yén Zero Deployment tiasa dianggo, tapi ngan ukur dina tingkat sistem. Hal kawas kieu: BinaryObject dipaké pikeun ngajarkeun titik cluster jauh pikeun digawe sareng kelas custom; Nol Deployment - mékanisme internal
Apache Ignite sorangan sareng nyebarkeun objék sistem sapanjang kluster.

Kuring miharep pangalaman kuring bakal mangpaat pikeun pamaké Apache Ignite anyar.

sumber: www.habr.com

Tambahkeun komentar