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
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
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.
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
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
@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.
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:
Habre haqidagi maqola
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
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