Apache Ignite Zero Deployment: Haqiqatan ham nolmi?

Apache Ignite Zero Deployment: Haqiqatan ham nolmi?

Biz chakana savdo tarmog'ining texnologiyani rivojlantirish bo'limimiz. Bir kuni rahbariyat MSSQL bilan birgalikda Apache Ignite’dan foydalangan holda keng ko‘lamli hisob-kitoblarni tezlashtirish vazifasini qo‘ydi va Java kodining chiroyli rasmlari va namunalari bilan veb-saytni ko‘rsatdi. Menga sayt darhol yoqdi Nolinchi joylashtirish, ta'rifi mo''jizalar va'da qiladi: siz Java yoki Scala kodingizni tarmoqdagi har bir tugunga qo'lda joylashtirishingiz va har safar o'zgarganda uni qayta joylashtirishingiz shart emas. Ish davom etar ekan, Zero Deploymentning o'ziga xos foydalanishlari borligi ma'lum bo'ldi, men ularning xususiyatlarini baham ko'rmoqchiman. Kesish ostida fikrlar va amalga oshirish tafsilotlari mavjud.

1. Muammoning bayoni

Muammoning mohiyati quyidagicha. SalesPoint savdo nuqtalari katalogi va Sku (Stokni saqlash birligi) mahsulot katalogi mavjud. Savdo nuqtasi "kichik" va "katta" qiymatlari bilan "Do'kon turi" atributiga ega. Assortiment (savdo punkti mahsulotlari ro'yxati) har bir savdo nuqtasiga (DBMSdan yuklangan) ulanadi va belgilangan sanadan boshlab ko'rsatilgan mahsulot to'g'risida ma'lumot beriladi.
assortimentdan chiqarilgan yoki assortimentga qo'shilgan.

Savdo nuqtalarining bo'lingan keshini tashkil qilish va unda bir oy oldin ulangan mahsulotlar haqidagi ma'lumotlarni saqlash kerak. Jangovar tizim bilan muvofiqligi Ignite mijoz tugunidan maʼlumotlarni yuklash, shakl agregatini hisoblash (doʻkon turi, mahsulot kodi, kun, sotish_nuqtalari_soni) va uni DBMSga qayta yuklash uchun talab qiladi.

2. Adabiyotni o'rganish

Menda hali hech qanday tajriba yo'q, shuning uchun pechdan raqsga tushishni boshlayman. Ya'ni, nashrlarni ko'rib chiqishdan.

2016-modda Apache Ignite bilan tanishish: Birinchi qadamlar Apache Ignite loyihasining hujjatlariga havola va shu bilan birga ushbu hujjatlarning noaniqligi uchun tanqidni o'z ichiga oladi. Men uni bir necha marta qayta o'qidim, aniqlik kelmaydi. Men rasmiy qo'llanmaga murojaat qilaman ishni boshlash, bu
optimistik tarzda va'da qiladi: "Siz bir zumda ishlaysiz!" Men ikkita Apache Ignite Essentials videosini tomosha qilib, atrof-muhit o'zgaruvchilari sozlamalarini aniqlayapman, lekin ular mening maxsus vazifam uchun unchalik foydali emas edi. Men Ignite-ni buyruq satridan birinchi ilovani yaratuvchi "example-ignite.xml" standart fayli bilan muvaffaqiyatli ishga tushirdim. Hisoblash ilovasi Maven yordamida. Ilova ishlaydi va Zero Deploymentdan foydalanadi, qanday go'zallik!

Keyinchalik o'qib chiqdim va u erda misol darhol affinityKey-dan (ilgari SQL so'rovi orqali yaratilgan) va hatto sirli BinaryObject-dan foydalanadi:

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

Men uni o'qidim немного: ikkilik format - aks ettirish kabi narsa, ob'ektning maydonlariga nom bo'yicha kirish. Ob'ektni to'liq seriyadan chiqarmasdan (xotirani tejash) maydon qiymatini o'qiy oladi. Lekin nega Odam o'rniga BinaryObject ishlatiladi, chunki Zero Deployment mavjud? Nima uchun IgniteCache IgniteCache-ga o'tkazildi ? Hali aniq emas.

Hisoblash ilovasini o‘z ishimga mos ravishda qayta ishlayapman. MSSQL-dagi savdo nuqtalari katalogining asosiy kaliti [id] [int] NULL EMAS sifatida belgilanadi, men analogiya bo'yicha kesh yarataman

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

Xml konfiguratsiyasida men kesh bo'linganligini ko'rsataman

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

Savdo nuqtasi bo'yicha bo'linish talab qilinadigan agregat har bir klaster tugunida mavjud salesPointCache yozuvlari uchun o'rnatilishini nazarda tutadi, shundan so'ng mijoz tugun yakuniy yig'indini amalga oshiradi.

Men o'quv qo'llanmasini o'qiyapman Birinchi Ignite Compute ilovasi, Men buni analogiya orqali qilaman. Har bir klaster tugunida men IgniteRunnable() ni ishga tushiraman, shunga o'xshash narsa:

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

Men yig'ish va yuklash mantig'ini qo'shaman va uni test ma'lumotlar to'plamida ishga tushiraman. Rivojlanish serverida hamma narsa mahalliy ishlaydi.

Men ikkita CentOs test serverini ishga tushiraman, default-config.xml da IP manzillarini belgilayman, har birida bajaraman.

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

Ikkala Ignite tugunlari ishlayapti va bir-birini ko'ra oladi. Men mijoz ilovasining xml konfiguratsiyasida kerakli manzillarni ko'rsataman, u ishga tushadi, topologiyaga uchinchi tugunni qo'shadi va darhol yana ikkita tugun paydo bo'ladi. Jurnal qatorda "ClassNotFoundException: model.SalesPoint" ni ko'rsatadi

SalesPoint sp=salesPointCache.get(spId);

StackOverflow, xatoning sababi CentOs serverlarida maxsus SalesPoint klassi yo'qligida ekanligini aytadi. Biz yetib keldik. "Java kodingizni har bir tugunga qo'lda joylashtirishingiz shart emas" va hokazolar haqida nima deyish mumkin? Yoki "sizning Java kodingiz" SalesPoint haqida emasmi?

Men nimanidir o'tkazib yuborgan bo'lsam kerak - men yana qidira boshlayman, o'qiyman va yana qidiraman. Biroz vaqt o'tgach, men mavzu bo'yicha hamma narsani o'qib chiqdim, endi hech qanday yangilik yo'qligini his qilaman. Qidirayotib, qiziqarli sharhlarni topdim.

Valentin Kulichenko, GridGain Systems bosh arxitektori, javob berish StackOverflow da, 2016 yil aprel:

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.

Yana bir ishonchli fikr: Denis Magda, GridGain Systems mahsulotlarini boshqarish bo'yicha direktor.

Habre haqidagi maqola mikroservislar haqida Denis Magdaning uchta maqolasiga havolalar: Mikroservislar I qism, Mikroservislar II qism, Mikroservislar III qism 2016-2017 yillar. Ikkinchi maqolada Denis MaintenanceServiceNodeStartup.jar orqali klaster tugunini ishga tushirishni taklif qiladi. Siz shuningdek, xml konfiguratsiyasi va buyruq qatori bilan ishga tushirishdan foydalanishingiz mumkin, ammo keyin har bir joylashtirilgan klaster tuguniga maxsus sinflarni qo'lda qo'yishingiz kerak:

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.

Haqiqatan ham, shunday. Mana, nima uchun, bu sirli ikkilik format!

3.SingleJar

Denis mening shaxsiy reytingimda birinchi o'rinni egalladi, IMHO barcha mavjud bo'lgan eng foydali qo'llanma. Uning ichida MicroServices Misol Github klaster tugunlarini o'rnatishning to'liq tayyor namunasini o'z ichiga oladi, ular hech qanday qo'shimcha cho'zilishsiz kompilyatsiya qilinadi.

Men buni xuddi shunday qilaman va buyruq qatori argumentiga qarab "ma'lumotlar tugunini" yoki "mijoz tugunini" ishga tushiradigan bitta jar faylini olaman. Yig'ilish boshlanadi va ishlaydi. Zero Deployment mag'lubiyatga uchradi.

Megabayt sinov ma'lumotlaridan o'nlab gigabayt jangovar ma'lumotlarga o'tish ikkilik formatning biron bir sababga ko'ra mavjudligini ko'rsatdi. Tugunlarda xotira sarfini optimallashtirish kerak edi va bu erda BinaryObject juda foydali bo'lib chiqdi.

4. Xulosalar

Apache Ignite loyiha hujjatlarining noaniqligi haqida birinchi tanbeh adolatli bo'lib chiqdi; 2016 yildan beri deyarli o'zgarmadi. Yangi boshlanuvchilar uchun veb-sayt va / yoki omborga asoslangan ishlaydigan prototipni yig'ish oson emas.

Bajarilgan ish natijalariga ko'ra, Zero Deployment ishlaydi, ammo faqat tizim darajasida taassurot qoldirdi. Bunga o'xshash narsa: BinaryObject masofaviy klaster tugunlarini maxsus sinflar bilan ishlashga o'rgatish uchun ishlatiladi; Nolinchi joylashtirish - ichki mexanizm
Apache Ignite o'zi va tizim ob'ektlarini klaster bo'ylab tarqatadi.

Umid qilamanki, mening tajribam yangi Apache Ignite foydalanuvchilari uchun foydali bo'ladi.

Manba: www.habr.com

a Izoh qo'shish