Arsitektur lan kabisan Tarantool Data Grid

Arsitektur lan kabisan Tarantool Data Grid

Ing 2017, kita menang kompetisi kanggo ngembangake inti transaksi bisnis investasi Alfa-Bank lan wiwit kerja (ing HighLoad ++ 2018 kanthi laporan babagan inti bisnis investasi. dileksanakake Vladimir Drynkin, kepala inti transaksional bisnis investasi Alfa Bank). Sistem iki mestine kanggo nglumpukake data transaksi saka macem-macem sumber ing macem-macem format, nggawa data menyang wangun terpadu, nyimpen lan nyedhiyani akses menyang.

Sajrone proses pangembangan, sistem ngalami évolusi lan entuk fungsi, lan ing sawetara titik kita nyadari manawa kita nggawe kristal luwih saka mung piranti lunak aplikasi sing digawe kanggo ngrampungake macem-macem tugas sing ditetepake kanthi ketat: kita sukses. sistem kanggo mbangun aplikasi sing disebarake kanthi panyimpenan sing terus-terusan. Pengalaman sing dipikolehi dadi dhasar produk anyar - Tarantool Data Grid (TDG).

Aku pengin ngomong babagan arsitektur TDG lan solusi sing kita temokake sajrone proses pangembangan, ngenalake sampeyan fungsi utama lan nuduhake kepiye produk bisa dadi basis kanggo mbangun solusi lengkap.

Secara arsitektur, kita dibagi sistem dadi kapisah peran, sing saben tanggung jawab kanggo ngrampungake sawetara masalah tartamtu. Kayata aplikasi sing mlaku ngleksanakake siji utawa luwih jinis peran. Bisa uga ana sawetara peran saka jinis sing padha ing kluster:

Arsitektur lan kabisan Tarantool Data Grid

konektor

Konektor tanggung jawab kanggo komunikasi karo donya njaba; tugas iku kanggo nampa panjalukan, parse, lan yen iki kasil, banjur ngirim data kanggo Processing kanggo prosesor input. Kita ndhukung format HTTP, SOAP, Kafka, FIX. Arsitèktur iki ngidini sampeyan mung nambah dhukungan kanggo format anyar, kanthi dhukungan kanggo IBM MQ sing bakal teka. Yen parsing panjalukan gagal, konektor bakal bali kesalahan; yen ora, iku bakal nanggapi yen panjalukan wis kasil diproses, malah yen ana kesalahan sak Processing luwih. Iki ditindakake khusus kanggo nggarap sistem sing ora ngerti carane mbaleni panjaluk - utawa, sebaliknya, nindakake kanthi terus-terusan. Supaya ora ilang data, antrian repair digunakake: obyek pisanan nemu menyang lan mung sawise Processing sukses dibusak saka iku. Administrator bisa nampa tandha babagan obyek sing isih ana ing antrian ndandani, lan sawise ngilangi kesalahan piranti lunak utawa kegagalan hardware, coba maneh.

prosesor input

Prosesor Input nggolongake data sing ditampa miturut fitur karakteristik lan nelpon prosesor sing cocog. Handler minangka kode Lua sing mlaku ing kothak wedhi, saengga ora bisa mengaruhi fungsi sistem kasebut. Ing tahap iki, data bisa dikurangi dadi formulir sing dibutuhake, lan, yen perlu, jumlah tugas sing sewenang-wenang bisa diluncurake sing bisa ngetrapake logika sing dibutuhake. Contone, ing produk MDM (Master Data Management) sing dibangun ing Tarantool Data Grid, nalika nambahake pangguna anyar, supaya ora alon-alon pangolahan panjaluk kasebut, kita miwiti nggawe rekaman emas minangka tugas sing kapisah. Kothak wedhi ndhukung panjalukan kanggo maca, ngganti lan nambah data, ngidini sampeyan nindakake sawetara fungsi ing kabeh peran saka jinis panyimpenan lan nglumpukake asil (peta / nyuda).

Handler bisa diterangake ing file:

sum.lua

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

Banjur, nyatakake ing konfigurasi:

functions:
  sum: { __file: sum.lua }

Kenapa Lua? Basa Lua iku basa sing prasaja. Adhedhasar pengalaman kita, sawetara jam sawise ngerti, wong wiwit nulis kode sing bisa ngrampungake masalahe. Lan iki ora mung pangembang profesional, nanging, contone, analis. Kajaba iku, thanks kanggo kompiler jit, Lua mlaku kanthi cepet.

Lumbung

Panyimpenan nyimpen data sing terus-terusan. Sadurunge nyimpen, data divalidasi karo skema data. Kanggo njlèntrèhaké sirkuit kita nggunakake format lengkap Apache Avro. Tuladha:

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

Adhedhasar katrangan iki, DDL (Data Definition Language) digawe kanthi otomatis kanggo Tarantula DBMS lan GraphQL skema kanggo akses data.

Replikasi data asinkron didhukung (ana rencana nambah sinkron).

prosesor output

Kadhangkala perlu menehi kabar marang konsumen eksternal babagan kedadeyan data anyar, kanggo tujuan iki, ana peran prosesor Output. Sawise nyimpen data, iku bisa liwati menyang handler cocok (contone, kanggo nggawa menyang wangun dibutuhake dening konsumen) - lan banjur liwati menyang konektor kanggo ngirim. Antrian ndandani uga digunakake ing kene: yen ora ana sing nampa obyek kasebut, administrator bisa nyoba maneh mengko.

Scaling

Peran konektor, prosesor input, lan prosesor output ora nduweni status, ngidini kita nggedhekake sistem kanthi horisontal kanthi mung nambahake aplikasi anyar kanthi jinis peran sing dikarepake diaktifake. Panyimpenan digunakake kanggo skala horisontal pendekatan kanggo ngatur kluster nggunakake ember virtual. Sawise nambahake server anyar, sawetara ember saka server lawas dipindhah menyang server anyar ing latar mburi; iki kedadeyan kanthi transparan kanggo pangguna lan ora mengaruhi operasi kabeh sistem.

Sifat Data

Obyek bisa gedhe banget lan ngemot obyek liyane. Kita njamin atomicity nambah lan nganyari data kanthi nyimpen obyek kanthi kabeh dependensi ing siji ember virtual. Iki nyegah obyek saka "nyebar" ing sawetara server fisik.

Versioning didhukung: saben nganyari obyek nggawe versi anyar, lan kita bisa tansah njupuk irisan wektu lan ndeleng carane donya katon banjur. Kanggo data sing ora mbutuhake sejarah sing dawa, kita bisa mbatesi jumlah versi utawa mung nyimpen siji - sing paling anyar - yaiku, mateni versi kanggo jinis tartamtu. Sampeyan uga bisa matesi sajarah miturut wektu: contone, mbusak kabeh obyek saka jinis tartamtu lawas saka 1 taun. Arsip uga didhukung: kita bisa mbongkar obyek sing luwih lawas tinimbang wektu sing ditemtokake, mbebasake spasi ing kluster.

tugas

Antarane fitur sing menarik, perlu dicathet kemampuan kanggo miwiti tugas kanthi jadwal, miturut panyuwunan pangguna, utawa kanthi program saka kothak wedhi:

Arsitektur lan kabisan Tarantool Data Grid

Kene kita ndeleng peran liyane - runner. Peran iki stateless, lan conto aplikasi tambahan karo peran iki bisa ditambahake menyang kluster yen perlu. Tanggung jawab pelari yaiku ngrampungake tugas. Kaya sing kasebut, bisa ngasilake tugas anyar saka kothak wedhi; padha disimpen ing antrian ing panyimpenan lan banjur kaleksanan ing runner. Jinis tugas iki diarani Ayub. Kita uga duwe jinis tugas sing disebut Tugas - iki minangka tugas sing ditemtokake pangguna sing mlaku kanthi jadwal (nggunakake sintaks cron) utawa dikarepake. Kanggo miwiti lan nglacak tugas kasebut, kita duwe manajer tugas sing trep. Supaya fungsi iki kasedhiya, sampeyan kudu ngaktifake peran panjadwal; peran iki wis negara, supaya ora ukuran, kang, Nanging, ora dibutuhake; ing wektu sing padha, kaya kabeh peran liyane, bisa duwe tiron sing wiwit bisa yen master dumadakan nolak.

logger

Peran liyane diarani logger. Nglumpukake log saka kabeh anggota kluster lan menehi antarmuka kanggo ngunggah lan ndeleng liwat antarmuka web.

Layanan

Perlu dielingake manawa sistem kasebut gampang nggawe layanan. Ing file konfigurasi, sampeyan bisa nemtokake panjalukan sing dikirim menyang pawang sing ditulis pangguna sing mlaku ing kothak wedhi. Ing pawang iki, sampeyan bisa, contone, mbukak sawetara jinis pitakon analitis lan ngasilake asil.

Layanan kasebut diterangake ing file konfigurasi:

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

API GraphQL digawe kanthi otomatis lan layanan kasebut kasedhiya kanggo nelpon:

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

Iki bakal nelpon pawang sumsing bakal ngasilake asil:

3

Query Profiling lan Metrik

Kanggo mangerteni operasi sistem lan panjalukan profil, kita ngetrapake dhukungan kanggo protokol OpenTracing. Sistem bisa ngirim informasi sing dikarepake menyang alat sing ndhukung protokol iki, kayata Zipkin, sing ngidini sampeyan ngerti carane panjaluk kasebut ditindakake:

Arsitektur lan kabisan Tarantool Data Grid

Alamiah, sistem kasebut nyedhiyakake metrik internal sing bisa diklumpukake nggunakake Prometheus lan digambarake nggunakake Grafana.

nyebarake

Tarantool Data Grid bisa disebarake saka paket RPM utawa arsip, nggunakake sarana saka distribusi utawa Ansible, ana uga dhukungan kanggo Kubernetes (Tarantool Kubernetes Operator).

Aplikasi sing ngleksanakake logika bisnis (konfigurasi, pawang) dimuat menyang kluster Tarantool Data Grid disebarake ing wangun arsip liwat UI utawa nggunakake script liwat API diwenehake dening kita.

Aplikasi Sample

Aplikasi apa sing bisa digawe nggunakake Tarantool Data Grid? Nyatane, umume tugas bisnis ana gandhengane karo proses, nyimpen lan ngakses aliran data. Mulane, yen sampeyan duwe aliran data gedhe sing kudu disimpen lan diakses kanthi aman, produk kita bisa ngirit akeh wektu pangembangan lan fokus ing logika bisnis sampeyan.

Contone, kita pengin ngumpulake informasi babagan pasar real estate, supaya ing mangsa ngarep, contone, kita bakal duwe informasi babagan tawaran paling apik. Ing kasus iki, kita bakal nyorot tugas ing ngisor iki:

  1. Robot sing ngumpulake informasi saka sumber terbuka bakal dadi sumber data kita. Sampeyan bisa ngatasi masalah iki nggunakake solusi sing wis siap utawa nulis kode ing basa apa wae.
  2. Sabanjure, Tarantool Data Grid bakal nampa lan nyimpen data kasebut. Yen format data saka macem-macem sumber beda, sampeyan bisa nulis kode ing Lua sing bakal nindakake konversi menyang format siji. Ing tataran pra-proses, sampeyan uga bakal bisa, contone, kanggo nyaring duplikat tawaran utawa tambahan nganyari informasi bab agen makarya ing pasar ing database.
  3. Saiki sampeyan wis duwe solusi skalabel ing kluster sing bisa diisi data lan nggawe pilihan data. Banjur sampeyan bisa ngleksanakake fungsi anyar, contone, nulis layanan sing bakal njaluk data lan menehi tawaran paling mupangati saben dina - iki mbutuhake sawetara baris ing file konfigurasi lan kode Lua sethitik.

Apa sabanjuré?

Prioritas kita kanggo nambah ease pembangunan nggunakake Tarantool Data Grid. Contone, iki minangka IDE kanthi dhukungan kanggo panangan profil lan debugging sing mlaku ing kothak wedhi.

Kita uga mbayar manungsa waé gedhe kanggo masalah safety. Saiki kita lagi ngalami sertifikasi dening FSTEC Rusia kanggo ngonfirmasi tingkat keamanan sing dhuwur lan nyukupi syarat kanggo sertifikasi produk piranti lunak sing digunakake ing sistem informasi data pribadi lan sistem informasi pemerintah.

Source: www.habr.com

Add a comment