Tarantool Data Grid arxitekturasi va imkoniyatlari

Tarantool Data Grid arxitekturasi va imkoniyatlari

2017 yilda biz Alfa-Bank investitsiya biznesining tranzaktsion asosini rivojlantirish bo'yicha tanlovda g'olib chiqdik va ish boshladik (HighLoad++ 2018 da investitsiya biznesining asosiy yo'nalishi bo'yicha hisobot bilan) gapirdi Vladimir Drynkin, Alfa Bank investitsiya biznesining tranzaktsion yadrosi rahbari). Ushbu tizim turli xil manbalardan olingan tranzaksiya ma'lumotlarini turli formatlarda jamlashi, ma'lumotlarni birlashtirilgan shaklga keltirishi, saqlashi va ularga kirishni ta'minlashi kerak edi.

Rivojlanish jarayonida tizim rivojlandi va funksionallikka ega bo'ldi va bir nuqtada biz aniq belgilangan vazifalarni hal qilish uchun yaratilgan amaliy dasturiy ta'minotdan ko'ra ko'proq narsani kristallashtirganimizni angladik: biz muvaffaqiyatga erishdik. doimiy saqlash bilan taqsimlangan ilovalarni yaratish tizimi. Biz to'plagan tajribamiz yangi mahsulotning asosini tashkil etdi - Tarantool ma'lumotlar tarmog'i (TDG).

Men TDG arxitekturasi va ishlab chiqish jarayonida biz erishgan yechimlar haqida gapirmoqchiman, sizni asosiy funksionallik bilan tanishtirmoqchiman va mahsulotimiz qanday qilib toʻliq yechimlarni yaratish uchun asos boʻlishi mumkinligini koʻrsatmoqchiman.

Arxitektura jihatidan biz tizimni alohida qismlarga ajratdik rollar, ularning har biri ma'lum bir qator muammolarni hal qilish uchun mas'uldir. Bitta ishlaydigan dastur namunasi bir yoki bir nechta rol turlarini amalga oshiradi. Klasterda bir xil turdagi bir nechta rollar bo'lishi mumkin:

Tarantool Data Grid arxitekturasi va imkoniyatlari

ulagichi

Ulagich tashqi dunyo bilan aloqa qilish uchun javobgardir; uning vazifasi so'rovni qabul qilish, uni tahlil qilish va agar bu muvaffaqiyatli bo'lsa, ma'lumotlarni qayta ishlash uchun kiritish protsessoriga yuborish. Biz HTTP, SOAP, Kafka, FIX formatlarini qo'llab-quvvatlaymiz. Arxitektura sizga yangi formatlarni qo'llab-quvvatlash imkonini beradi, yaqinda IBM MQ qo'llab-quvvatlanadi. Agar so'rovni tahlil qilish muvaffaqiyatsiz tugasa, ulagich xatoni qaytaradi; aks holda, so'rovni keyingi qayta ishlash jarayonida xatolik yuzaga kelgan bo'lsa ham, so'rov muvaffaqiyatli ishlangan deb javob beradi. Bu so'rovlarni qanday takrorlashni bilmaydigan tizimlar bilan ishlash uchun maxsus qilingan - yoki aksincha, buni juda qat'iylik bilan bajaradi. Ma'lumotni yo'qotmaslik uchun ta'mirlash navbati qo'llaniladi: ob'ekt birinchi navbatda unga kiradi va faqat muvaffaqiyatli ishlov berish undan olib tashlangandan keyin. Administrator ta'mirlash navbatida qolgan ob'ektlar haqida ogohlantirishlar olishi mumkin va dasturiy ta'minot xatosi yoki apparatdagi nosozlikni bartaraf etgandan so'ng, qayta urinib ko'ring.

Kirish protsessori

Kirish protsessori qabul qilingan ma'lumotlarni xarakterli xususiyatlarga ko'ra tasniflaydi va tegishli protsessorlarni chaqiradi. Ishlovchilar qum qutisida ishlaydigan Lua kodidir, shuning uchun ular tizimning ishlashiga ta'sir qila olmaydi. Ushbu bosqichda ma'lumotlar kerakli shaklga qisqartirilishi mumkin va agar kerak bo'lsa, kerakli mantiqni amalga oshirishi mumkin bo'lgan ixtiyoriy miqdordagi vazifalarni ishga tushirish mumkin. Misol uchun, Tarantool Data Grid-da qurilgan MDM (Master Data Management) mahsulotida yangi foydalanuvchi qo'shilganda, so'rovni qayta ishlashni sekinlashtirmaslik uchun biz alohida vazifa sifatida oltin rekord yaratishni boshlaymiz. Sandbox ma'lumotlarni o'qish, o'zgartirish va qo'shish so'rovlarini qo'llab-quvvatlaydi, saqlash turining barcha rollarida va natijani yig'ishda ba'zi funktsiyalarni bajarishga imkon beradi (xarita / qisqartirish).

Ishlovchilarni fayllarda tavsiflash mumkin:

sum.lua

local x, y = unpack(...)
return x + y

Va keyin, konfiguratsiyada e'lon qilingan:

functions:
  sum: { __file: sum.lua }

Nega Lua? Lua juda oddiy til. Bizning tajribamizga asoslanib, u bilan tanishgandan keyin bir necha soat o'tgach, odamlar o'z muammolarini hal qiladigan kod yozishni boshlaydilar. Va bu nafaqat professional ishlab chiquvchilar, balki, masalan, tahlilchilar. Bundan tashqari, jit kompilyatori tufayli Lua juda tez ishlaydi.

saqlash

Saqlash doimiy ma'lumotlarni saqlaydi. Saqlashdan oldin ma'lumotlar ma'lumotlar sxemasiga muvofiq tekshiriladi. Sxemani tasvirlash uchun biz kengaytirilgan formatdan foydalanamiz Apache Avro. Misol:

{
    "name": "User",
    "type": "record",
    "logicalType": "Aggregate",
    "fields": [ 
        { "name": "id", "type": "string"}, 
        {"name": "first_name", "type": "string"}, 
        {"name": "last_name", "type": "string"} 
    ], 
    "indexes": ["id"] 
}

Ushbu tavsifga asoslanib, DDL (Data Definition Language) Tarantula DBMS uchun avtomatik ravishda yaratiladi va GraphQL ma'lumotlarga kirish sxemasi.

Asinxron ma'lumotlarni takrorlash qo'llab-quvvatlanadi (sinxronni qo'shish rejalashtirilgan).

Chiqish protsessori

Ba'zan tashqi iste'molchilarni yangi ma'lumotlarning kelishi haqida xabardor qilish kerak bo'ladi, buning uchun Chiqish protsessorining roli mavjud. Ma'lumotlarni saqlagandan so'ng, u tegishli ishlov beruvchiga uzatilishi mumkin (masalan, uni iste'molchi talab qiladigan shaklga keltirish uchun) va keyin jo'natish uchun ulagichga o'tkazilishi mumkin. Bu erda ta'mirlash navbati ham qo'llaniladi: agar ob'ektni hech kim qabul qilmasa, administrator keyinroq qayta urinib ko'rishi mumkin.

Masshtablash

Ulagich, kirish protsessor va chiqish protsessor rollari davlatsizdir, bu bizga kerakli rol turi yoqilgan yangi dastur misollarini qo'shish orqali tizimni gorizontal ravishda o'lchash imkonini beradi. Saqlash gorizontal masshtablash uchun ishlatiladi yondashuv virtual chelaklar yordamida klaster tashkil qilish. Yangi server qo'shilgandan so'ng, eski serverlardagi ba'zi chelaklar fonda yangi serverga o'tkaziladi; bu foydalanuvchilar uchun shaffof tarzda sodir bo'ladi va butun tizimning ishlashiga ta'sir qilmaydi.

Ma'lumotlar xususiyatlari

Ob'ektlar juda katta bo'lishi mumkin va boshqa ob'ektlarni o'z ichiga olishi mumkin. Ob'ektni barcha bog'liqliklar bilan bitta virtual chelakda saqlash orqali ma'lumotlarni qo'shish va yangilashning atomikligini ta'minlaymiz. Bu ob'ektning bir nechta jismoniy serverlar bo'ylab "tarqalishi" ni oldini oladi.

Versiyalash qo'llab-quvvatlanadi: ob'ektning har bir yangilanishi yangi versiyani yaratadi va biz har doim vaqt bo'lagini olib, dunyoning o'sha paytdagi ko'rinishini ko'rishimiz mumkin. Uzoq tarixga muhtoj bo'lmagan ma'lumotlar uchun biz versiyalar sonini cheklab qo'yishimiz yoki faqat bittasini - eng so'nggisini saqlashimiz mumkin, ya'ni ma'lum bir turdagi versiyani o'chirib qo'yishimiz mumkin. Shuningdek, siz tarixni vaqt bo'yicha cheklashingiz mumkin: masalan, 1 yildan kattaroq ma'lum turdagi barcha ob'ektlarni o'chirib tashlang. Arxivlash ham qo'llab-quvvatlanadi: biz klasterda bo'sh joy bo'shatib, belgilangan vaqtdan eskiroq ob'ektlarni tushirishimiz mumkin.

vazifalar

Qiziqarli xususiyatlar qatorida, vazifalarni jadval bo'yicha, foydalanuvchining iltimosiga binoan yoki dasturli ravishda qum qutisidan boshlash qobiliyatini ta'kidlash kerak:

Tarantool Data Grid arxitekturasi va imkoniyatlari

Bu erda biz boshqa rolni ko'ramiz - yuguruvchi. Bu rol fuqaroligi yo'q va kerak bo'lganda ushbu rolga ega qo'shimcha dastur misollari klasterga qo'shilishi mumkin. Yuguruvchining vazifasi topshiriqlarni bajarishdir. Yuqorida aytib o'tilganidek, qum qutisidan yangi vazifalarni yaratish mumkin; ular saqlashda navbatda saqlanadi va keyin yuguruvchida bajariladi. Ushbu turdagi vazifa Ish deb ataladi. Shuningdek, bizda Task deb nomlangan vazifa turi mavjud - bular jadval bo'yicha (cron sintaksisi yordamida) yoki talab bo'yicha ishlaydigan foydalanuvchi tomonidan belgilangan vazifalar. Bunday vazifalarni ishga tushirish va kuzatish uchun bizda qulay vazifa menejeri mavjud. Ushbu funksiya mavjud bo'lishi uchun siz rejalashtiruvchi rolini yoqishingiz kerak; bu rol davlatga ega, shuning uchun u miqyosda emas, ammo bu talab qilinmaydi; shu bilan birga, boshqa barcha rollar singari, agar usta to'satdan rad etsa, ishlay boshlaydigan replikatsiyaga ega bo'lishi mumkin.

Jurnal

Boshqa rol logger deb ataladi. U klasterning barcha a'zolaridan jurnallarni to'playdi va ularni veb-interfeys orqali yuklash va ko'rish uchun interfeysni taqdim etadi.

xizmatlar

Shuni ta'kidlash kerakki, tizim xizmatlarni yaratishni osonlashtiradi. Konfiguratsiya faylida siz qaysi so'rovlar sinov muhitida ishlaydigan foydalanuvchi tomonidan yozilgan ishlov beruvchiga yuborilishini belgilashingiz mumkin. Ushbu ishlov beruvchida siz, masalan, qandaydir analitik so'rovni bajarishingiz va natijani qaytarishingiz mumkin.

Xizmat konfiguratsiya faylida tasvirlangan:

services:
   sum:
      doc: "adds two numbers"
      function: sum
      return_type: int
      args:
         x: int
         y: int

GraphQL API avtomatik tarzda yaratiladi va xizmat qo'ng'iroq qilish uchun mavjud bo'ladi:

query {
   sum(x: 1, y: 2) 
}

Bu ishlov beruvchini chaqiradi sumnatijani qaytaradi:

3

So'rovlar profili va ko'rsatkichlari

Tizimning ishlashini va profil so'rovlarini tushunish uchun biz OpenTracing protokolini qo'llab-quvvatladik. Tizim talab bo'yicha ma'lumotni ushbu protokolni qo'llab-quvvatlaydigan vositalarga yuborishi mumkin, masalan, Zipkin, bu sizga so'rov qanday bajarilganligini tushunish imkonini beradi:

Tarantool Data Grid arxitekturasi va imkoniyatlari

Tabiiyki, tizim Prometey yordamida to'planishi va Grafana yordamida vizualizatsiya qilinishi mumkin bo'lgan ichki ko'rsatkichlarni taqdim etadi.

Joylashtirish

Tarantool Data Grid tarqatish yoki Ansible yordam dasturidan foydalangan holda RPM paketlari yoki arxivdan joylashtirilishi mumkin, shuningdek Kubernetes qo'llab-quvvatlanadi (Tarantool Kubernetes operatori).

Biznes mantiqini (konfiguratsiya, ishlov beruvchilar) amalga oshiradigan dastur UI orqali arxiv shaklida yoki biz taqdim etgan API orqali skript yordamida joylashtirilgan Tarantool Data Grid klasteriga yuklanadi.

Namuna ilovalar

Tarantool Data Grid yordamida qanday ilovalar yaratilishi mumkin? Aslida, biznesning aksariyat vazifalari ma'lumotlar oqimini qayta ishlash, saqlash va ularga kirish bilan bog'liq. Shuning uchun, agar sizda xavfsiz saqlanishi va kirishi kerak bo'lgan katta ma'lumotlar oqimi mavjud bo'lsa, bizning mahsulotimiz sizga ko'p ishlab chiqish vaqtini tejashi va biznes mantiqingizga e'tibor qaratishi mumkin.

Misol uchun, biz ko'chmas mulk bozori haqida ma'lumot to'plashni xohlaymiz, shunda kelajakda, masalan, eng yaxshi takliflar haqida ma'lumotga ega bo'lamiz. Bu holda biz quyidagi vazifalarni ajratib ko'rsatamiz:

  1. Ochiq manbalardan ma'lumot to'playdigan robotlar bizning ma'lumot manbalarimiz bo'ladi. Siz bu muammoni tayyor echimlar yoki istalgan tilda kod yozish yordamida hal qilishingiz mumkin.
  2. Keyinchalik, Tarantool Data Grid ma'lumotlarni qabul qiladi va saqlaydi. Agar turli manbalardan olingan ma'lumotlar formati boshqacha bo'lsa, u holda siz Lua-da bitta formatga aylantirishni amalga oshiradigan kod yozishingiz mumkin. Oldindan ishlov berish bosqichida siz, masalan, takroriy takliflarni filtrlashingiz yoki ma'lumotlar bazasida bozorda ishlaydigan agentlar haqidagi ma'lumotlarni qo'shimcha ravishda yangilashingiz mumkin.
  3. Endi sizda allaqachon ma'lumotlar bilan to'ldirilishi va ma'lumotlarni tanlashi mumkin bo'lgan klasterda kengaytiriladigan yechim mavjud. Keyin siz yangi funksionallikni amalga oshirishingiz mumkin, masalan, ma'lumotlar uchun so'rov yuboradigan va kuniga eng foydali taklifni beradigan xizmatni yozing - buning uchun konfiguratsiya faylida bir nechta qatorlar va ozgina Lua kodi kerak bo'ladi.

Keyin nima?

Bizning ustuvor vazifamiz foydalanish qulayligini yaxshilashdir Tarantool ma'lumotlar tarmog'i. Misol uchun, bu sandboxda ishlaydigan profil yaratish va disk raskadrovka ishlov beruvchilarini qo'llab-quvvatlaydigan IDE.

Biz xavfsizlik masalalariga ham katta e'tibor beramiz. Hozirda biz yuqori darajadagi xavfsizlikni tasdiqlash va shaxsiy ma'lumotlar axborot tizimlari va davlat axborot tizimlarida qo'llaniladigan dasturiy mahsulotlarni sertifikatlash talablariga javob berish uchun Rossiyaning FSTEC sertifikatidan o'tmoqdamiz.

Manba: www.habr.com

a Izoh qo'shish