Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

Hey Xabr!

haqida kitobni kuzatib borishimizni eslatib o'tamiz Kafka kutubxona haqida bir xil qiziqarli asar nashr qildik Kafka Streams API.

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

Hozircha jamiyat bu kuchli vositaning chegaralarini endigina o‘rganmoqda. Xullas, yaqinda maqola chop etildi, uning tarjimasi bilan sizni tanishtirmoqchimiz. Muallif o'z tajribasidan kelib chiqib, Kafka oqimlarini qanday qilib taqsimlangan ma'lumotlar omboriga aylantirish kerakligini aytadi. O'qishdan zavqlaning!

Apache kutubxonasi Kafka oqimlari butun dunyo bo'ylab korxonalarda Apache Kafka ustiga taqsimlangan oqimlarni qayta ishlash uchun ishlatiladi. Ushbu ramkaning qadrlanmagan jihatlaridan biri shundaki, u ipni qayta ishlash asosida ishlab chiqarilgan mahalliy holatni saqlashga imkon beradi.

Ushbu maqolada men sizga bulutli ilovalar xavfsizligi uchun mahsulotni ishlab chiqishda kompaniyamiz ushbu imkoniyatdan qanday qilib foydali foydalanishga muvaffaq bo'lganini aytib beraman. Kafka oqimlaridan foydalanib, biz umumiy holat mikroservislarini yaratdik, ularning har biri nosozliklarga chidamli va tizimdagi ob'ektlar holati haqida ishonchli ma'lumotlarning yuqori darajada mavjud manbai bo'lib xizmat qiladi. Biz uchun bu ishonchlilik va qo'llab-quvvatlash qulayligi nuqtai nazaridan oldinga qadamdir.

Agar siz ob'ektlaringizning rasmiy holatini qo'llab-quvvatlash uchun yagona markaziy ma'lumotlar bazasidan foydalanishga imkon beruvchi muqobil yondashuvga qiziqsangiz, uni o'qing, bu qiziqarli bo'ladi...

Nima uchun biz umumiy davlat bilan ishlash uslubimizni o'zgartirish vaqti keldi deb o'ylagandik

Biz agent hisobotlari asosida turli ob'ektlarning holatini saqlab qolishimiz kerak edi (masalan: sayt hujum ostidami)? Kafka Streams-ga o'tishdan oldin biz ko'pincha davlat boshqaruvi uchun yagona markaziy ma'lumotlar bazasiga (+ xizmat API) tayanardik. Ushbu yondashuvning kamchiliklari bor: sana intensiv vaziyatlar izchillik va sinxronizatsiyani saqlab qolish haqiqiy muammoga aylanadi. Ma'lumotlar bazasi to'siq bo'lib qolishi yoki yakunlanishi mumkin poyga holati va oldindan aytib bo'lmaydiganlikdan aziyat chekadi.

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

1-rasm: ga o'tishdan oldin ko'rilgan odatiy split-holat stsenariysi
Kafka va Kafka oqimlari: agentlar o'z qarashlarini API orqali bildiradilar, yangilangan holat markaziy ma'lumotlar bazasi orqali hisoblanadi.

Umumiy davlat mikroservislarini yaratishni osonlashtirgan Kafka Streams bilan tanishing

Taxminan bir yil oldin biz ushbu muammolarni hal qilish uchun umumiy davlat stsenariylarimizni ko'rib chiqishga qaror qildik. Biz darhol Kafka Streams-ni sinab ko'rishga qaror qildik - biz uning qanchalik keng ko'lamli, yuqori darajada mavjud va nosozliklarga chidamliligini, qanday boy oqim funksiyasiga ega ekanligini bilamiz (transformatsiyalar, shu jumladan holatli). Bizga kerak bo'lgan narsa, Kafkada xabar almashish tizimi qanchalik etuk va ishonchli bo'lganligi haqida gapirmasa ham bo'ladi.

Biz yaratgan statistik mikroservislarning har biri juda oddiy topologiyaga ega Kafka Streams misoli ustiga qurilgan. U 1) manbadan 2) doimiy kalit-qiymat omboriga ega protsessordan 3) lavabodan iborat edi:

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

2-rasm: Holatli mikroservislar uchun oqim misollarimizning standart topologiyasi. E'tibor bering, bu erda rejalashtirish metama'lumotlarini o'z ichiga olgan ombor mavjud.

Ushbu yangi yondashuvda agentlar manba mavzusiga kiritilgan xabarlarni tuzadilar va iste'molchilar, masalan, pochta xabarnomasi xizmati - hisoblangan umumiy holatni sink (chiqarish mavzusi) orqali oladilar.

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

3-rasm: Umumiy mikroxizmatlarga ega stsenariy uchun topshiriqlar oqimining yangi namunasi: 1) agent Kafka manbasi mavzusiga kelgan xabarni yaratadi; 2) umumiy holatga ega mikroservis (Kafka oqimlari yordamida) uni qayta ishlaydi va hisoblangan holatni yakuniy Kafka mavzusiga yozadi; shundan so'ng 3) iste'molchilar yangi holatni qabul qiladilar

Hey, bu o'rnatilgan kalit-qiymat do'koni aslida juda foydali!

Yuqorida aytib o'tilganidek, bizning umumiy holat topologiyamiz kalit-qiymatlar do'konini o'z ichiga oladi. Biz uni ishlatish uchun bir nechta variantni topdik va ulardan ikkitasi quyida tavsiflanadi.

Variant №1: Hisoblash uchun kalit-qiymat do'konidan foydalaning

Bizning birinchi kalit-qiymat do'konimizda hisob-kitoblar uchun zarur bo'lgan yordamchi ma'lumotlar mavjud edi. Masalan, ba'zi hollarda umumiy davlat "ko'pchilik ovoz" tamoyili bilan belgilandi. Omborda ba'zi bir ob'ektning holati to'g'risidagi barcha so'nggi agent hisobotlari bo'lishi mumkin. Keyin, biz u yoki bu agentdan yangi hisobot olganimizda, biz uni saqlashimiz, xuddi shu ob'ekt holati haqidagi barcha boshqa agentlardan hisobotlarni saqlashdan olishimiz va hisobni takrorlashimiz mumkin edi.
Quyidagi 4-rasmda biz kalit/qiymat do'konini protsessorning qayta ishlash usuliga qanday ta'sir qilganimiz ko'rsatilgan, shunda yangi xabar qayta ishlanishi mumkin.

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

4-rasm: Biz protsessorni qayta ishlash usuli uchun kalit-qiymatlar do'koniga kirishni ochamiz (bundan keyin umumiy holat bilan ishlaydigan har bir skript usulni amalga oshirishi kerak. doProcess)

Variant №2: Kafka oqimlari ustida CRUD API yaratish

Bizning asosiy vazifalar oqimini o'rnatganimizdan so'ng, biz umumiy davlat mikroservislarimiz uchun RESTful CRUD API yozishga harakat qila boshladik. Biz ba'zi yoki barcha ob'ektlarning holatini olishni, shuningdek, ob'ekt holatini o'rnatish yoki olib tashlashni xohladik (backend qo'llab-quvvatlash uchun foydali).

Barcha Get State API-larini qo'llab-quvvatlash uchun, biz qayta ishlash jarayonida holatni qayta hisoblashimiz kerak bo'lganda, biz uni uzoq vaqt davomida o'rnatilgan kalit-qiymat do'konida saqladik. Bunday holda, quyidagi ro'yxatda ko'rsatilganidek, Kafka oqimlarining bitta nusxasi yordamida bunday APIni amalga oshirish juda oson bo'ladi:

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

5-rasm: Ob'ektning oldindan hisoblangan holatini olish uchun o'rnatilgan kalit-qiymat do'konidan foydalanish

API orqali ob'ekt holatini yangilash ham oson. Asosan, qilishingiz kerak bo'lgan yagona narsa - Kafka ishlab chiqaruvchisini yaratish va undan yangi holatni o'z ichiga olgan yozuvni yaratish uchun foydalanish. Bu API orqali yaratilgan barcha xabarlar boshqa ishlab chiqaruvchilardan (masalan, agentlardan) olingan xabarlar kabi qayta ishlanishini ta'minlaydi.

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

6-rasm: Kafka ishlab chiqaruvchisi yordamida ob'ekt holatini o'rnatishingiz mumkin

Kichkina murakkablik: Kafkada ko'plab bo'limlar mavjud

Keyinchalik, biz stsenariy bo'yicha umumiy mikroservislar klasterini taqdim etish orqali ishlov berish yukini taqsimlashni va mavjudligini yaxshilashni xohladik. Sozlash oson kechdi: biz barcha misollarni bir xil dastur identifikatori (va bir xil yuklash serverlari) ostida ishlashga sozlaganimizdan so'ng, qolgan deyarli hamma narsa avtomatik ravishda amalga oshirildi. Shuningdek, biz har bir manba mavzusi bir nechta bo'limlardan iborat bo'lishini aniqladik, shuning uchun har bir misolga bunday bo'limlarning kichik to'plami tayinlanishi mumkin.

Shuni ham aytib o'tamanki, davlat do'konining zaxira nusxasini yaratish odatiy holdir, masalan, muvaffaqiyatsizlikdan keyin qayta tiklangan taqdirda, ushbu nusxani boshqa nusxaga o'tkazing. Kafka oqimlaridagi har bir davlat do'koni uchun o'zgarishlar jurnali (mahalliy yangilanishlarni kuzatuvchi) bilan takrorlangan mavzu yaratiladi. Shunday qilib, Kafka doimiy ravishda davlat do'konini qo'llab-quvvatlaydi. Shu sababli, u yoki bu Kafka Streams misolida ishlamay qolgan taqdirda, davlat do'koni tegishli bo'limlar ketadigan boshqa nusxada tezda tiklanishi mumkin. Bizning sinovlarimiz shuni ko'rsatdiki, do'konda millionlab yozuvlar bo'lsa ham, bu soniyalarda amalga oshiriladi.

Umumiy holatga ega yagona mikroservisdan mikroservislar klasteriga o'tish, Get State API-ni amalga oshirish unchalik ahamiyatsiz bo'lib qoladi. Yangi vaziyatda, har bir mikroservisning davlat do'koni umumiy rasmning faqat bir qismini (kalitlari ma'lum bir bo'limga joylashtirilgan ob'ektlar) o'z ichiga oladi. Qaysi misolda bizga kerak bo'lgan ob'ekt holatini aniqlashimiz kerak edi va biz buni quyida ko'rsatilganidek, ip metama'lumotlariga asoslanib qildik:

Nafaqat qayta ishlash: Biz qanday qilib Kafka Streams-dan tarqatilgan ma'lumotlar bazasini yaratdik va undan nima keldi

7-rasm: Oqim metama'lumotlaridan foydalanib, biz kerakli ob'ekt holatini qaysi misoldan so'rashni aniqlaymiz; shunga o'xshash yondashuv GET ALL API bilan ishlatilgan

Asosiy topilmalar

Kafka oqimlaridagi davlat do'konlari de-fakto taqsimlangan ma'lumotlar bazasi bo'lib xizmat qilishi mumkin,

  • Kafkada doimiy ravishda takrorlanadi
  • Bunday tizim ustiga CRUD API osongina tuzilishi mumkin
  • Bir nechta bo'limlarni boshqarish biroz murakkabroq
  • Yordamchi ma'lumotlarni saqlash uchun oqim topologiyasiga bir yoki bir nechta davlat do'konlarini qo'shish ham mumkin. Ushbu parametr quyidagilar uchun ishlatilishi mumkin:
  • Oqimlarni qayta ishlash jarayonida hisob-kitoblar uchun zarur bo'lgan ma'lumotlarni uzoq muddatli saqlash
  • Keyingi safar oqim namunasi taqdim etilganda foydali bo'lishi mumkin bo'lgan ma'lumotlarni uzoq muddatli saqlash
  • yana ko'p ...

Ushbu va boshqa afzalliklar Kafka oqimlarini biznikiga o'xshash taqsimlangan tizimda global holatni saqlab qolish uchun juda mos qiladi. Kafka Streams ishlab chiqarishda juda ishonchli ekanligini isbotladi (uni ishga tushirganimizdan beri biz deyarli hech qanday xabar yo‘qotmadik) va uning imkoniyatlari shu bilan cheklanib qolmasligiga aminmiz!

Manba: www.habr.com

a Izoh qo'shish